<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="347327" data-post-id="347327">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="brainlid" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/brainlid/120/20975_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  brainlid
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>Does this library work well in practice for apps requiring sub-second time-to-first-token?</p>
</blockquote>
<p>Yes. It supports streaming.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="347327" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/langchain-an-elixir-langchain-like-library-for-integrating-with-llms-like-chatgpt/58551/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-347327" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="347327"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #28"></div>
  </section>
</div>
    <div class="postbit" id="347225" data-post-id="347225">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="acrolink" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/acrolink/120/8985_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  acrolink
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Seems related to either the adapter or the AI engine you ae using. There is a debug flag for LLMchain, set it true to see full error messages. I recommend also to inspect the source code of the adapter / LLMchain in general. The answer can be there. Also you can try to ask Claude, can be helpful.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="347225" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/langchain-an-elixir-langchain-like-library-for-integrating-with-llms-like-chatgpt/58551/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-347225" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="347225"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #27"></div>
  </section>
</div>
    <div class="postbit" id="347214" data-post-id="347214">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jszod" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jszod/120/3495_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jszod
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for the response. I tried what you recommended and still receive the same error</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="347214" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/langchain-an-elixir-langchain-like-library-for-integrating-with-llms-like-chatgpt/58551/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-347214" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="347214"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #26"></div>
  </section>
</div>
    <div class="postbit" id="347099" data-post-id="347099">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="acrolink" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/acrolink/120/8985_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  acrolink
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="jszod" data-post="24" data-topic="58551">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jszod/48/3495_2.png" class="avatar"> jszod:</div>
<blockquote>
<p>Having some issues implementing the streaming example using <code>{:langchain, "~&gt; 0.3.0-rc.0"}</code> and Ollama local models</p>
</blockquote>
</aside>
<p>Make sure you pass <code>mode: :while_needs_response</code> to <code>LLMChain.run()</code> function, like this: <code>LLMChain.run(mode: :while_needs_response)</code>.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="347099" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/langchain-an-elixir-langchain-like-library-for-integrating-with-llms-like-chatgpt/58551/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-347099" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="347099"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #25"></div>
  </section>
</div>
    <div class="postbit" id="346858" data-post-id="346858">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ipnon" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ipnon/120/36256_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ipnon
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for writing this library, it seems really cool. Does this library work well in practice for apps requiring sub-second time-to-first-token?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="346858" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/langchain-an-elixir-langchain-like-library-for-integrating-with-llms-like-chatgpt/58551/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-346858" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="346858"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #24"></div>
  </section>
</div>
    <div class="postbit" id="346808" data-post-id="346808">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jszod" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jszod/120/3495_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jszod
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/brainlid" rel="nofollow">@brainlid</a><br>
Having some issues implementing the streaming example using <code>{:langchain, "~&gt; 0.3.0-rc.0"}</code> and Ollama local models</p>
<p>Using the sample <a href="https://github.com/brainlid/langchain/blob/main/notebooks/getting_started.livemd" rel="noopener nofollow ugc">Getting Started Livebook</a> code and OpenAi everything works fine. When I switch over to llama3 through Ollama I get the following error:</p>
<p><code>** (FunctionClauseError) no function clause matching in LangChain.Utils.fire_streamed_callback/2</code></p>
<p>Any help is much appreciated, and looks like great a library so far!</p>
<p>Here’s the code</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">alias LangChain.Chains.LLMChain
alias LangChain.MessageDelta
alias LangChain.Message
alias LangChain.ChatModels.ChatOllamaAI
alias LangChain.ChatModels.ChatOpenAI

handler = %{
on_llm_new_delta: fn _model, %MessageDelta{} = data -&gt;
  # We received a chunk of the response
  IO.write(data.content)
  end,

  on_message_processed: fn _chain, %Message{} = data -&gt;
    IO.puts("")
    IO.puts("")
    IO.inspect(data.content, label: "COMPLETED MESSAGE")
  end
}

