From 37cc0031fb360ccd8fc87fadf69f38de2bb55546 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Assun=C3=A7=C3=A3o?= Date: Fri, 5 Apr 2024 15:10:43 +0100 Subject: [PATCH] Reducing probability of getting JSON decode errors, and fixing problem with passing in adapter with each call --- lib/instructor.ex | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/instructor.ex b/lib/instructor.ex index 83bd4af..06afd76 100644 --- a/lib/instructor.ex +++ b/lib/instructor.ex @@ -481,17 +481,24 @@ defmodule Instructor do end defp parse_response_for_mode(:md_json, %{"choices" => [%{"message" => %{"content" => content}}]}), - do: Jason.decode(content) + do: Jason.decode(content |> clean_up_for_json_decoding() |> IO.inspect()) defp parse_response_for_mode(:json, %{"choices" => [%{"message" => %{"content" => content}}]}), - do: Jason.decode(content) + do: Jason.decode(clean_up_for_json_decoding(content)) defp parse_response_for_mode(:tools, %{ "choices" => [ %{"message" => %{"tool_calls" => [%{"function" => %{"arguments" => args}}]}} ] }), - do: Jason.decode(args) + do: Jason.decode(clean_up_for_json_decoding(args)) + + defp clean_up_for_json_decoding(string), + do: + string + |> String.replace("\n", "") + |> String.replace("```json", "") + |> String.replace("```", "") defp parse_stream_chunk_for_mode(:md_json, %{"choices" => [%{"delta" => %{"content" => chunk}}]}), do: chunk @@ -621,6 +628,10 @@ defmodule Instructor do end end - defp adapter(%{adapter: adapter}) when is_atom(adapter), do: adapter - defp adapter(_), do: Application.get_env(:instructor, :adapter, Instructor.Adapters.OpenAI) + defp adapter(config), + do: + if(config[:adapter], + do: config[:adapter], + else: Application.get_env(:instructor, :adapter, Instructor.Adapters.OpenAI) + ) end