diff --git a/pom.xml b/pom.xml
index b7e1849f0..e0fdb0b57 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,6 +15,8 @@
core
docs
+
+ embedding-parsers/llama-parse
embedding-stores/chroma
embedding-stores/infinispan
diff --git a/rag/llama-parse/deployment/pom.xml b/rag/llama-parse/deployment/pom.xml
new file mode 100644
index 000000000..420b7d75c
--- /dev/null
+++ b/rag/llama-parse/deployment/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ io.quarkiverse.langchain4j
+ quarkus-langchain4j-llama-parse-parent
+ 999-SNAPSHOT
+
+ quarkus-langchain4j-llama-parse-deployment
+ Quarkus LangChain4j - LLamaParse - Deployment
+
+
+ io.quarkus
+ quarkus-arc-deployment
+
+
+ io.quarkus
+ quarkus-rest-client-reactive-jackson-deployment
+
+
+ io.quarkus
+ quarkus-devservices-deployment
+
+
+ io.quarkiverse.langchain4j
+ quarkus-langchain4j-core-deployment
+ ${project.version}
+
+
+ dev.langchain4j
+ langchain4j-core
+ tests
+ test-jar
+ test
+ ${langchain4j.version}
+
+
+ io.quarkus
+ quarkus-junit5-internal
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
+
+ maven-compiler-plugin
+
+
+
+ io.quarkus
+ quarkus-extension-processor
+ ${quarkus.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ false
+
+
+
+
+
diff --git a/rag/llama-parse/deployment/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseBuildConfig.java b/rag/llama-parse/deployment/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseBuildConfig.java
new file mode 100644
index 000000000..370ad5498
--- /dev/null
+++ b/rag/llama-parse/deployment/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseBuildConfig.java
@@ -0,0 +1,20 @@
+package io.quarkiverse.langchain4j.llama.parse;
+
+import io.quarkus.runtime.annotations.ConfigRoot;
+import io.smallrye.config.ConfigMapping;
+import io.smallrye.config.WithDefault;
+
+import static io.quarkus.runtime.annotations.ConfigPhase.BUILD_TIME;
+
+@ConfigRoot(phase = BUILD_TIME)
+@ConfigMapping(prefix = "quarkus.langchain4j.llamaparser")
+public interface LlamaParseBuildConfig {
+
+ String apiKey();
+
+ /**
+ * Base URL of OpenAI API
+ */
+ @WithDefault("https://api.cloud.llamaindex.ai/api/parsing")
+ String baseUrl();
+}
diff --git a/rag/llama-parse/deployment/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseProcessor.java b/rag/llama-parse/deployment/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseProcessor.java
new file mode 100644
index 000000000..94eb8b650
--- /dev/null
+++ b/rag/llama-parse/deployment/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseProcessor.java
@@ -0,0 +1,23 @@
+package io.quarkiverse.langchain4j.llama.parse;
+
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Record;
+import io.quarkus.deployment.builditem.FeatureBuildItem;
+import org.jboss.jandex.DotName;
+
+public class LlamaParseProcessor {
+
+ private static final String FEATURE = "langchain4j-llamaparse";
+ private static final DotName LLAMA_PARSE = DotName.createSimple(LlamaParseProcessor.class);
+
+ @BuildStep
+ FeatureBuildItem feature() {
+ return new FeatureBuildItem(FEATURE);
+ }
+
+ @BuildStep
+ @Record(ExecutionTime.RUNTIME_INIT)
+ public void createBean() {
+ }
+}
diff --git a/rag/llama-parse/pom.xml b/rag/llama-parse/pom.xml
new file mode 100644
index 000000000..d7eb58472
--- /dev/null
+++ b/rag/llama-parse/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ io.quarkiverse.langchain4j
+ quarkus-langchain4j-parent
+ 999-SNAPSHOT
+ ../../pom.xml
+
+ quarkus-langchain4j-llama-parse-parent
+ Quarkus LangChain4j - LLamaParse - Parent
+ pom
+
+
+ deployment
+ runtime
+
+
+
+
diff --git a/rag/llama-parse/runtime/pom.xml b/rag/llama-parse/runtime/pom.xml
new file mode 100644
index 000000000..684d3c622
--- /dev/null
+++ b/rag/llama-parse/runtime/pom.xml
@@ -0,0 +1,84 @@
+
+
+ 4.0.0
+
+ io.quarkiverse.langchain4j
+ quarkus-langchain4j-llama-parse-parent
+ 999-SNAPSHOT
+
+ quarkus-langchain4j-llama-parse
+ Quarkus LangChain4j - LLamaParse - Runtime
+
+
+ io.quarkus
+ quarkus-arc
+
+
+ io.quarkus
+ quarkus-rest-client-reactive-jackson
+
+
+ io.quarkiverse.langchain4j
+ quarkus-langchain4j-core
+ ${project.version}
+
+
+
+ org.graalvm.sdk
+ graal-sdk
+ provided
+
+
+
+
+
+ io.quarkus
+ quarkus-extension-maven-plugin
+ ${quarkus.version}
+
+
+ compile
+
+ extension-descriptor
+
+
+ ${project.groupId}:${project.artifactId}-deployment:${project.version}
+
+
+
+
+
+ maven-compiler-plugin
+
+
+
+ io.quarkus
+ quarkus-extension-processor
+ ${quarkus.version}
+
+
+
+
+
+ maven-jar-plugin
+
+
+ generate-codestart-jar
+ generate-resources
+
+ jar
+
+
+ ${project.basedir}/src/main
+
+ codestarts/**
+
+ codestarts
+ true
+
+
+
+
+
+
+
diff --git a/rag/llama-parse/runtime/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseRestApi.java b/rag/llama-parse/runtime/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseRestApi.java
new file mode 100644
index 000000000..ca46885ad
--- /dev/null
+++ b/rag/llama-parse/runtime/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseRestApi.java
@@ -0,0 +1,24 @@
+package io.quarkiverse.langchain4j.llama.parse;
+
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+
+@Path("")
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
+public interface LlamaParseRestApi {
+
+ @Path("/upload")
+ @Consumes(MediaType.MULTIPART_FORM_DATA)
+ @Produces(MediaType.APPLICATION_JSON)
+ LlamaParseUploadResponse upload(LlamaParseUploadRequest llamaParseUploadRequest);
+
+ @Path("/job/{job_id}/result/json")
+ Response jobJsonResult(String job_id);
+
+ @Path("/job/{job_id}/result/markdown")
+ Response jobMarkdownResult(String job_id);
+}
diff --git a/rag/llama-parse/runtime/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseUploadRequest.java b/rag/llama-parse/runtime/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseUploadRequest.java
new file mode 100644
index 000000000..8da2f57b2
--- /dev/null
+++ b/rag/llama-parse/runtime/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseUploadRequest.java
@@ -0,0 +1,24 @@
+package io.quarkiverse.langchain4j.llama.parse;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import org.jboss.resteasy.reactive.PartType;
+import org.jboss.resteasy.reactive.RestForm;
+
+import jakarta.ws.rs.core.MediaType;
+import java.io.InputStream;
+import java.util.Map;
+
+@RegisterForReflection
+public class LlamaParseUploadRequest {
+
+ /** The file data */
+ @RestForm
+ @PartType(MediaType.APPLICATION_OCTET_STREAM)
+ private InputStream file;
+
+ /** The file name */
+ @RestForm
+ @PartType(MediaType.TEXT_PLAIN)
+ private String filename;
+
+}
diff --git a/rag/llama-parse/runtime/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseUploadResponse.java b/rag/llama-parse/runtime/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseUploadResponse.java
new file mode 100644
index 000000000..68313a8e6
--- /dev/null
+++ b/rag/llama-parse/runtime/src/main/java/io/quarkiverse/langchain4j/llama/parse/LlamaParseUploadResponse.java
@@ -0,0 +1,15 @@
+package io.quarkiverse.langchain4j.llama.parse;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import jakarta.ws.rs.core.MediaType;
+import org.jboss.resteasy.reactive.PartType;
+import org.jboss.resteasy.reactive.RestForm;
+
+import java.io.InputStream;
+
+@RegisterForReflection
+public class LlamaParseUploadResponse {
+
+ private String id;
+
+}
diff --git a/rag/llama-parse/runtime/src/main/resources/META-INF/beans.xml b/rag/llama-parse/runtime/src/main/resources/META-INF/beans.xml
new file mode 100644
index 000000000..e69de29bb
diff --git a/rag/llama-parse/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/rag/llama-parse/runtime/src/main/resources/META-INF/quarkus-extension.yaml
new file mode 100644
index 000000000..a198ed8de
--- /dev/null
+++ b/rag/llama-parse/runtime/src/main/resources/META-INF/quarkus-extension.yaml
@@ -0,0 +1,13 @@
+name: Quarkus LangChain4j LlamaParse
+artifact: ${project.groupId}:${project.artifactId}:${project.version}
+description: Provides the module for integrating LangChain4j LlamaParse parser in Quarkus LangChain4j
+metadata:
+ keywords:
+ - ai
+ - langchain4j
+ - llamaparse
+ - rag
+ guide: "https://docs.quarkiverse.io/quarkus-langchain4j/dev/index.html"
+ categories:
+ - "miscellaneous"
+ status: "experimental"