{:ok, updated_chain, response} =
#  %{
#    llm: ChatOpenAI.new!(
#      %{
#      model: "gpt-4", 
#      stream: true, 
#      callbacks: [handler]
#      }
#    ),
#    callbacks: [handler]
#  }

  %{
    llm: ChatOllamaAI.new!(
      %{
      endpoint: "http://localhost:11434/api/chat", 
      model: "llama3:latest", 
      stream: true, 
      callbacks: [handler]
      }
    ),
    callbacks: [handler]
  }
  |&gt; LLMChain.new!()
  |&gt; LLMChain.add_messages([
    Message.new_system!("You are helpful assistant"),
    Message.new_user!("Write a haiku about the capital of the United States")
  ])
  |&gt; LLMChain.run()

updated_chain.last_message.content
</code></pre>
<p>The full error message is here if that helps</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">** (FunctionClauseError) no function clause matching in LangChain.Utils.fire_streamed_callback/2    
    
    The following arguments were given to LangChain.Utils.fire_streamed_callback/2:
    
        # 1
        %LangChain.ChatModels.ChatOllamaAI{
          endpoint: "http://localhost:11434/api/chat",
          mirostat: 0,
          mirostat_eta: 0.1,
          mirostat_tau: 5.0,
          model: "llama3:latest",
          num_ctx: 2048,
          num_gqa: nil,
          num_gpu: nil,
          num_predict: 128,
          num_thread: nil,
          receive_timeout: 300000,
          repeat_last_n: 64,
          repeat_penalty: 1.1,
          seed: 0,
          stop: nil,
          stream: true,
          temperature: 0.8,
          tfs_z: 1.0,
          top_k: 40,
          top_p: 0.9,
          callbacks: []
        }
    
        # 2
        %LangChain.Message{
          content: nil,
          processed_content: nil,
          index: nil,
          status: :complete,
          role: :assistant,
          name: nil,
          tool_calls: [],
          tool_results: nil
        }
    
    Attempted function clauses (showing 2 out of 2):
    
        def fire_streamed_callback(model, data) when is_list(data)
        def fire_streamed_callback(model, %LangChain.MessageDelta{} = delta)
    
    (langchain 0.3.0-rc.0) lib/utils.ex:103: LangChain.Utils.fire_streamed_callback/2
    (elixir 1.17.2) lib/enum.ex:987: Enum."-each/2-lists^foreach/1-0-"/2
    (langchain 0.3.0-rc.0) lib/utils.ex:161: anonymous fn/5 in LangChain.Utils.handle_stream_fn/3
    (finch 0.19.0) lib/finch/http1/conn.ex:346: Finch.HTTP1.Conn.receive_response/8
    (finch 0.19.0) lib/finch/http1/conn.ex:131: Finch.HTTP1.Conn.request/8
    (finch 0.19.0) lib/finch/http1/pool.ex:60: anonymous fn/10 in Finch.HTTP1.Pool.request/6
    (nimble_pool 1.1.0) lib/nimble_pool.ex:462: NimblePool.checkout!/4
    #cell:fm7cmhkax2o3kitd:48: (file)

</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="346808" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/langchain-an-elixir-langchain-like-library-for-integrating-with-llms-like-chatgpt/58551/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-346808" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="346808"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #23"></div>
  </section>
</div>
    <div class="postbit" id="344862" data-post-id="344862">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="acrolink" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/acrolink/120/8985_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  acrolink
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/brainlid" rel="nofollow">@brainlid</a></p>
<p>I have managed to do it! Now this tool can be used with a <code>Flutter</code> based Chatbot application using <code>Phoenix Channels</code>. Here is the GitHub gist, would be nice to get some tips for code improvements. Thank you. Looking forward to keep contributing to this great project.</p>
<aside class="onebox githubgist" data-onebox-src="https://gist.github.com/acrolink/198e838f15e090a2dbbaaa2c7769e8ae">
  <header class="source">

      <a href="https://gist.github.com/acrolink/198e838f15e090a2dbbaaa2c7769e8ae" target="_blank" rel="noopener nofollow ugc">gist.github.com</a>
  </header>

  <article class="onebox-body">
    <h4><a href="https://gist.github.com/acrolink/198e838f15e090a2dbbaaa2c7769e8ae" target="_blank" rel="noopener nofollow ugc">https://gist.github.com/acrolink/198e838f15e090a2dbbaaa2c7769e8ae</a></h4>



  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="344862" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/langchain-an-elixir-langchain-like-library-for-integrating-with-llms-like-chatgpt/58551/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-344862" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="344862"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #22"></div>
  </section>
