From 8b544aac098364ff9206fb2811b3b899c2e0c45c Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Tue, 16 Jan 2024 07:51:40 +0200 Subject: [PATCH 01/14] fix typo --- pages/cookbook/text-classification.livemd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/cookbook/text-classification.livemd b/pages/cookbook/text-classification.livemd index b970d8c..b92f6be 100644 --- a/pages/cookbook/text-classification.livemd +++ b/pages/cookbook/text-classification.livemd @@ -34,7 +34,7 @@ defmodule SpamClassification do use Ecto.Schema @doc """ - A classification of whether or not a provided email is spam or not + A classification of whether a provided email is spam or not. """ @primary_key false embedded_schema do @@ -71,7 +71,7 @@ true We don't have to stop just at a boolean inclusion, we can also easily extend this idea to multiple categories or classes that we can classify the text into. In this example, let's consider classifying support emails. We want to know whether it's a `general_inquiry`, `billing_issue`, or a `technical_issue` perhaps it rightly fits in multiple classes. This can be useful if we want to cc' specialized support agents when intersecting customer issues occur -We can leverage `Ecto.Enum` to define a schema that restricts the LLM output to be a list one of those values. We can also provide a `@doc` description to help guide the LLM with the semantic understanding of what these classifications ought to represent. +We can leverage `Ecto.Enum` to define a schema that restricts the LLM output to be a list of those values. We can also provide a `@doc` description to help guide the LLM with the semantic understanding of what these classifications ought to represent. ```elixir defmodule EmailClassifications do From e2ff2989f2faeb6c31f8a6bc47dc32b0e8ad0cbd Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Tue, 16 Jan 2024 08:44:09 +0200 Subject: [PATCH 02/14] update 'cassification' livebook from example in README --- README.md | 15 +++--- pages/cookbook/text-classification.livemd | 64 +++++++++++++++-------- pages/introduction-to-instructor.livemd | 51 ++++++------------ 3 files changed, 67 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 7f3bd8a..46d1b0a 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,9 @@ defmodule SpamPrediction do @doc """ ## Field Descriptions: - - class: Whether or not the email is spam - - reason: A short, less than 10 word rationalization for the classification - - score: A confidence score between 0.0 and 1.0 for the classification + - class: Whether or not the email is spam. + - reason: A short, less than 10 word rationalization for the classification. + - score: A confidence score between 0.0 and 1.0 for the classification. """ @primary_key false embedded_schema do @@ -57,11 +57,14 @@ is_spam? = fn text -> %{ role: "user", content: """ - You purpose is to classify customer support emails as either spam or not. - This is for a clothing retailer business. + Your purpose is to classify customer support emails as either spam or not. + This is for a clothing retail business. They sell all types of clothing. - Classify the following email: #{text} + Classify the following email: + ``` + #{text} + ``` """ } ] diff --git a/pages/cookbook/text-classification.livemd b/pages/cookbook/text-classification.livemd index b92f6be..7b343ad 100644 --- a/pages/cookbook/text-classification.livemd +++ b/pages/cookbook/text-classification.livemd @@ -29,46 +29,66 @@ Hell, you can even use instructor to help generate the training set to train you Spam detection is a classic example of binary text classification. It's as simple as returning a true / false of whether an example is in the class. This is pretty trivial to implement in instructor. -```elixir -defmodule SpamClassification do +````elixir +defmodule SpamPrediction do use Ecto.Schema + use Instructor.Validator @doc """ - A classification of whether a provided email is spam or not. + ## Field Descriptions: + - class: Whether or not the email is spam. + - reason: A short, less than 10 word rationalization for the classification. + - score: A confidence score between 0.0 and 1.0 for the classification. """ @primary_key false embedded_schema do - field(:is_spam?, :boolean) + field(:class, Ecto.Enum, values: [:spam, :not_spam]) + field(:reason, :string) + field(:score, :float) end -end -is_spam? = fn text -> - {:ok, %{is_spam?: result}} = - Instructor.chat_completion( - model: "gpt-3.5-turbo", - response_model: SpamClassification, - messages: [ - %{ - role: "user", - content: "Classify the following text as spam/not_spam: #{text}" - } - ] + @impl true + def validate_changeset(changeset) do + changeset + |> Ecto.Changeset.validate_number(:score, + greater_than_or_equal_to: 0.0, + less_than_or_equal_to: 1.0 ) + end +end - result +is_spam? = fn text -> + Instructor.chat_completion( + model: "gpt-3.5-turbo", + response_model: SpamPrediction, + max_retries: 3, + messages: [ + %{ + role: "user", + content: """ + Your purpose is to classify customer support emails as either spam or not. + This is for a clothing retail business. + They sell all types of clothing. + + Classify the following email: + ``` + #{text} + ``` + """ + } + ] + ) end is_spam?.("Hello I am a Nigerian prince and I would like to send you money") -``` +```` ``` -true +{:ok, %SpamPrediction{class: :spam, reason: "Nigerian prince scam", score: 0.95}} ``` -## Multi-Class Text Classification - We don't have to stop just at a boolean inclusion, we can also easily extend this idea to multiple categories or classes that we can classify the text into. In this example, let's consider classifying support emails. We want to know whether it's a `general_inquiry`, `billing_issue`, or a `technical_issue` perhaps it rightly fits in multiple classes. This can be useful if we want to cc' specialized support agents when intersecting customer issues occur We can leverage `Ecto.Enum` to define a schema that restricts the LLM output to be a list of those values. We can also provide a `@doc` description to help guide the LLM with the semantic understanding of what these classifications ought to represent. @@ -117,4 +137,4 @@ classify_email.("My account is locked and I can't access my billing info.") [:technical_issue, :billing_issue] ``` - + diff --git a/pages/introduction-to-instructor.livemd b/pages/introduction-to-instructor.livemd index 5befb27..2d6c60a 100644 --- a/pages/introduction-to-instructor.livemd +++ b/pages/introduction-to-instructor.livemd @@ -5,8 +5,8 @@ ```elixir Mix.install( [ - # {:instructor, ">= 0.0.0"}, - {:instructor, path: "/Users/thomas/code/instructor_ex"}, + {:instructor, ">= 0.0.0"}, + # {:instructor, path: "/Users/thomas/code/instructor_ex"}, {:kino, "~> 0.12.2"} ], config: [ @@ -100,8 +100,8 @@ Instructor.chat_completion( last_name: "Biden", offices_held: [ %Politician.Office{office: :president, from_date: ~D[2021-01-20], to_date: nil}, - %Politician.Office{office: :vice_president, from_date: ~D[2009-01-20], to_date: ~D[2017-01-20]}, - %Politician.Office{office: :senate, from_date: ~D[1973-01-03], to_date: ~D[2009-01-15]} + %Politician.Office{office: :vice_president, from_date: ~D[2009-01-20], to_date: nil}, + %Politician.Office{office: :senate, from_date: ~D[1973-01-03], to_date: nil} ] }} ``` @@ -201,15 +201,16 @@ Instructor.chat_completion( ``` -11:01:04.219 [debug] Retrying LLM call for NumberSeries: +08:17:33.563 [debug] Retrying LLM call for NumberSeries: + + "series - should have at least 10 item(s)" - "series - The sum of the series must be even\nseries - should have at least 10 item(s)" ``` ``` -{:ok, %NumberSeries{series: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]}} +{:ok, %NumberSeries{series: [2, 5, 8, 12, 15, 20, 25, 30, 35, 40]}} ``` Here we demonstrated using regular Lixar code to validate the outputs of an LLM, but we don't have to stop there. We can actually use the LLM to validate the outputs of the LLM. @@ -239,7 +240,7 @@ end ``` -{:module, QuestionAnswer, <<70, 79, 82, 49, 0, 0, 16, ...>>, {:validate_changeset, 1}} +{:module, QuestionAnswer, <<70, 79, 82, 49, 0, 0, 17, ...>>, {:validate_changeset, 1}} ``` ```elixir @@ -316,7 +317,7 @@ presidents_stream %Politician.Office{ office: :president, from_date: ~D[1789-04-30], - to_date: ~D[1797-03-04] + to_date: nil } ] } @@ -324,15 +325,10 @@ presidents_stream first_name: "John", last_name: "Adams", offices_held: [ - %Politician.Office{ - office: :vice_president, - from_date: ~D[1789-04-30], - to_date: ~D[1797-03-04] - }, %Politician.Office{ office: :president, from_date: ~D[1797-03-04], - to_date: ~D[1801-03-04] + to_date: nil } ] } @@ -340,15 +336,10 @@ presidents_stream first_name: "Thomas", last_name: "Jefferson", offices_held: [ - %Politician.Office{ - office: :vice_president, - from_date: ~D[1797-03-04], - to_date: ~D[1801-03-04] - }, %Politician.Office{ office: :president, from_date: ~D[1801-03-04], - to_date: ~D[1809-03-04] + to_date: nil } ] } @@ -356,15 +347,10 @@ presidents_stream first_name: "James", last_name: "Madison", offices_held: [ - %Politician.Office{ - office: :vice_president, - from_date: ~D[1801-03-04], - to_date: ~D[1809-03-04] - }, %Politician.Office{ office: :president, from_date: ~D[1809-03-04], - to_date: ~D[1817-03-04] + to_date: nil } ] } @@ -372,15 +358,10 @@ presidents_stream first_name: "James", last_name: "Monroe", offices_held: [ - %Politician.Office{ - office: :vice_president, - from_date: ~D[1809-03-04], - to_date: ~D[1817-03-04] - }, %Politician.Office{ office: :president, from_date: ~D[1817-03-04], - to_date: ~D[1825-03-04] + to_date: nil } ] } @@ -429,7 +410,7 @@ end) [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: []} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: []} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: nil, from_date: nil, to_date: nil}]} -[Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: nil, to_date: nil}]} +[Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: nil, from_date: ~D[1789-04-30], to_date: nil}]} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: ~D[1789-04-30], to_date: nil}]} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: ~D[1789-04-30], to_date: ~D[1797-03-04]}]} [Final]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: ~D[1789-04-30], to_date: ~D[1797-03-04]}]} @@ -527,4 +508,4 @@ Instructor.chat_completion( And just like that, you can extend Instructor to get the LLM to return whatever you want. - + From aa327c85c8d598afa6cce5a5e06a4b04a517e51a Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Tue, 16 Jan 2024 09:10:06 +0200 Subject: [PATCH 03/14] add missing livebook link to docs --- mix.exs | 1 + 1 file changed, 1 insertion(+) diff --git a/mix.exs b/mix.exs index 07f2614..8afdd30 100644 --- a/mix.exs +++ b/mix.exs @@ -28,6 +28,7 @@ defmodule Instructor.MixProject do "pages/introduction-to-instructor.livemd", "pages/llama-cpp.livemd", "pages/cookbook/text-classification.livemd", + "pages/cookbook/qa-citations.livemd", "pages/cookbook/extract-action-items-from-meeting-transcripts.livemd", "pages/cookbook/text-to-dataframes.livemd" ], From fec0488f2ac0649174b3a9ffb8cb77791c3de518 Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Tue, 16 Jan 2024 09:34:15 +0200 Subject: [PATCH 04/14] Introduction to Instructor -> Quickstart --- mix.exs | 2 +- ...to-instructor.livemd => quickstart.livemd} | 33 +++++++++++-------- 2 files changed, 21 insertions(+), 14 deletions(-) rename pages/{introduction-to-instructor.livemd => quickstart.livemd} (94%) diff --git a/mix.exs b/mix.exs index 8afdd30..52aecc2 100644 --- a/mix.exs +++ b/mix.exs @@ -24,8 +24,8 @@ defmodule Instructor.MixProject do docs: [ main: "Instructor", extras: [ + "pages/quickstart.livemd", "pages/philosophy.md", - "pages/introduction-to-instructor.livemd", "pages/llama-cpp.livemd", "pages/cookbook/text-classification.livemd", "pages/cookbook/qa-citations.livemd", diff --git a/pages/introduction-to-instructor.livemd b/pages/quickstart.livemd similarity index 94% rename from pages/introduction-to-instructor.livemd rename to pages/quickstart.livemd index 2d6c60a..9d62161 100644 --- a/pages/introduction-to-instructor.livemd +++ b/pages/quickstart.livemd @@ -1,12 +1,11 @@ -# Introduction to Instructor +# Quickstart ```elixir Mix.install( [ - {:instructor, ">= 0.0.0"}, - # {:instructor, path: "/Users/thomas/code/instructor_ex"}, + {:instructor, ">= 0.0.4"}, {:kino, "~> 0.12.2"} ], config: [ @@ -201,7 +200,15 @@ Instructor.chat_completion( ``` -08:17:33.563 [debug] Retrying LLM call for NumberSeries: +09:26:02.166 [debug] Retrying LLM call for NumberSeries: + + "series - The sum of the series must be even\nseries - should have at least 10 item(s)" + +09:26:03.500 [debug] Retrying LLM call for NumberSeries: + + "series - The sum of the series must be even" + +09:26:04.894 [debug] Retrying LLM call for NumberSeries: "series - should have at least 10 item(s)" @@ -210,7 +217,7 @@ Instructor.chat_completion( ``` -{:ok, %NumberSeries{series: [2, 5, 8, 12, 15, 20, 25, 30, 35, 40]}} +{:ok, %NumberSeries{series: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]}} ``` Here we demonstrated using regular Lixar code to validate the outputs of an LLM, but we don't have to stop there. We can actually use the LLM to validate the outputs of the LLM. @@ -240,7 +247,7 @@ end ``` -{:module, QuestionAnswer, <<70, 79, 82, 49, 0, 0, 17, ...>>, {:validate_changeset, 1}} +{:module, QuestionAnswer, <<70, 79, 82, 49, 0, 0, 16, ...>>, {:validate_changeset, 1}} ``` ```elixir @@ -317,7 +324,7 @@ presidents_stream %Politician.Office{ office: :president, from_date: ~D[1789-04-30], - to_date: nil + to_date: ~D[1797-03-04] } ] } @@ -328,7 +335,7 @@ presidents_stream %Politician.Office{ office: :president, from_date: ~D[1797-03-04], - to_date: nil + to_date: ~D[1801-03-04] } ] } @@ -339,7 +346,7 @@ presidents_stream %Politician.Office{ office: :president, from_date: ~D[1801-03-04], - to_date: nil + to_date: ~D[1809-03-04] } ] } @@ -350,7 +357,7 @@ presidents_stream %Politician.Office{ office: :president, from_date: ~D[1809-03-04], - to_date: nil + to_date: ~D[1817-03-04] } ] } @@ -361,7 +368,7 @@ presidents_stream %Politician.Office{ office: :president, from_date: ~D[1817-03-04], - to_date: nil + to_date: ~D[1825-03-04] } ] } @@ -410,7 +417,7 @@ end) [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: []} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: []} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: nil, from_date: nil, to_date: nil}]} -[Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: nil, from_date: ~D[1789-04-30], to_date: nil}]} +[Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: nil, to_date: nil}]} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: ~D[1789-04-30], to_date: nil}]} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: ~D[1789-04-30], to_date: ~D[1797-03-04]}]} [Final]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: ~D[1789-04-30], to_date: ~D[1797-03-04]}]} @@ -508,4 +515,4 @@ Instructor.chat_completion( And just like that, you can extend Instructor to get the LLM to return whatever you want. - + From 2dc5f1722a9e737a985cbec5a29072f5adfcf4e2 Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Tue, 16 Jan 2024 10:23:28 +0200 Subject: [PATCH 05/14] review README --- README.md | 42 +++++++++++++----------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 46d1b0a..20abbfa 100644 --- a/README.md +++ b/README.md @@ -13,12 +13,19 @@ _Structured, Ecto outputs with OpenAI (and OSS LLMs)_ -Instructor.ex is a spiritual port of the great [Instructor Python Library](https://github.com/jxnl/instructor) by [@jxnlco](https://twitter.com/jxnlco), check out his [talk](https://www.youtube.com/watch?v=yj-wSRJwrrc) on youtube. -This library brings structured prompting to LLMs. Instead of receiving text as output, Instructor will coax the LLM to output valid JSON that maps directly to the provided Ecto schema. -If the LLM fails to do so, or provides values that do not pass your validations, it will provide you utilities to automatically retry with the LLM to correct errors. -By default it's designed to be used with the [OpenAI API](https://platform.openai.com/docs/api-reference/chat-completions/create), however it provides an extendable adapter behavior to work with [ggerganov/llama.cpp](https://github.com/ggerganov/llama.cpp) and [Bumblebee (Coming Soon!)](https://github.com/elixir-nx/bumblebee). + Structured prompting for LLMs. Instructor is a spiritual port of the great [Instructor Python Library](https://github.com/jxnl/instructor) by [@jxnlco](https://twitter.com/jxnlco), check out his [talk on YouTube](https://www.youtube.com/watch?v=yj-wSRJwrrc). + + The Instructor library is useful for coaxing an LLM to return JSON that maps to an Ecto schema that you provide, rather than the default unstructured text output. If you define your own validation logic, Instructor can automatically retry prompts when validation fails (returning natural language error messages to the LLM, to guide it when making corrections). -At its simplest, usage is pretty straightforward, +Instructor is designed to be used with the [OpenAI API](https://platform.openai.com/docs/api-reference/chat-completions/create) by default, but it also works with [llama.cpp](https://github.com/ggerganov/llama.cpp) and [Bumblebee](https://github.com/elixir-nx/bumblebee) (Coming Soon!) by using an extendable adapter behavior. + +At its simplest, usage is pretty straightforward: + +1. Create an ecto schema, with a `@doc` string that explains the schema definition to the LLM. +2. Define a `validate_changeset/1` function on the schema, and use the `Instructor.Validator` macro in order for Instructor to know about it. +2. Make a call to `Instructor.chat_completion/1` with an instruction for the LLM to execute. + +You can use the `max_retries` parameter to automatically, iteratively go back and forth with the LLM to try fixing validation errorswhen they occur. ```elixir defmodule SpamPrediction do @@ -76,30 +83,7 @@ is_spam?.("Hello I am a Nigerian prince and I would like to send you money") # => {:ok, %SpamPrediction{class: :spam, reason: "Nigerian prince email scam", score: 0.98}} ``` -Simply create an ecto schema, optionally provide a `@doc` to the schema definition which we pass down to the LLM, then make a call to `Instructor.chat_completion/1` with context about the task you'd like the LLM to complete. -You can also provide a `validate_changeset/1` function via the `use Instructor.Validator` which will provide a set of code level ecto changeset validations. You can use this in conjunction with `max_retries: 3` to automatically, iteratively go back and forth with the LLM up to `n` times with any validation errors so that it has a chance to fix them. - -**Curious to learn more? Unsure of how you'd use this? Check out our [Gettings Started Guide](https://hexdocs.pm/instructor/tutorial.html)** - -* [Tutorial - Basic Usage & Features](https://hexdocs.pm/instructor/tutorial.html) -* [Text Classification](https://hexdocs.pm/instructor/text-classification.html) -* [Extracting Action Items from Meeting Transcriptions](https://hexdocs.pm/instructor/extract-action-items-from-meeting-transcripts.html) -* [Extracting Explorer.DataFrames from text](https://hexdocs.pm/instructor/text-to-dataframes.html) - -## Configuration - -To configure the default OpenAI adapter you can set the configuration, - -```elixir -config :openai, api_key: "sk-........" -config :openai, http_options: [recv_timeout: 10 * 60 * 1000] -``` - -To use a local LLM, you can install and run [llama.cpp server](https://github.com/ggerganov/llama.cpp/blob/master/examples/server/README.md) and tell instructor to use it, - -```elixir -config :instructor, adapter: Instructor.Adapters.Llamacpp -``` +Check out our [Quickstart Guide](https://hexdocs.pm/instructor/quickstart.html) for more code snippets that you can run locally (in Livebook). Or, to get a better idea of the thinking behind Instructor, read more about our [Philosophy & Motivations](https://hexdocs.pm/instructor/philosophy.html). From 1affca12a3825f9848711a8a629cb73a18392328 Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Tue, 16 Jan 2024 10:27:25 +0200 Subject: [PATCH 06/14] move llama livebook into 'cookbooks' --- mix.exs | 4 ++-- pages/{ => cookbook}/llama-cpp.livemd | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename pages/{ => cookbook}/llama-cpp.livemd (100%) diff --git a/mix.exs b/mix.exs index 52aecc2..206808c 100644 --- a/mix.exs +++ b/mix.exs @@ -26,11 +26,11 @@ defmodule Instructor.MixProject do extras: [ "pages/quickstart.livemd", "pages/philosophy.md", - "pages/llama-cpp.livemd", "pages/cookbook/text-classification.livemd", "pages/cookbook/qa-citations.livemd", "pages/cookbook/extract-action-items-from-meeting-transcripts.livemd", - "pages/cookbook/text-to-dataframes.livemd" + "pages/cookbook/text-to-dataframes.livemd", + "pages/cookbook/llama-cpp.livemd" ], groups_for_extras: [ Cookbook: ~r"pages/cookbook/.*\.(md|livemd)" diff --git a/pages/llama-cpp.livemd b/pages/cookbook/llama-cpp.livemd similarity index 100% rename from pages/llama-cpp.livemd rename to pages/cookbook/llama-cpp.livemd From cff8ca2c00fc98e2b38fe8d3477f55e1c512dc4f Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Tue, 16 Jan 2024 10:37:16 +0200 Subject: [PATCH 07/14] update livebooks --- ...tion-items-from-meeting-transcripts.livemd | 116 +++++++++--------- pages/cookbook/qa-citations.livemd | 11 +- pages/cookbook/text-classification.livemd | 6 +- pages/cookbook/text-to-dataframes.livemd | 5 +- 4 files changed, 67 insertions(+), 71 deletions(-) diff --git a/pages/cookbook/extract-action-items-from-meeting-transcripts.livemd b/pages/cookbook/extract-action-items-from-meeting-transcripts.livemd index 25a25f7..225d196 100644 --- a/pages/cookbook/extract-action-items-from-meeting-transcripts.livemd +++ b/pages/cookbook/extract-action-items-from-meeting-transcripts.livemd @@ -5,8 +5,7 @@ ```elixir Mix.install( [ - # {:instructor, "~> 0.0.2"} - {:instructor, path: "/Users/thomas/code/instructor_ex"}, + {:instructor, "~> 0.0.4"}, {:kino, "~> 0.12.0"} ], config: [ @@ -129,61 +128,61 @@ end %MeetingNotes{ tickets: [ %MeetingNotes.Ticket{ - id: "T1", - name: "Improving authentication system", - description: "Work on improving the authentication system", + id: "1", + name: "Authentication System Improvement", + description: "Improve the authentication system", priority: :high, assignees: ["Bob"], subtasks: [ - %MeetingNotes.Ticket.SubTasks{id: "T1.1", name: "Front-end revamp"}, - %MeetingNotes.Ticket.SubTasks{id: "T1.2", name: "Back-end optimization"} + %MeetingNotes.Ticket.SubTasks{id: "2", name: "Front-end Revamp"}, + %MeetingNotes.Ticket.SubTasks{id: "3", name: "Back-end Optimization"} ], dependencies: [] }, %MeetingNotes.Ticket{ - id: "T2", - name: "Integrating authentication system with billing system", - description: "Integrate the improved authentication system with the new billing system", - priority: :medium, - assignees: ["Bob"], + id: "2", + name: "Front-end Revamp", + description: "Revamp the front-end of the authentication system", + priority: :high, + assignees: ["Carol"], subtasks: [], - dependencies: ["T1.2"] + dependencies: [] }, %MeetingNotes.Ticket{ - id: "T3", - name: "Update user documentation", - description: "Update user documentation to reflect the changes", - priority: :low, - assignees: ["Carol"], + id: "3", + name: "Back-end Optimization", + description: "Optimize the back-end of the authentication system", + priority: :high, + assignees: ["Bob"], subtasks: [], - dependencies: ["T1.1"] + dependencies: [] }, %MeetingNotes.Ticket{ - id: "T4", - name: "Handle front-end part of authentication system", - description: "Help with the front-end part of the authentication system", + id: "4", + name: "Integration with Billing System", + description: "Integrate the improved authentication system with the new billing system", priority: :medium, - assignees: ["Carol"], + assignees: ["Bob"], subtasks: [], - dependencies: [] + dependencies: ["3"] }, %MeetingNotes.Ticket{ - id: "T5", - name: "Handle back-end optimization of authentication system", - description: "Handle the back-end optimization of the authentication system", - priority: :high, + id: "5", + name: "Billing System", + description: "Implement the new billing system", + priority: :medium, assignees: ["Bob"], subtasks: [], dependencies: [] }, %MeetingNotes.Ticket{ - id: "T6", - name: "Handle billing system", - description: "Handle the new billing system", - priority: :medium, - assignees: ["Bob"], + id: "6", + name: "Update User Documentation", + description: "Update the user documentation to reflect the changes", + priority: :low, + assignees: ["Carol"], subtasks: [], - dependencies: ["T5"] + dependencies: ["2"] } ] }} @@ -255,65 +254,64 @@ generate_tickets_diagram.(tickets) ```mermaid erDiagram - "Improving authentication system" { + "Authentication System Improvement" { priority high assignees Bob } - "Improving authentication system" ||--o| "Front-end revamp" : "Has Subtask" + "Authentication System Improvement" ||--o| "Front-end Revamp" : "Has Subtask" -"Improving authentication system" ||--o| "Back-end optimization" : "Has Subtask" +"Authentication System Improvement" ||--o| "Back-end Optimization" : "Has Subtask" - "Integrating authentication system with billing system" { - priority medium - assignees Bob + "Front-end Revamp" { + priority high + assignees Carol } - "Integrating authentication system with billing system" ||--o| "Back-end optimization" : "Depends on" - + - "Update user documentation" { - priority low - assignees Carol + "Back-end Optimization" { + priority high + assignees Bob } - "Update user documentation" ||--o| "Front-end revamp" : "Depends on" - + - "Handle front-end part of authentication system" { + "Integration with Billing System" { priority medium - assignees Carol + assignees Bob } - + "Integration with Billing System" ||--o| "Back-end Optimization" : "Depends on" - "Handle back-end optimization of authentication system" { - priority high + + "Billing System" { + priority medium assignees Bob } - "Handle billing system" { - priority medium - assignees Bob + "Update User Documentation" { + priority low + assignees Carol } - "Handle billing system" ||--o| "Handle back-end optimization of authentication system" : "Depends on" + "Update User Documentation" ||--o| "Front-end Revamp" : "Depends on" - "Front-end revamp" + "Front-end Revamp" - "Back-end optimization" + "Back-end Optimization" ``` - + diff --git a/pages/cookbook/qa-citations.livemd b/pages/cookbook/qa-citations.livemd index f2d7c78..f7b7792 100644 --- a/pages/cookbook/qa-citations.livemd +++ b/pages/cookbook/qa-citations.livemd @@ -5,8 +5,7 @@ ```elixir Mix.install( [ - # {:instructor, "~> 0.0.2"} - {:instructor, path: "/Users/thomas/code/instructor_ex"} + {:instructor, "~> 0.0.4"} ], config: [ instructor: [ @@ -84,7 +83,7 @@ end ``` -{:module, QuestionAnswer, <<70, 79, 82, 49, 0, 0, 23, ...>>, {:validate_answer, 3}} +{:module, QuestionAnswer, <<70, 79, 82, 49, 0, 0, 24, ...>>, {:validate_answer, 3}} ``` Notice something interesting about this code. While we provide a validation for the change set, Instructor by default will also cast all of the embedded and associated schemas. We can override that validation of associated schemas by using the `Ecto.Changeset.cast_embed/3` function with the `with:` option. @@ -153,11 +152,11 @@ answer_with_citations.(question, context) question: "What companies and side projects has the author worked on?", answer: [ %QuestionAnswer.Citation{ - statement: "The author has worked at Mortar Data (acquired by DataDog) and Stitch Fix.", + statement: "I have worked at Mortar Data (acquired by DataDog) and Stitch Fix.", quote: "Over that time I have worked at Mortar Data (acquired by DataDog), and Stitch Fix building data platforms and doing MLOps." }, %QuestionAnswer.Citation{ - statement: "The author has worked on side projects like billclintonswag.com and 12ft.io.", + statement: "I have built projects like billclintonswag.com and 12ft.io.", quote: "On the side, I have built projects like billclintonswag.com and 12ft.io which cumulatively have reached over 50M+ people directly." } ] @@ -310,4 +309,4 @@ changeset = Instructor.cast_all(%LLMQuestionAnswer{}, params) > ``` - + diff --git a/pages/cookbook/text-classification.livemd b/pages/cookbook/text-classification.livemd index 7b343ad..49f8c80 100644 --- a/pages/cookbook/text-classification.livemd +++ b/pages/cookbook/text-classification.livemd @@ -5,7 +5,7 @@ ```elixir Mix.install( [ - {:instructor, "~> 0.0.2"} + {:instructor, "~> 0.0.4"} ], config: [ instructor: [ @@ -86,7 +86,7 @@ is_spam?.("Hello I am a Nigerian prince and I would like to send you money") ``` -{:ok, %SpamPrediction{class: :spam, reason: "Nigerian prince scam", score: 0.95}} +{:ok, %SpamPrediction{class: :spam, reason: "Typical spam email", score: 0.95}} ``` We don't have to stop just at a boolean inclusion, we can also easily extend this idea to multiple categories or classes that we can classify the text into. In this example, let's consider classifying support emails. We want to know whether it's a `general_inquiry`, `billing_issue`, or a `technical_issue` perhaps it rightly fits in multiple classes. This can be useful if we want to cc' specialized support agents when intersecting customer issues occur @@ -137,4 +137,4 @@ classify_email.("My account is locked and I can't access my billing info.") [:technical_issue, :billing_issue] ``` - + diff --git a/pages/cookbook/text-to-dataframes.livemd b/pages/cookbook/text-to-dataframes.livemd index ddc363a..444f2ff 100644 --- a/pages/cookbook/text-to-dataframes.livemd +++ b/pages/cookbook/text-to-dataframes.livemd @@ -5,8 +5,7 @@ ```elixir Mix.install( [ - # {:instructor, "~> 0.0.2"} - {:instructor, path: "/Users/thomas/code/instructor_ex"}, + {:instructor, "~> 0.0.4"}, {:explorer, "~> 0.7.2"}, {:kino, "~> 0.12.0"}, {:kino_explorer, "~> 0.1.13"} @@ -137,4 +136,4 @@ Kino.Layout.tabs( ) ``` - + From 6928d517c179525f72233980ec9d9c31f1210483 Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Mon, 15 Apr 2024 07:27:06 +0200 Subject: [PATCH 08/14] update .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index aed1015..30c4278 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,6 @@ instructor-*.tar # Temporary files, for example, from tests. /tmp/ + +*.DS_Store +llama.log From 872348a5bbffc876c5b8f6faf4928e601c21fe7c Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Mon, 15 Apr 2024 09:07:36 +0200 Subject: [PATCH 09/14] openai: add optional params for inspecting request / response --- lib/instructor/adapters/openai.ex | 35 +++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/lib/instructor/adapters/openai.ex b/lib/instructor/adapters/openai.ex index 68a42b1..19d00f3 100644 --- a/lib/instructor/adapters/openai.ex +++ b/lib/instructor/adapters/openai.ex @@ -13,17 +13,19 @@ defmodule Instructor.Adapters.OpenAI do {_, params} = Keyword.pop(params, :validation_context) {_, params} = Keyword.pop(params, :max_retries) {_, params} = Keyword.pop(params, :mode) + {inspect_request?, params} = Keyword.pop(params, :inspect_request?) + {inspect_response?, params} = Keyword.pop(params, :inspect_response?) stream = Keyword.get(params, :stream, false) params = Enum.into(params, %{}) if stream do - do_streaming_chat_completion(params, config) + do_streaming_chat_completion(params, config, inspect_request?, inspect_response?) else - do_chat_completion(params, config) + do_chat_completion(params, config, inspect_request?, inspect_response?) end end - defp do_streaming_chat_completion(params, config) do + defp do_streaming_chat_completion(params, config, inspect_request?, inspect_response?) do pid = self() options = http_options(config) @@ -35,6 +37,11 @@ defmodule Instructor.Adapters.OpenAI do json: params, auth: {:bearer, api_key(config)}, into: fn {:data, data}, {req, resp} -> + + if inspect_response? do + IO.inspect(data, pretty: true, limit: :infinity, printable_limit: :infinity) + end + chunks = data |> String.split("\n") @@ -55,7 +62,13 @@ defmodule Instructor.Adapters.OpenAI do end ) - Req.post!(url(config), options) + req = Req.new([url: url(config)] ++ options) + + if inspect_request? do + IO.inspect(req, pretty: true, limit: :infinity, printable_limit: :infinity) + end + + Req.post!(req) send(pid, :done) end) end, @@ -75,9 +88,19 @@ defmodule Instructor.Adapters.OpenAI do ) end - defp do_chat_completion(params, config) do + defp do_chat_completion(params, config, inspect_request?, inspect_response?) do options = Keyword.merge(http_options(config), json: params, auth: {:bearer, api_key(config)}) - response = Req.post!(url(config), options) + req = Req.new([url: url(config)] ++ options) + + if inspect_request? do + IO.inspect(req, pretty: true, limit: :infinity, printable_limit: :infinity) + end + + response = Req.post!(req) + + if inspect_response? do + IO.inspect(response, pretty: true, limit: :infinity, printable_limit: :infinity) + end case response.status do 200 -> {:ok, response.body} From c6a7a2e4ddf3eeda688d4f71ca84819d4367cb9b Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Mon, 15 Apr 2024 09:16:59 +0200 Subject: [PATCH 10/14] llama.cpp: add optional params for inspecting request / response --- lib/instructor/adapters/llamacpp.ex | 61 ++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/lib/instructor/adapters/llamacpp.ex b/lib/instructor/adapters/llamacpp.ex index c0c9f91..0df7a54 100644 --- a/lib/instructor/adapters/llamacpp.ex +++ b/lib/instructor/adapters/llamacpp.ex @@ -34,6 +34,8 @@ defmodule Instructor.Adapters.Llamacpp do def chat_completion(params, _config \\ nil) do {response_model, _} = Keyword.pop!(params, :response_model) {messages, _} = Keyword.pop!(params, :messages) + {inspect_request?, params} = Keyword.pop(params, :inspect_request?) + {inspect_response?, params} = Keyword.pop(params, :inspect_response?) json_schema = JSONSchema.from_ecto_schema(response_model) grammar = GBNF.from_json_schema(json_schema) @@ -41,31 +43,41 @@ defmodule Instructor.Adapters.Llamacpp do stream = Keyword.get(params, :stream, false) if stream do - do_streaming_chat_completion(prompt, grammar) + do_streaming_chat_completion(prompt, grammar, inspect_request?, inspect_response?) else - do_chat_completion(prompt, grammar) + do_chat_completion(prompt, grammar, inspect_request?, inspect_response?) end end - defp do_streaming_chat_completion(prompt, grammar) do + defp do_streaming_chat_completion(prompt, grammar, inspect_request?, inspect_response?) do pid = self() Stream.resource( fn -> Task.async(fn -> - Req.post!(url(), - json: %{ - grammar: grammar, - prompt: prompt, - stream: true - }, - receive_timeout: 60_000, - into: fn {:data, data}, {req, resp} -> - send(pid, data) - {:cont, {req, resp}} - end - ) - + req = + Req.new( + url: url(), + json: %{ + grammar: grammar, + prompt: prompt, + stream: true + }, + receive_timeout: 60_000, + into: fn {:data, data}, {req, resp} -> + if inspect_response? do + IO.inspect(data, pretty: true, limit: :infinity, printable_limit: :infinity) + end + send(pid, data) + {:cont, {req, resp}} + end + ) + + if inspect_request? do + IO.inspect(req, pretty: true, limit: :infinity, printable_limit: :infinity) + end + + Req.post!(req) send(pid, :done) end) end, @@ -94,9 +106,10 @@ defmodule Instructor.Adapters.Llamacpp do } end - defp do_chat_completion(prompt, grammar) do - response = - Req.post!(url(), + defp do_chat_completion(prompt, grammar, inspect_request?, inspect_response?) do + req = + Req.new( + url: url(), json: %{ grammar: grammar, prompt: prompt @@ -104,6 +117,16 @@ defmodule Instructor.Adapters.Llamacpp do receive_timeout: 60_000 ) + if inspect_request? do + IO.inspect(req, pretty: true, limit: :infinity, printable_limit: :infinity) + end + + response = Req.post!(req) + + if inspect_response? do + IO.inspect(response, pretty: true, limit: :infinity, printable_limit: :infinity) + end + case response do %{status: 200, body: %{"content" => params}} -> {:ok, to_openai_response(params)} From fca0871d4c437baf72ab45e1a542b828e5c2aab7 Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Mon, 15 Apr 2024 09:46:53 +0200 Subject: [PATCH 11/14] document new params --- lib/instructor.ex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/instructor.ex b/lib/instructor.ex index 83bd4af..4b77fbe 100644 --- a/lib/instructor.ex +++ b/lib/instructor.ex @@ -32,6 +32,8 @@ defmodule Instructor do * `:mode` - The mode to use when parsing the response, :tools, :json, :md_json (defaults to `:tools`), generally speaking you don't need to change this unless you are not using OpenAI. * `:max_retries` - The maximum number of times to retry the LLM call if it fails, or does not pass validations. (defaults to `0`) + * `:inspect_request?` -`IO.inspect` the request before sending to the LLM, useful for debugging (defaults to `false`). + * `:inspect_response?` -`IO.inspect` the response from the LLM before processing, useful for debugging (defaults to `false`). ## Examples From 54903649a63a6ff40430b8d2ecb50aacc763c304 Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Mon, 15 Apr 2024 09:54:01 +0200 Subject: [PATCH 12/14] fix linting errors --- lib/instructor/adapters/llamacpp.ex | 1 + lib/instructor/adapters/openai.ex | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/instructor/adapters/llamacpp.ex b/lib/instructor/adapters/llamacpp.ex index 0df7a54..3013922 100644 --- a/lib/instructor/adapters/llamacpp.ex +++ b/lib/instructor/adapters/llamacpp.ex @@ -68,6 +68,7 @@ defmodule Instructor.Adapters.Llamacpp do if inspect_response? do IO.inspect(data, pretty: true, limit: :infinity, printable_limit: :infinity) end + send(pid, data) {:cont, {req, resp}} end diff --git a/lib/instructor/adapters/openai.ex b/lib/instructor/adapters/openai.ex index 19d00f3..f412149 100644 --- a/lib/instructor/adapters/openai.ex +++ b/lib/instructor/adapters/openai.ex @@ -37,7 +37,6 @@ defmodule Instructor.Adapters.OpenAI do json: params, auth: {:bearer, api_key(config)}, into: fn {:data, data}, {req, resp} -> - if inspect_response? do IO.inspect(data, pretty: true, limit: :infinity, printable_limit: :infinity) end From 5cf4e9db2ee02be242462a8644010e781569571f Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Mon, 22 Apr 2024 09:26:29 +0200 Subject: [PATCH 13/14] provide a callback, rather than setting a flag --- lib/instructor.ex | 4 ++-- lib/instructor/adapters/llamacpp.ex | 28 ++++++++++++++-------------- lib/instructor/adapters/openai.ex | 28 ++++++++++++++-------------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/lib/instructor.ex b/lib/instructor.ex index 4b77fbe..f588d63 100644 --- a/lib/instructor.ex +++ b/lib/instructor.ex @@ -32,8 +32,8 @@ defmodule Instructor do * `:mode` - The mode to use when parsing the response, :tools, :json, :md_json (defaults to `:tools`), generally speaking you don't need to change this unless you are not using OpenAI. * `:max_retries` - The maximum number of times to retry the LLM call if it fails, or does not pass validations. (defaults to `0`) - * `:inspect_request?` -`IO.inspect` the request before sending to the LLM, useful for debugging (defaults to `false`). - * `:inspect_response?` -`IO.inspect` the response from the LLM before processing, useful for debugging (defaults to `false`). + * `:before_request` - An optional callback function, to run just before passing a request to the LLM, useful for debugging. + * `:after_response` - An optional callback function to run after receiving a response from the LLM, and before processing the response, useful for debugging. ## Examples diff --git a/lib/instructor/adapters/llamacpp.ex b/lib/instructor/adapters/llamacpp.ex index 3013922..b9f9a3e 100644 --- a/lib/instructor/adapters/llamacpp.ex +++ b/lib/instructor/adapters/llamacpp.ex @@ -34,8 +34,8 @@ defmodule Instructor.Adapters.Llamacpp do def chat_completion(params, _config \\ nil) do {response_model, _} = Keyword.pop!(params, :response_model) {messages, _} = Keyword.pop!(params, :messages) - {inspect_request?, params} = Keyword.pop(params, :inspect_request?) - {inspect_response?, params} = Keyword.pop(params, :inspect_response?) + {before_request, params} = Keyword.pop(params, :before_request) + {after_response, params} = Keyword.pop(params, :after_response) json_schema = JSONSchema.from_ecto_schema(response_model) grammar = GBNF.from_json_schema(json_schema) @@ -43,13 +43,13 @@ defmodule Instructor.Adapters.Llamacpp do stream = Keyword.get(params, :stream, false) if stream do - do_streaming_chat_completion(prompt, grammar, inspect_request?, inspect_response?) + do_streaming_chat_completion(prompt, grammar, before_request, after_response) else - do_chat_completion(prompt, grammar, inspect_request?, inspect_response?) + do_chat_completion(prompt, grammar, before_request, after_response) end end - defp do_streaming_chat_completion(prompt, grammar, inspect_request?, inspect_response?) do + defp do_streaming_chat_completion(prompt, grammar, before_request, after_response) do pid = self() Stream.resource( @@ -65,8 +65,8 @@ defmodule Instructor.Adapters.Llamacpp do }, receive_timeout: 60_000, into: fn {:data, data}, {req, resp} -> - if inspect_response? do - IO.inspect(data, pretty: true, limit: :infinity, printable_limit: :infinity) + if is_function(after_response) do + after_response.({{:data, data}, {req, resp}}) end send(pid, data) @@ -74,8 +74,8 @@ defmodule Instructor.Adapters.Llamacpp do end ) - if inspect_request? do - IO.inspect(req, pretty: true, limit: :infinity, printable_limit: :infinity) + if is_function(before_request) do + before_request.(req) end Req.post!(req) @@ -107,7 +107,7 @@ defmodule Instructor.Adapters.Llamacpp do } end - defp do_chat_completion(prompt, grammar, inspect_request?, inspect_response?) do + defp do_chat_completion(prompt, grammar, before_request, after_response) do req = Req.new( url: url(), @@ -118,14 +118,14 @@ defmodule Instructor.Adapters.Llamacpp do receive_timeout: 60_000 ) - if inspect_request? do - IO.inspect(req, pretty: true, limit: :infinity, printable_limit: :infinity) + if is_function(before_request) do + before_request.(req) end response = Req.post!(req) - if inspect_response? do - IO.inspect(response, pretty: true, limit: :infinity, printable_limit: :infinity) + if is_function(after_response) do + after_response.(response) end case response do diff --git a/lib/instructor/adapters/openai.ex b/lib/instructor/adapters/openai.ex index f412149..a0edc85 100644 --- a/lib/instructor/adapters/openai.ex +++ b/lib/instructor/adapters/openai.ex @@ -13,19 +13,19 @@ defmodule Instructor.Adapters.OpenAI do {_, params} = Keyword.pop(params, :validation_context) {_, params} = Keyword.pop(params, :max_retries) {_, params} = Keyword.pop(params, :mode) - {inspect_request?, params} = Keyword.pop(params, :inspect_request?) - {inspect_response?, params} = Keyword.pop(params, :inspect_response?) + {before_request, params} = Keyword.pop(params, :before_request) + {after_response, params} = Keyword.pop(params, :after_response) stream = Keyword.get(params, :stream, false) params = Enum.into(params, %{}) if stream do - do_streaming_chat_completion(params, config, inspect_request?, inspect_response?) + do_streaming_chat_completion(params, config, before_request, after_response) else - do_chat_completion(params, config, inspect_request?, inspect_response?) + do_chat_completion(params, config, before_request, after_response) end end - defp do_streaming_chat_completion(params, config, inspect_request?, inspect_response?) do + defp do_streaming_chat_completion(params, config, before_request, after_response) do pid = self() options = http_options(config) @@ -37,8 +37,8 @@ defmodule Instructor.Adapters.OpenAI do json: params, auth: {:bearer, api_key(config)}, into: fn {:data, data}, {req, resp} -> - if inspect_response? do - IO.inspect(data, pretty: true, limit: :infinity, printable_limit: :infinity) + if is_function(after_response) do + after_response.({{:data, data}, {req, resp}}) end chunks = @@ -63,8 +63,8 @@ defmodule Instructor.Adapters.OpenAI do req = Req.new([url: url(config)] ++ options) - if inspect_request? do - IO.inspect(req, pretty: true, limit: :infinity, printable_limit: :infinity) + if is_function(before_request) do + before_request.(req) end Req.post!(req) @@ -87,18 +87,18 @@ defmodule Instructor.Adapters.OpenAI do ) end - defp do_chat_completion(params, config, inspect_request?, inspect_response?) do + defp do_chat_completion(params, config, before_request, after_response) do options = Keyword.merge(http_options(config), json: params, auth: {:bearer, api_key(config)}) req = Req.new([url: url(config)] ++ options) - if inspect_request? do - IO.inspect(req, pretty: true, limit: :infinity, printable_limit: :infinity) + if is_function(before_request) do + before_request.(req) end response = Req.post!(req) - if inspect_response? do - IO.inspect(response, pretty: true, limit: :infinity, printable_limit: :infinity) + if is_function(after_response) do + after_response.(response) end case response.status do From c90f15ef310eb0e2f9d41d75bff8f7e774e3c9b4 Mon Sep 17 00:00:00 2001 From: "P.J. Janse van Rensburg" Date: Mon, 22 Apr 2024 09:43:19 +0200 Subject: [PATCH 14/14] update Quickstart livebook with a section on debugging --- pages/quickstart.livemd | 361 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 352 insertions(+), 9 deletions(-) diff --git a/pages/quickstart.livemd b/pages/quickstart.livemd index 81d8d21..5247e0a 100644 --- a/pages/quickstart.livemd +++ b/pages/quickstart.livemd @@ -196,20 +196,16 @@ Instructor.chat_completion( ``` -11:15:25.188 [debug] Retrying LLM call for NumberSeries: +09:27:49.015 [debug] Retrying LLM call for NumberSeries: "series - The sum of the series must be even\nseries - should have at least 10 item(s)" -11:15:26.662 [debug] Retrying LLM call for NumberSeries: - - "series - The sum of the series must be even" - ``` ``` -{:ok, %NumberSeries{series: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]}} +{:ok, %NumberSeries{series: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]}} ``` Here we demonstrated using regular Lixar code to validate the outputs of an LLM, but we don't have to stop there. We can actually use the LLM to validate the outputs of the LLM. @@ -257,7 +253,7 @@ end #Ecto.Changeset< action: nil, changes: %{question: "What is the meaning of life?", answer: "Sex, drugs, and rock'n roll"}, - errors: [answer: {"is invalid, Do not say anything objectionable", []}], + errors: [answer: {"is invalid, Contains objectionable content", []}], data: #QuestionAnswer<>, valid?: false > @@ -409,7 +405,7 @@ end) [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: []} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: []} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: nil, from_date: nil, to_date: nil}]} -[Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: nil, to_date: nil}]} +[Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: nil, from_date: ~D[1789-04-30], to_date: nil}]} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: ~D[1789-04-30], to_date: nil}]} [Partial]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: ~D[1789-04-30], to_date: ~D[1797-03-04]}]} [Final]: %Politician{first_name: "George", last_name: "Washington", offices_held: [%Politician.Office{office: :president, from_date: ~D[1789-04-30], to_date: ~D[1797-03-04]}]} @@ -507,4 +503,351 @@ Instructor.chat_completion( And just like that, you can extend Instructor to get the LLM to return whatever you want. - + + +## Debugging + +When you need more insight into what's happenning under the hood, you can specfy a callback to run just before a request is sent to an LLM, or just after receiving a response. This can be useful for debugging, or tracking token usage, etc. + +```elixir +Instructor.chat_completion( + model: "gpt-3.5-turbo", + response_model: Politician, + messages: [ + %{ + role: "user", + content: + "Who won the American 2020 election and what offices have they held over their career?" + } + ], + before_request: &IO.inspect/1, + after_response: &IO.inspect/1 +) +``` + + + +``` +%Req.Request{ + method: :get, + url: URI.parse("https://api.openai.com/v1/chat/completions"), + headers: %{}, + body: nil, + options: %{ + auth: {:bearer, "[redacted]"}, + receive_timeout: 60000, + json: %{ + messages: [ + %{ + content: "As a genius expert, your task is to understand the content and provide the parsed objects in json that match the following json_schema:\n\n{\"type\":\"object\",\"description\":\"A description of United States Politicians and the offices that they held,\\n\\n## Fields:\\n- first_name: Their first name\\n- last_name: Their last name\\n- offices_held:\\n - office: The branch and position in government they served in\\n - from_date: When they entered office or null\\n - until_date: The date they left office or null\\n\",\"title\":\"Politician\",\"required\":[\"first_name\",\"last_name\",\"offices_held\"],\"properties\":{\"first_name\":{\"type\":\"string\",\"title\":\"first_name\"},\"last_name\":{\"type\":\"string\",\"title\":\"last_name\"},\"offices_held\":{\"type\":\"array\",\"title\":\"Politician.Office\",\"items\":{\"$ref\":\"#/$defs/Politician.Office\"}}},\"$defs\":{\"Politician.Office\":{\"type\":\"object\",\"description\":\"\",\"title\":\"Politician.Office\",\"required\":[\"from_date\",\"office\",\"to_date\"],\"properties\":{\"office\":{\"type\":\"string\",\"enum\":[\"president\",\"vice_president\",\"governor\",\"congress\",\"senate\"],\"title\":\"office\"},\"from_date\":{\"type\":\"string\",\"format\":\"date\",\"title\":\"from_date\"},\"to_date\":{\"type\":\"string\",\"format\":\"date\",\"title\":\"to_date\"}}}}}\n\n\nHere are some more definitions to adhere too:\n{\"Politician.Office\":{\"description\":\"\",\"properties\":{\"from_date\":{\"format\":\"date\",\"title\":\"from_date\",\"type\":\"string\"},\"office\":{\"enum\":[\"president\",\"vice_president\",\"governor\",\"congress\",\"senate\"],\"title\":\"office\",\"type\":\"string\"},\"to_date\":{\"format\":\"date\",\"title\":\"to_date\",\"type\":\"string\"}},\"required\":[\"from_date\",\"office\",\"to_date\"],\"title\":\"Politician.Office\",\"type\":\"object\"}}\n", + role: "system" + }, + %{ + content: "Who won the American 2020 election and what offices have they held over their career?", + role: "user" + } + ], + tools: [ + %{ + function: %{ + "description" => "Correctly extracted `Schema` with all the required parameters with correct types", + "name" => "Schema", + "parameters" => %{ + "$defs" => %{ + "Politician.Office" => %{ + "description" => "", + "properties" => %{ + "from_date" => %{ + "format" => "date", + "title" => "from_date", + "type" => "string" + }, + "office" => %{ + "enum" => ["president", "vice_president", "governor", + "congress", "senate"], + "title" => "office", + "type" => "string" + }, + "to_date" => %{ + "format" => "date", + "title" => "to_date", + "type" => "string" + } + }, + "required" => ["from_date", "office", "to_date"], + "title" => "Politician.Office", + "type" => "object" + } + }, + "description" => "A description of United States Politicians and the offices that they held,\n\n## Fields:\n- first_name: Their first name\n- last_name: Their last name\n- offices_held:\n - office: The branch and position in government they served in\n - from_date: When they entered office or null\n - until_date: The date they left office or null\n", + "properties" => %{ + "first_name" => %{"title" => "first_name", "type" => "string"}, + "last_name" => %{"title" => "last_name", "type" => "string"}, + "offices_held" => %{ + "items" => %{"$ref" => "#/$defs/Politician.Office"}, + "title" => "Politician.Office", + "type" => "array" + } + }, + "required" => ["first_name", "last_name", "offices_held"], + "title" => "Politician", + "type" => "object" + } + }, + type: "function" + } + ], + model: "gpt-3.5-turbo", + tool_choice: %{function: %{name: "Schema"}, type: "function"} + } + }, + registered_options: MapSet.new([:finch_request, :json, :form, :compress_body, + :http_errors, :receive_timeout, :follow_redirects, :range, :pool_timeout, + :cache_dir, :compressed, :finch, :retry, :decode_json, :auth, :path_params, + :params, :connect_options, :max_retries, :redirect_log_level, :redact_auth, + :checksum, :decode_body, :finch_private, :cache, :inet6, :retry_log_level, + :redirect_trusted, :redirect, :retry_delay, :user_agent, :output, + :max_redirects, :plug, :raw, :base_url, :location_trusted, :unix_socket, + :aws_sigv4]), + halted: false, + adapter: &Req.Steps.run_finch/1, + request_steps: [ + put_user_agent: &Req.Steps.put_user_agent/1, + compressed: &Req.Steps.compressed/1, + encode_body: &Req.Steps.encode_body/1, + put_base_url: &Req.Steps.put_base_url/1, + auth: &Req.Steps.auth/1, + put_params: &Req.Steps.put_params/1, + put_path_params: &Req.Steps.put_path_params/1, + put_range: &Req.Steps.put_range/1, + cache: &Req.Steps.cache/1, + put_plug: &Req.Steps.put_plug/1, + compress_body: &Req.Steps.compress_body/1, + checksum: &Req.Steps.checksum/1, + put_aws_sigv4: &Req.Steps.put_aws_sigv4/1 + ], + response_steps: [ + retry: &Req.Steps.retry/1, + redirect: &Req.Steps.redirect/1, + verify_checksum: &Req.Steps.verify_checksum/1, + decompress_body: &Req.Steps.decompress_body/1, + decode_body: &Req.Steps.decode_body/1, + handle_http_errors: &Req.Steps.handle_http_errors/1, + output: &Req.Steps.output/1 + ], + error_steps: [retry: &Req.Steps.retry/1], + private: %{} +} +%Req.Response{ + status: 200, + headers: %{ + "access-control-allow-origin" => ["*"], + "alt-svc" => ["h3=\":443\"; ma=86400"], + "cache-control" => ["no-cache, must-revalidate"], + "cf-cache-status" => ["DYNAMIC"], + "cf-ray" => ["8783ef641bef3eb1-CPT"], + "connection" => ["keep-alive"], + "content-type" => ["application/json"], + "date" => ["Mon, 22 Apr 2024 07:35:08 GMT"], + "openai-model" => ["gpt-3.5-turbo-0125"], + "openai-organization" => ["swizzl-ai"], + "openai-processing-ms" => ["2094"], + "openai-version" => ["2020-10-01"], + "server" => ["cloudflare"], + "set-cookie" => ["__cf_bm=m8eagj16Fzia.h4ygE2iLe.kyLrhaUi_ZegnsYThd_k-1713771308-1.0.1.1-Do.pAoPZ9_GM2Ois_FAmoajAxbX_EIRESWZEkTtRO57r5jKXeJYqvmihfBz3nS2Ama0k9iSKkglow.SlpRhlVA; path=/; expires=Mon, 22-Apr-24 08:05:08 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", + "_cfuvid=657ngl.MyXWfyLZiRVTtxLbcHRojlmRXCXWlo.GuUXo-1713771308020-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None"], + "strict-transport-security" => ["max-age=15724800; includeSubDomains"], + "transfer-encoding" => ["chunked"], + "x-ratelimit-limit-requests" => ["10000"], + "x-ratelimit-limit-tokens" => ["1000000"], + "x-ratelimit-remaining-requests" => ["9999"], + "x-ratelimit-remaining-tokens" => ["999552"], + "x-ratelimit-reset-requests" => ["6ms"], + "x-ratelimit-reset-tokens" => ["26ms"], + "x-request-id" => ["req_871fd82627d356a7663fd0621505fefb"] + }, + body: %{ + "choices" => [ + %{ + "finish_reason" => "stop", + "index" => 0, + "logprobs" => nil, + "message" => %{ + "content" => nil, + "role" => "assistant", + "tool_calls" => [ + %{ + "function" => %{ + "arguments" => "{\"first_name\":\"Joe\",\"last_name\":\"Biden\",\"offices_held\":[{\"office\":\"president\",\"from_date\":\"2021-01-20\",\"to_date\":null},{\"office\":\"vice_president\",\"from_date\":\"2009-01-20\",\"to_date\":\"2017-01-20\"},{\"office\":\"senate\",\"from_date\":\"1973-01-03\",\"to_date\":\"2009-01-15\"}]}", + "name" => "Schema" + }, + "id" => "call_5o7vrpjN7XhBHsNRQnlo4ShX", + "type" => "function" + } + ] + } + } + ], + "created" => 1713771306, + "id" => "chatcmpl-9GiUc6dwyfPiRmkRed79MTIuuVNnR", + "model" => "gpt-3.5-turbo-0125", + "object" => "chat.completion", + "system_fingerprint" => "fp_c2295e73ad", + "usage" => %{ + "completion_tokens" => 89, + "prompt_tokens" => 645, + "total_tokens" => 734 + } + }, + trailers: %{}, + private: %{} +} +``` + + + +``` +{:ok, + %Politician{ + first_name: "Joe", + last_name: "Biden", + offices_held: [ + %Politician.Office{office: :president, from_date: ~D[2021-01-20], to_date: nil}, + %Politician.Office{office: :vice_president, from_date: ~D[2009-01-20], to_date: ~D[2017-01-20]}, + %Politician.Office{office: :senate, from_date: ~D[1973-01-03], to_date: ~D[2009-01-15]} + ] + }} +``` + +These callbacks receive the request / response structs as a single argument, except when using streaming: then the `after_response` callback recieves the incoming data chunk, as well as the latest version of the request & response structs. + +```elixir +presidents_stream = + Instructor.chat_completion( + model: "gpt-3.5-turbo", + stream: true, + response_model: {:array, Politician}, + messages: [ + %{role: "user", content: "Who are the first 5 presidents of the United States?"} + ], + after_response: fn {{:data, data}, {_req, _resp}} -> IO.inspect(data) end + ) + |> Stream.run() +``` + + + +``` +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":null,\"tool_calls\":[{\"index\":0,\"id\":\"call_7Z4wUDv9k8EQrwccw5Swrvpx\",\"type\":\"function\",\"function\":{\"name\":\"Schema\",\"arguments\":\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"value\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":[{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"first\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_name\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"George\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"last\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_name\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"Washington\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"off\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ices\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_h\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"eld\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":[{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"office\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"pres\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ident\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"from\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_date\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"178\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"9\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"04\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"30\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"to\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_date\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"179\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"7\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"03\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"04\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"]\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"},{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"first\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_name\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"John\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"last\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_name\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"Ad\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ams\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"off\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ices\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_h\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"eld\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":[{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"office\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"pres\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ident\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"from\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_date\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"179\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"7\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"03\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"04\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"to\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"syste" <> ... +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"180\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"1\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"03\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"04\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"]\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"},{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"first\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_name\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"Thomas\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"last\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_name\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"Jeff\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"erson\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"off\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ices\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_h\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"eld\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":[{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"office\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"pres\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ident\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"from\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_date\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"180\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"1\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"03\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"04\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"to\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_date\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"180\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"9\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"03\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"04\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"]\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"},{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"first\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_name\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"James\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"last\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_name\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"Mad\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ison\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"off\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ices\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_h\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"eld\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":[{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"office\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"pres\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ident\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"from\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_date\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"180\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"9\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"03\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"04\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"to\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_date\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"181\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"7\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"03\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"04\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"]\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"},{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"first\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_name\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"James\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"last\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_name\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"Mon\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"roe\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"off\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ices\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_h\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"eld\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":[{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"office\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"pres\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ident\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"from\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_date\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"181\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"7\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"03\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"04\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\",\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"to\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_date\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"182\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"5\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"03\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"-\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"04\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"]}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"]}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\n" +"data: {\"id\":\"chatcmpl-9GibnRlQ8RCGvuEMwjru7BF6azBTx\",\"object\":\"chat.completion.chunk\",\"created\":1713771751,\"model\":\"gpt-3.5-turbo-0125\",\"system_fingerprint\":\"fp_c2295e73ad\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}]}\n\ndata: [DONE]\n\n" +``` + + + +``` +:ok +``` + +