getTransactionsForCustomer(String customerName, String customerEmail) {
+ return find("customerName = ?1 and customerEmail = ?2 and time > ?3",
+ customerName,
+ customerEmail,
+ LocalDateTime.now().minusMinutes(15)).list();
+ }
+
+ @Tool("Get the city for a given transaction id")
+ public String getCityForTransaction(long transactionId) {
+ return find("id = ?1", transactionId).firstResult().city;
+ }
+
+}
diff --git a/samples/secure-fraud-detection/src/main/resources/META-INF/resources/images/google.png b/samples/secure-fraud-detection/src/main/resources/META-INF/resources/images/google.png
new file mode 100644
index 000000000..e2503df4e
Binary files /dev/null and b/samples/secure-fraud-detection/src/main/resources/META-INF/resources/images/google.png differ
diff --git a/samples/secure-fraud-detection/src/main/resources/META-INF/resources/index.html b/samples/secure-fraud-detection/src/main/resources/META-INF/resources/index.html
new file mode 100644
index 000000000..6fd3636ed
--- /dev/null
+++ b/samples/secure-fraud-detection/src/main/resources/META-INF/resources/index.html
@@ -0,0 +1,133 @@
+
+
+
+
+ Secure Fraud Detection
+
+
+
+
+
+ Secure Fraud Detection
+
+
+
+
+
+
+
diff --git a/samples/secure-fraud-detection/src/main/resources/META-INF/services/io.quarkiverse.langchain4j.spi.DefaultMemoryIdProvider b/samples/secure-fraud-detection/src/main/resources/META-INF/services/io.quarkiverse.langchain4j.spi.DefaultMemoryIdProvider
new file mode 100644
index 000000000..4a8d26572
--- /dev/null
+++ b/samples/secure-fraud-detection/src/main/resources/META-INF/services/io.quarkiverse.langchain4j.spi.DefaultMemoryIdProvider
@@ -0,0 +1 @@
+io.quarkiverse.langchain4j.sample.SecureMemoryIdProvider
\ No newline at end of file
diff --git a/samples/secure-fraud-detection/src/main/resources/application.properties b/samples/secure-fraud-detection/src/main/resources/application.properties
new file mode 100644
index 000000000..e87a9c8e5
--- /dev/null
+++ b/samples/secure-fraud-detection/src/main/resources/application.properties
@@ -0,0 +1,12 @@
+quarkus.langchain4j.openai.timeout=60s
+quarkus.langchain4j.openai.chat-model.temperature=0
+quarkus.langchain4j.openai.api-key=${OPENAI_API_KEY}
+
+quarkus.oidc.provider=google
+quarkus.oidc.client-id=${GOOGLE_CLIENT_ID}
+quarkus.oidc.credentials.secret=${GOOGLE_CLIENT_SECRET}
+quarkus.oidc.authentication.redirect-path=/login
+
+#quarkus.langchain4j.openai.log-requests=true
+#quarkus.langchain4j.openai.log-responses=true
+
diff --git a/samples/secure-fraud-detection/src/main/resources/templates/fraudDetection.html b/samples/secure-fraud-detection/src/main/resources/templates/fraudDetection.html
new file mode 100644
index 000000000..7f63cdb48
--- /dev/null
+++ b/samples/secure-fraud-detection/src/main/resources/templates/fraudDetection.html
@@ -0,0 +1,23 @@
+
+
+
+
+Secure Fraud Detection
+
+
+ Hello {name}, please check fraud occurrences by amount or distance:
+
+ Logout
+
+