</div>
    <div class="postbit" id="344777" data-post-id="344777">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="acrolink" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/acrolink/120/8985_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  acrolink
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/brainlid" rel="nofollow">@brainlid</a></p>
<p>I asked Chat-GPT to make the code conversion to pure <code>Phoenix Channels</code> code (no dependency on <code>LiveView</code>) and here is the result, there seems to be more work to do since I get <code>Jason</code> encoder errors related to <code>MessageDelta{}</code> (protocol not implemented).</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule LangChainDemoWeb.AgentChatChannel do
  use Phoenix.Channel

  alias LangChainDemoWeb.AgentChatLive.Agent.ChatMessage
  alias LangChain.Chains.LLMChain
  alias LangChain.Message
  alias LangChainDemo.FitnessUsers
  alias LangChainDemo.FitnessLogs
  alias LangChain.Message.ToolCall
  alias LangChain.Message.ToolResult

  # When a user joins the channel, initialize state
  def join("agent_chat:lobby", _message, socket) do
    current_user = FitnessUsers.get_fitness_user!(1)
    llm_chain = initialize_llm_chain(current_user)

    socket =
      assign(socket, :current_user, current_user)
      |&gt; assign(:llm_chain, llm_chain)
      |&gt; assign(:display_messages, [
        %ChatMessage{
          role: :assistant,
          hidden: false,
          content: "Hello! I'm your personal trainer. How can I help you today?"
        }
      ])

    {:ok, socket}
  end

  # Handle incoming "validate" event
  def handle_in("validate", %{"chat_message" =&gt; params}, socket) do
    changeset = ChatMessage.create_changeset(params) |&gt; Map.put(:action, :validate)
    push(socket, "validate_response", %{form: to_form(changeset)})
    {:noreply, socket}
  end

  # Handle incoming "save" event
  def handle_in("save", %{"chat_message" =&gt; params}, socket) do
    case ChatMessage.new(params) do
      {:ok, message} -&gt;
        updated_socket = add_user_message(socket, message.content)
        push(updated_socket, "message_saved", %{content: message.content})
        {:noreply, run_chain(updated_socket)}

      {:error, changeset} -&gt;
        push(socket, "save_error", %{errors: changeset.errors})
        {:noreply, socket}
    end
  end

  # Handle timezone event to update user's timezone
  def handle_in("browser-timezone", %{"timezone" =&gt; timezone}, socket) do
    user = socket.assigns.current_user

    socket =
      if timezone != user.timezone do
        {:ok, updated_user} = FitnessUsers.update_fitness_user(user, %{timezone: timezone})
        assign(socket, :current_user, updated_user)
      else
        socket
      end

    {:noreply, socket}
  end

  # Handle incoming chat delta from async processing
  def handle_info({:chat_delta, delta}, socket) do
    updated_chain = LLMChain.apply_delta(socket.assigns.llm_chain, delta)
    push(socket, "chat_delta", %{delta: delta})
    {:noreply, assign(socket, :llm_chain, updated_chain)}
  end

  # Handle tool execution message from async processing
  def handle_info({:tool_executed, tool_message}, socket) do
    message = %ChatMessage{role: tool_message.role, tool_results: tool_message.tool_results}
    updated_socket = assign(socket, :llm_chain, LLMChain.add_message(socket.assigns.llm_chain, tool_message))
    push(updated_socket, "tool_executed", %{tool_message: message})
    {:noreply, updated_socket}
  end

  # Handle updated user information
  def handle_info({:updated_current_user, updated_user}, socket) do
    socket =
      assign(socket, :current_user, updated_user)
      |&gt; assign(:llm_chain, LLMChain.update_custom_context(socket.assigns.llm_chain, %{current_user: updated_user}))

    {:noreply, socket}
  end

  # Handle task errors in async processing
  def handle_info({:task_error, reason}, socket) do
    push(socket, "task_error", %{reason: reason})
    {:noreply, socket}
  end

  # Function to initialize LLMChain
  defp initialize_llm_chain(current_user) do
    LLMChain.new!(%{
      llm: ChatOpenAI.new!(%{model: "gpt-4", temperature: 0, request_timeout: 60_000, stream: true}),
      custom_context: %{live_view_pid: self(), current_user: current_user},
      verbose: false
    })
  end

  # Handle running the LLM chain async
  defp run_chain(socket) do
    chain = socket.assigns.llm_chain
    live_view_pid = self()

    callback_fn = fn
      %LangChain.MessageDelta{} = delta -&gt; send(live_view_pid, {:chat_delta, delta})
      %LangChain.Message{role: :tool} = message -&gt; send(live_view_pid, {:tool_executed, message})
      _ -&gt; :ok
    end

    Task.start(fn -&gt;
      case LLMChain.run(chain, while_needs_response: true, callback_fn: callback_fn) do
        {:ok, _updated_chain, _last_message} -&gt; :ok
        {:error, reason} -&gt; send(live_view_pid, {:task_error, reason})
      end
    end)

    assign(socket, :llm_chain, chain)
  end

  # Add user message to chain
  defp add_user_message(socket, user_text) do
    updated_chain = LLMChain.add_message(socket.assigns.llm_chain, Message.new_user!(user_text))
    assign(socket, :llm_chain, updated_chain)
  end
