This is an automated email from the ASF dual-hosted git repository.
aldettinger pushed a commit to branch camel-quarkus-main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus-examples.git
The following commit(s) were added to refs/heads/camel-quarkus-main by this
push:
new 5e9ecb0 data-extract: switch to ollama structured output
5e9ecb0 is described below
commit 5e9ecb06730806990b41897ad9c977cfd17829f3
Author: aldettinger <[email protected]>
AuthorDate: Mon Feb 3 10:53:39 2025 +0100
data-extract: switch to ollama structured output
---
data-extract-langchain4j/README.adoc | 6 +++---
.../extraction/CustomPojoExtractionService.java | 25 +++++++++++++++-------
.../src/main/java/org/acme/extraction/Routes.java | 1 -
.../src/main/resources/application.properties | 1 -
.../org/acme/extraction/OllamaTestResource.java | 2 +-
.../test/java/org/acme/extraction/RouteTest.java | 6 +++---
..._chat-32621e2b-3757-47c3-81a1-8a4fbe85fa70.json | 24 ---------------------
..._chat-608a9883-c373-4219-a55c-e560e83df720.json | 24 +++++++++++++++++++++
..._chat-87de6be6-8581-403f-8adf-b5f278616d50.json | 24 +++++++++++++++++++++
..._chat-9d0bfc1d-80d8-475c-85eb-a72a13e81d06.json | 24 +++++++++++++++++++++
..._chat-af57842e-561e-4156-876d-75684fabb0a8.json | 24 ---------------------
..._chat-fe938c62-23dc-4814-8d9a-9833afc2be3d.json | 24 ---------------------
12 files changed, 96 insertions(+), 89 deletions(-)
diff --git a/data-extract-langchain4j/README.adoc
b/data-extract-langchain4j/README.adoc
index f0854e7..9b8e0a6 100644
--- a/data-extract-langchain4j/README.adoc
+++ b/data-extract-langchain4j/README.adoc
@@ -14,11 +14,11 @@ In this example, we'll convert those text conversations
into Java Objects that c
image::schema.png[]
-In order to achieve this extraction, we'll need a
https://en.wikipedia.org/wiki/Large_language_model[Large Language Model (LLM)]
that natively supports JSON output.
+In order to achieve this extraction, we'll need a
https://en.wikipedia.org/wiki/Large_language_model[Large Language Model (LLM)]
and related serving framework that natively supports
https://ollama.com/blog/structured-outputs[JSON structured output].
Here, we choose https://ollama.com/library/granite3-dense[granite3-dense]
served through https://ollama.com/[ollama] as it seems compute friendly and
under Apache V2 license.
In order to request inference to the served model, we'll use the high-level
LangChain4j APIs like
https://docs.langchain4j.dev/tutorials/ai-services[AiServices].
More precisely, we'll setup the
https://docs.quarkiverse.io/quarkus-langchain4j/dev/index.html[Quarkus
LangChain4j extension] to register an AiService bean.
-Finally, we'll invoke the AiService extraction method via the
https://camel.apache.org/camel-quarkus/latest/reference/extensions/bean.html[Camel
Quarkus bean extension] .
+Finally, we'll invoke the AiService extraction method via the
https://camel.apache.org/camel-quarkus/latest/reference/extensions/bean.html[Camel
Quarkus bean extension].
=== Start the Large Language Model
@@ -26,7 +26,7 @@ Let's start a container to serve the LLM with Ollama, in a
first shell type:
[source,shell]
----
-docker run --rm -it -v cqex-data-extract-ollama:/root/.ollama -p 11434:11434
--name cqex-data-extract-ollama ollama/ollama:0.4.0-rc5
+docker run --rm -it -v cqex-data-extract-ollama:/root/.ollama -p 11434:11434
--name cqex-data-extract-ollama ollama/ollama:0.5.7
----
After a moment, a log like below should be output:
diff --git
a/data-extract-langchain4j/src/main/java/org/acme/extraction/CustomPojoExtractionService.java
b/data-extract-langchain4j/src/main/java/org/acme/extraction/CustomPojoExtractionService.java
index 8a6923e..34f616e 100644
---
a/data-extract-langchain4j/src/main/java/org/acme/extraction/CustomPojoExtractionService.java
+++
b/data-extract-langchain4j/src/main/java/org/acme/extraction/CustomPojoExtractionService.java
@@ -16,7 +16,7 @@
*/
package org.acme.extraction;
-import java.time.LocalDate;
+import java.time.Month;
import java.util.Locale;
import dev.langchain4j.service.UserMessage;
@@ -24,7 +24,6 @@ import io.quarkiverse.langchain4j.RegisterAiService;
import io.quarkus.runtime.annotations.RegisterForReflection;
import jakarta.enterprise.context.ApplicationScoped;
import org.apache.camel.Handler;
-import org.apache.camel.Header;
import org.apache.camel.jsonpath.JsonPath;
@RegisterAiService
@@ -35,24 +34,34 @@ public interface CustomPojoExtractionService {
static class CustomPojo {
public boolean customerSatisfied;
public String customerName;
- public LocalDate customerBirthday;
+ public CustomDate customerBirthday;
public String summary;
private final static String FORMAT = "\n{\n"
+ "\t\"customerSatisfied\": \"%s\",\n"
+ "\t\"customerName\": \"%s\",\n"
- + "\t\"customerBirthday\": \"%td %tB %tY\",\n"
+ + "\t\"customerBirthday\": \"%s\",\n"
+ "\t\"summary\": \"%s\"\n"
+ "}\n";
public String toString() {
return String.format(Locale.US, FORMAT, this.customerSatisfied,
this.customerName, this.customerBirthday,
- this.customerBirthday, this.customerBirthday,
this.summary);
+ this.summary);
+ }
+ }
+
+ @RegisterForReflection
+ static class CustomDate {
+ int year;
+ int month;
+ int day;
+
+ public String toString() {
+ return String.format("%d %s %d", day, Month.of(month), year);
}
}
static final String CUSTOM_POJO_EXTRACT_PROMPT = "Extract information
about a customer from the text delimited by triple backticks: ```{text}```."
- + "The customerBirthday field should be formatted as {dateFormat}."
+ "The summary field should concisely relate the customer main
ask.";
/**
@@ -61,11 +70,11 @@ public interface CustomPojoExtractionService {
* the pom.xml file. Without -parameters, one would need to use the @V
annotation like in the method signature
* proposed below: extractFromText(@dev.langchain4j.service.V("text")
String text);
*
- * Notice how Camel maps the incoming exchange to the method parameters
with annotations like @JsonPath and @Header.
+ * Notice how Camel maps the incoming exchange to the method parameters
with annotations like @JsonPath.
* More information on the Camel bean parameter binding feature could be
found here:
* https://camel.apache.org/manual/bean-binding.html#_parameter_binding
*/
@UserMessage(CUSTOM_POJO_EXTRACT_PROMPT)
@Handler
- CustomPojo extractFromText(@JsonPath("$.content") String text,
@Header("expectedDateFormat") String dateFormat);
+ CustomPojo extractFromText(@JsonPath("$.content") String text);
}
diff --git
a/data-extract-langchain4j/src/main/java/org/acme/extraction/Routes.java
b/data-extract-langchain4j/src/main/java/org/acme/extraction/Routes.java
index a376aca..f850fed 100644
--- a/data-extract-langchain4j/src/main/java/org/acme/extraction/Routes.java
+++ b/data-extract-langchain4j/src/main/java/org/acme/extraction/Routes.java
@@ -32,7 +32,6 @@ public class Routes extends RouteBuilder {
// Consumes file documents that contain conversation transcripts (JSON
format)
from("file:target/transcripts?sortBy=file:name")
.log("A document has been received by the camel-quarkus-file
extension: ${body}")
- .setHeader("expectedDateFormat", constant("YYYY-MM-DD"))
// The CustomPojoExtractionService transforms the conversation
transcript into a CustomPojoExtractionService.CustomPojo
.bean(CustomPojoExtractionService.class)
// Store extracted CustomPojoExtractionService.CustomPojos
objects into the CustomPojoStore for later inspection
diff --git a/data-extract-langchain4j/src/main/resources/application.properties
b/data-extract-langchain4j/src/main/resources/application.properties
index a37b08d..c1e2dcd 100644
--- a/data-extract-langchain4j/src/main/resources/application.properties
+++ b/data-extract-langchain4j/src/main/resources/application.properties
@@ -22,7 +22,6 @@ quarkus.banner.enabled = false
quarkus.langchain4j.ollama.base-url = http://localhost:11434
quarkus.langchain4j.ollama.timeout = 3m
quarkus.langchain4j.ollama.chat-model.model-id = granite3-dense
-quarkus.langchain4j.ollama.chat-model.format = json
quarkus.langchain4j.ollama.chat-model.temperature = 0
# Uncomment lines below to log Ollama client requests and responses
#quarkus.langchain4j.ollama.log-requests=true
diff --git
a/data-extract-langchain4j/src/test/java/org/acme/extraction/OllamaTestResource.java
b/data-extract-langchain4j/src/test/java/org/acme/extraction/OllamaTestResource.java
index 08ef690..259d2cf 100644
---
a/data-extract-langchain4j/src/test/java/org/acme/extraction/OllamaTestResource.java
+++
b/data-extract-langchain4j/src/test/java/org/acme/extraction/OllamaTestResource.java
@@ -36,7 +36,7 @@ public class OllamaTestResource implements
QuarkusTestResourceLifecycleManager {
private static final Logger LOG =
LoggerFactory.getLogger(OllamaTestResource.class);
- private static final String OLLAMA_IMAGE = "ollama/ollama:0.4.0-rc5";
+ private static final String OLLAMA_IMAGE = "ollama/ollama:0.5.7";
private static final int OLLAMA_SERVER_PORT = 11434;
private static final String MODE_MOCK = "mock";
diff --git
a/data-extract-langchain4j/src/test/java/org/acme/extraction/RouteTest.java
b/data-extract-langchain4j/src/test/java/org/acme/extraction/RouteTest.java
index fe466c4..b75d695 100644
--- a/data-extract-langchain4j/src/test/java/org/acme/extraction/RouteTest.java
+++ b/data-extract-langchain4j/src/test/java/org/acme/extraction/RouteTest.java
@@ -67,17 +67,17 @@ public class RouteTest {
// Assert values of the first extracted POJO
.body("pojos[0].customerSatisfied", is("true"))
.body("pojos[0].customerName", is("Sarah London"))
- .body("pojos[0].customerBirthday", is("10 July 1986"))
+ .body("pojos[0].customerBirthday", is("10 JULY 1986"))
.body("pojos[0].summary", not(empty()))
// Assert values of the second extracted POJO
.body("pojos[1].customerSatisfied", is("false"))
.body("pojos[1].customerName", is("John Doe"))
- .body("pojos[1].customerBirthday", is("01 November 2001"))
+ .body("pojos[1].customerBirthday", is("1 NOVEMBER 2001"))
.body("pojos[1].summary", not(empty()))
// Assert values of the third extracted POJO
.body("pojos[2].customerSatisfied", is("true"))
.body("pojos[2].customerName", is("Kate Boss"))
- .body("pojos[2].customerBirthday", is("13 August 1999"))
+ .body("pojos[2].customerBirthday", is("13 AUGUST 1999"))
.body("pojos[2].summary", not(empty()));
}
diff --git
a/data-extract-langchain4j/src/test/resources/mappings/api_chat-32621e2b-3757-47c3-81a1-8a4fbe85fa70.json
b/data-extract-langchain4j/src/test/resources/mappings/api_chat-32621e2b-3757-47c3-81a1-8a4fbe85fa70.json
deleted file mode 100644
index 1d0e5fa..0000000
---
a/data-extract-langchain4j/src/test/resources/mappings/api_chat-32621e2b-3757-47c3-81a1-8a4fbe85fa70.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "id" : "32621e2b-3757-47c3-81a1-8a4fbe85fa70",
- "name" : "api_chat",
- "request" : {
- "url" : "/api/chat",
- "method" : "POST",
- "bodyPatterns" : [ {
- "equalToJson" : "{\n \"model\" : \"granite3-dense\",\n \"messages\" :
[ {\n \"role\" : \"assistant\",\n \"content\" :
\"{\\n\\\"customerSatisfied\\\": true,\\n\\\"customerName\\\": \\\"Sarah
London\\\",\\n\\\"customerBirthday\\\": \\\"1986-07-10\\\",\\n\\\"summary\\\":
\\\"The customer, Sarah London, called to declare an accident on her main
vehicle and was informed that all expenses related to the accident would be
reimbursed.\\\"\\n}\"\n }, {\n \"role\" : \"user\",\n [...]
- "ignoreArrayOrder" : true,
- "ignoreExtraElements" : true
- } ]
- },
- "response" : {
- "status" : 200,
- "body" :
"{\"model\":\"granite3-dense\",\"created_at\":\"2025-01-17T10:38:48.022476739Z\",\"message\":{\"role\":\"assistant\",\"content\":\"{\\n\\\"customerSatisfied\\\":
false,\\n\\\"customerName\\\": \\\"John Doe\\\",\\n\\\"customerBirthday\\\":
\\\"2001-11-01\\\",\\n\\\"summary\\\": \\\"The customer, John Doe, called to
express his dissatisfaction with the insurance company's reimbursement policy
and was informed that the full reimbursement option had been automatically
cancelled. [...]
- "headers" : {
- "Date" : "Fri, 17 Jan 2025 10:38:48 GMT",
- "Content-Type" : "application/json; charset=utf-8"
- }
- },
- "uuid" : "32621e2b-3757-47c3-81a1-8a4fbe85fa70",
- "persistent" : true,
- "insertionIndex" : 119
-}
\ No newline at end of file
diff --git
a/data-extract-langchain4j/src/test/resources/mappings/api_chat-608a9883-c373-4219-a55c-e560e83df720.json
b/data-extract-langchain4j/src/test/resources/mappings/api_chat-608a9883-c373-4219-a55c-e560e83df720.json
new file mode 100644
index 0000000..60d06af
--- /dev/null
+++
b/data-extract-langchain4j/src/test/resources/mappings/api_chat-608a9883-c373-4219-a55c-e560e83df720.json
@@ -0,0 +1,24 @@
+{
+ "id" : "608a9883-c373-4219-a55c-e560e83df720",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"granite3-dense\",\n \"messages\" :
[ {\n \"role\" : \"assistant\",\n \"content\" : \"{\\n
\\\"customerSatisfied\\\": false,\\n \\\"customerName\\\": \\\"John
Doe\\\",\\n \\\"customerBirthday\\\": {\\n \\\"year\\\": 2001,\\n
\\\"month\\\": 11,\\n \\\"day\\\": 1\\n },\\n \\\"summary\\\": \\\"The
customer, John Doe, contacted the operator to express dissatisfaction with the
partial reimbursement of accident-related expenses. The [...]
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"model\":\"granite3-dense\",\"created_at\":\"2025-02-03T10:12:43.501203015Z\",\"message\":{\"role\":\"assistant\",\"content\":\"{\\n
\\\"customerSatisfied\\\": true,\\n \\\"customerName\\\": \\\"Kate
Boss\\\",\\n \\\"customerBirthday\\\": {\\n \\\"year\\\": 1999,\\n
\\\"month\\\": 8,\\n \\\"day\\\": 13\\n },\\n \\\"summary\\\": \\\"The
customer, Kate Boss, contacted the operator to request a proof of insurance for
an accident she was involved in. The operato [...]
+ "headers" : {
+ "Date" : "Mon, 03 Feb 2025 10:12:43 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "608a9883-c373-4219-a55c-e560e83df720",
+ "persistent" : true,
+ "insertionIndex" : 4
+}
\ No newline at end of file
diff --git
a/data-extract-langchain4j/src/test/resources/mappings/api_chat-87de6be6-8581-403f-8adf-b5f278616d50.json
b/data-extract-langchain4j/src/test/resources/mappings/api_chat-87de6be6-8581-403f-8adf-b5f278616d50.json
new file mode 100644
index 0000000..136d9bf
--- /dev/null
+++
b/data-extract-langchain4j/src/test/resources/mappings/api_chat-87de6be6-8581-403f-8adf-b5f278616d50.json
@@ -0,0 +1,24 @@
+{
+ "id" : "87de6be6-8581-403f-8adf-b5f278616d50",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"granite3-dense\",\n \"messages\" :
[ {\n \"role\" : \"user\",\n \"content\" : \"Extract information about a
customer from the text delimited by triple backticks: ```Operator: Hello, how
may I help you ?\\nCustomer: Hello, I'm calling because I need to declare an
accident on my main vehicle.\\nOperator: Ok, can you please give me your name
?\\nCustomer: My name is Sarah London.\\nOperator: Could you please give me
your birth date ?\\nCustom [...]
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"model\":\"granite3-dense\",\"created_at\":\"2025-02-03T10:12:20.396157239Z\",\"message\":{\"role\":\"assistant\",\"content\":\"{\\n
\\\"customerSatisfied\\\": true,\\n \\\"customerName\\\": \\\"Sarah
London\\\",\\n \\\"customerBirthday\\\": {\\n \\\"year\\\": 1986,\\n
\\\"month\\\": 7,\\n \\\"day\\\": 10\\n },\\n \\\"summary\\\": \\\"The
customer, Sarah London, called to declare an accident on her main vehicle and
was informed that the expenses related to t [...]
+ "headers" : {
+ "Date" : "Mon, 03 Feb 2025 10:12:20 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "87de6be6-8581-403f-8adf-b5f278616d50",
+ "persistent" : true,
+ "insertionIndex" : 6
+}
\ No newline at end of file
diff --git
a/data-extract-langchain4j/src/test/resources/mappings/api_chat-9d0bfc1d-80d8-475c-85eb-a72a13e81d06.json
b/data-extract-langchain4j/src/test/resources/mappings/api_chat-9d0bfc1d-80d8-475c-85eb-a72a13e81d06.json
new file mode 100644
index 0000000..6c559af
--- /dev/null
+++
b/data-extract-langchain4j/src/test/resources/mappings/api_chat-9d0bfc1d-80d8-475c-85eb-a72a13e81d06.json
@@ -0,0 +1,24 @@
+{
+ "id" : "9d0bfc1d-80d8-475c-85eb-a72a13e81d06",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"granite3-dense\",\n \"messages\" :
[ {\n \"role\" : \"assistant\",\n \"content\" : \"{\\n
\\\"customerSatisfied\\\": true,\\n \\\"customerName\\\": \\\"Sarah
London\\\",\\n \\\"customerBirthday\\\": {\\n \\\"year\\\": 1986,\\n
\\\"month\\\": 7,\\n \\\"day\\\": 10\\n },\\n \\\"summary\\\": \\\"The
customer, Sarah London, called to declare an accident on her main vehicle and
was informed that the expenses related to the acciden [...]
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" :
"{\"model\":\"granite3-dense\",\"created_at\":\"2025-02-03T10:12:31.342721938Z\",\"message\":{\"role\":\"assistant\",\"content\":\"{\\n
\\\"customerSatisfied\\\": false,\\n \\\"customerName\\\": \\\"John
Doe\\\",\\n \\\"customerBirthday\\\": {\\n \\\"year\\\": 2001,\\n
\\\"month\\\": 11,\\n \\\"day\\\": 1\\n },\\n \\\"summary\\\": \\\"The
customer, John Doe, contacted the operator to express dissatisfaction with the
partial reimbursement of accident-related exp [...]
+ "headers" : {
+ "Date" : "Mon, 03 Feb 2025 10:12:31 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "9d0bfc1d-80d8-475c-85eb-a72a13e81d06",
+ "persistent" : true,
+ "insertionIndex" : 5
+}
\ No newline at end of file
diff --git
a/data-extract-langchain4j/src/test/resources/mappings/api_chat-af57842e-561e-4156-876d-75684fabb0a8.json
b/data-extract-langchain4j/src/test/resources/mappings/api_chat-af57842e-561e-4156-876d-75684fabb0a8.json
deleted file mode 100644
index 7c82044..0000000
---
a/data-extract-langchain4j/src/test/resources/mappings/api_chat-af57842e-561e-4156-876d-75684fabb0a8.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "id" : "af57842e-561e-4156-876d-75684fabb0a8",
- "name" : "api_chat",
- "request" : {
- "url" : "/api/chat",
- "method" : "POST",
- "bodyPatterns" : [ {
- "equalToJson" : "{\n \"model\" : \"granite3-dense\",\n \"messages\" :
[ {\n \"role\" : \"assistant\",\n \"content\" :
\"{\\n\\\"customerSatisfied\\\": false,\\n\\\"customerName\\\": \\\"John
Doe\\\",\\n\\\"customerBirthday\\\": \\\"2001-11-01\\\",\\n\\\"summary\\\":
\\\"The customer, John Doe, called to express his dissatisfaction with the
insurance company's reimbursement policy and was informed that the full
reimbursement option had been automatically cancelled.\\\"\\n}\" [...]
- "ignoreArrayOrder" : true,
- "ignoreExtraElements" : true
- } ]
- },
- "response" : {
- "status" : 200,
- "body" :
"{\"model\":\"granite3-dense\",\"created_at\":\"2025-01-17T10:39:13.035382934Z\",\"message\":{\"role\":\"assistant\",\"content\":\"{\\n\\\"customerSatisfied\\\":
true,\\n\\\"customerName\\\": \\\"Kate Boss\\\",\\n\\\"customerBirthday\\\":
\\\"1999-08-13\\\",\\n\\\"summary\\\": \\\"The customer, Kate Boss, called to
request a proof of insurance after an accident and was informed that the
contract was found and the proof would be sent to the police
station.\\\"\\n}\"},\"done_r [...]
- "headers" : {
- "Date" : "Fri, 17 Jan 2025 10:39:13 GMT",
- "Content-Type" : "application/json; charset=utf-8"
- }
- },
- "uuid" : "af57842e-561e-4156-876d-75684fabb0a8",
- "persistent" : true,
- "insertionIndex" : 118
-}
\ No newline at end of file
diff --git
a/data-extract-langchain4j/src/test/resources/mappings/api_chat-fe938c62-23dc-4814-8d9a-9833afc2be3d.json
b/data-extract-langchain4j/src/test/resources/mappings/api_chat-fe938c62-23dc-4814-8d9a-9833afc2be3d.json
deleted file mode 100644
index 6076a8c..0000000
---
a/data-extract-langchain4j/src/test/resources/mappings/api_chat-fe938c62-23dc-4814-8d9a-9833afc2be3d.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "id" : "fe938c62-23dc-4814-8d9a-9833afc2be3d",
- "name" : "api_chat",
- "request" : {
- "url" : "/api/chat",
- "method" : "POST",
- "bodyPatterns" : [ {
- "equalToJson" : "{\n \"model\" : \"granite3-dense\",\n \"messages\" :
[ {\n \"role\" : \"user\",\n \"content\" : \"Extract information about a
customer from the text delimited by triple backticks: ```Operator: Hello, how
may I help you ?\\nCustomer: Hello, I'm calling because I need to declare an
accident on my main vehicle.\\nOperator: Ok, can you please give me your name
?\\nCustomer: My name is Sarah London.\\nOperator: Could you please give me
your birth date ?\\nCustom [...]
- "ignoreArrayOrder" : true,
- "ignoreExtraElements" : true
- } ]
- },
- "response" : {
- "status" : 200,
- "body" :
"{\"model\":\"granite3-dense\",\"created_at\":\"2025-01-17T10:38:23.380035411Z\",\"message\":{\"role\":\"assistant\",\"content\":\"{\\n\\\"customerSatisfied\\\":
true,\\n\\\"customerName\\\": \\\"Sarah
London\\\",\\n\\\"customerBirthday\\\": \\\"1986-07-10\\\",\\n\\\"summary\\\":
\\\"The customer, Sarah London, called to declare an accident on her main
vehicle and was informed that all expenses related to the accident would be
reimbursed.\\\"\\n}\"},\"done_reason\":\"stop\", [...]
- "headers" : {
- "Date" : "Fri, 17 Jan 2025 10:38:23 GMT",
- "Content-Type" : "application/json; charset=utf-8"
- }
- },
- "uuid" : "fe938c62-23dc-4814-8d9a-9833afc2be3d",
- "persistent" : true,
- "insertionIndex" : 120
-}
\ No newline at end of file