end

</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="344777" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/langchain-an-elixir-langchain-like-library-for-integrating-with-llms-like-chatgpt/58551/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-344777" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="344777"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #21"></div>
  </section>
</div>
    <div class="postbit" id="344498" data-post-id="344498">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="acrolink" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/acrolink/120/8985_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  acrolink
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/brainlid" rel="nofollow">@brainlid</a></p>
<p>I have a question, I actually need your advice if this is feasible:</p>
<p>Do you think the logic inside this file (in the demo):<br>
<a href="https://github.com/brainlid/langchain_demo/blob/main/lib/langchain_demo_web/live/agent_chat_live/index.ex" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/brainlid/langchain_demo/blob/main/lib/langchain_demo_web/live/agent_chat_live/index.ex</a></p>
<p>Can it be re-written using Phoenix channels? Do you think the whole <code>LiveView</code> code can be replaced by Phoenix channels and Dart code (on a flutter mobile application) - I mean to write the chat interface natively in Flutter using <a href="https://pub.dev/packages/phoenix_socket" class="inline-onebox" rel="noopener nofollow ugc">phoenix_socket | Dart package</a> ?</p>
<p>I am not sure how to expose the <code>display_messages</code> array to Flutter .. Or is it that the <a href="https://pub.dev/packages/phoenix_socket" class="inline-onebox" rel="noopener nofollow ugc">phoenix_socket | Dart package</a> has limited functionality, for this end?</p>
<p>Thank you.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="344498" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/langchain-an-elixir-langchain-like-library-for-integrating-with-llms-like-chatgpt/58551/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-344498" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="344498"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
    <div class="postbit" id="343676" data-post-id="343676">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="brainlid" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/brainlid/120/20975_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  brainlid
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi <a class="mention" href="/u/acrolink" rel="nofollow">@acrolink</a>!</p>
<p>Thanks for the doc note.</p>
<blockquote>
<p>But would it be possible to do the routing inside an ongoing chat (changing the chain inside an ongoing chat)?</p>
</blockquote>
<p>The way I handle this is to manage the displayed chat separately from the one sent to the LLM. Just like we don’t want to display the system setup or other prompts to the user, those are sent to the LLM but not displayed to the user.</p>
<p>More advanced LLMs could handle a routing prompt inside a conversation, but the simpler LLMs cannot.</p>
<p>To me, it makes the most sense to perform the routing operation as a standalone chat with the LLM. Like you run it on the side, then use the result to define your next prompt. You don’t have to switch to another chain. You may only want the result of the LLM’s topic choice.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="343676" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/langchain-an-elixir-langchain-like-library-for-integrating-with-llms-like-chatgpt/58551/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-343676" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="343676"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/58551/load_more?page=5">Load more posts (18 remaining)</a>
</div></template></turbo-stream>