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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hello,</p>
<p>I’m evaluating this library and I have two questions:</p>
<ul>
<li>is it possible to integrate JSON schema validation with a custom validator (we want to use JSV to automatically validate and cast output to structs, using $ref schemas for various entities)</li>
<li>is it possible to enforce <em>not</em> using environment variables like OPENAI_API_KEY that may be defined.</li>
</ul>
<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="388061" 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/omni-a-universal-elixir-client-for-llm-apis/74589/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-388061" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388061"
                     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 #11"></div>
  </section>
</div>
    <div class="postbit" id="388106" data-post-id="388106">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aaronrussell" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aaronrussell/120/39972_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aaronrussell
                      <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, thanks for your interest.</p>
<ul>
<li>
<p>JSON schema validation - as it stands right now, we validate against the JSON schema using an admittedly cobbled together solution. It does a decent enough job for basic shapes, but won’t cast to structs or resolve refs. That said, there’s room for improvement here. I previously looked at a few JSON-schema packages to see if we could just offload the problem to a dependency, but none that I looked at fitted they way I wanted. But, I didn’t look at JSV, and honestly it looks perfect. So if it’s of interest, I’d be more than happy to bake JSV in as the way we validate against schemas. I’ll dig a bit deeper in the week, but potentially that could be done this week.</p>
</li>
<li>
<p>Env variables - the auth method resolves like this:</p>
<ol>
<li>If the caller provides an API key, use that</li>
<li>If the provider has an API key in the app config, use that</li>
<li>If the provider environment variable is set, use that</li>
<li>Fail</li>
</ol>
<p>So, in theory if your code provides keys in 1 or 2, then it will never drill down to 3. Is that good enough or do you need a way to explicitly remove 3 from the flow?</p>
</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388106" 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/omni-a-universal-elixir-client-for-llm-apis/74589/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-388106" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388106"
                     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 #12"></div>
  </section>
</div>
    <div class="postbit" id="388112" data-post-id="388112">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Congrats OP!!! ReqLLM author here - any time you’d like to chat about this problem space I’m happy to grab time.</p>
<p>Only suggestion would be to consider collaborating on LLMDB: <a href="https://hex.pm/packages/llm_db" class="inline-onebox" rel="nofollow">llm_db | Hex</a></p>
<p>Nailing the model database and model capabilities turned out to a huge challenge and that DB is a place where it makes more sense to work together if you’re open!</p>
<p>Great work.</p>
<p>PS</p>
<aside class="quote no-group" data-username="AndyL" data-post="6" data-topic="74589">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/andyl/48/3659_2.png" class="avatar"> AndyL:</div>
<blockquote>
<p>I believe ReqLLM is integrated with Jido and Ash.</p>
</blockquote>
</aside>
<p>ReqLLM stands alone - but Ash and Jido build on top of it extensively.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388112" 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/omni-a-universal-elixir-client-for-llm-apis/74589/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-388112" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388112"
                     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 #13"></div>
  </section>
</div>
    <div class="postbit" id="388188" data-post-id="388188">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hello,</p>
<p>Thank you for your answer!</p>
<p>If you want to integrate with JSV you may want to use <code>JSV.Schema.normalize_collect</code> to build a self contained schema with $defs and $refs that can be shared to an external service. This would work nicely with schema defined as modules (any module that exports a <code>json_schema/0</code> function):</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">use JSV.Schema

defschema NextAction,
  task: string()

defschema MeetingRecap,
  summary: string(),
  next_action: NextAction

JSV.Schema.normalize_collect(MeetingRecap, as_root: true)

#=&gt; %{
#   "$defs" =&gt; %{
#     "NextAction" =&gt; %{
#       "properties" =&gt; %{"task" =&gt; %{"type" =&gt; "string"}},
#       "required" =&gt; ["task"],
#       "title" =&gt; "NextAction",
#       "type" =&gt; "object",
#       "x-jsv-cast" =&gt; "Elixir.NextAction"
#     }
#   },
#   "properties" =&gt; %{
#     "next_action" =&gt; %{"$ref" =&gt; "#/$defs/NextAction"},
#     "summary" =&gt; %{"type" =&gt; "string"}
#   },
#   "required" =&gt; ["summary", "next_action"],
#   "title" =&gt; "MeetingRecap",
#   "type" =&gt; "object",
#   "x-jsv-cast" =&gt; "Elixir.MeetingRecap"
# }
</code></pre>
<p>Also please test with the <code>main</code> branch, an incoming release with breaking changes is on its way, it’s the last one before v1.0, I just did not have time to polish the docs.</p>
<p>If you don’t want to bake in, an option that accepts the output and returns <code>{:ok, casted_value} | {:error, _}</code> could be nice too.</p>
<blockquote>
<p>So, in theory if your code provides keys in 1 or 2, then it will never drill down to 3. Is that good enough or do you need a way to explicitly remove 3 from the flow?</p>
</blockquote>
<p>Yeah this is OK. The problem we have is we define an API key per-feature, but we have python apps that can only read the global env variables. So on dev machines it is a problem, but option 1 is ok for production code, thanks <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388188" 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/omni-a-universal-elixir-client-for-llm-apis/74589/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-388188" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388188"
                     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 #14"></div>
  </section>
</div>
    <div class="postbit" id="388211" data-post-id="388211">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aaronrussell" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aaronrussell/120/39972_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aaronrussell
                      <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>I worked on this a little yesterday so can tell you where I’ve landed.</p>
<p>Have decided not to integrate JSV directly. Instead sticking with our simple schema builder and validation code which is “good enough” 90% of the time. And then on top of that we provide a simple behaviour module for pluggable schema validation - so can integrate with JSV, Zoi or whatever. For JSV it would look a little like this:</p>
<pre data-code-wrap="ex"><code class="lang-ex">defmodule JSVAdapter do
  @behaviour Omni.Schema.Adapter

  def to_schema(%JSV.Root{raw: raw}), do: raw

  def validate(%JSV.Root{} = root, input) do
    case JSV.validate(input, root) do
      {:ok, data} -&gt; {:ok, data}
      # error pathway should return the error as a string
      {:error, error} -&gt; {:error, format_error(error)}
    end
  end
end
</code></pre>
<p>Then in your call site you use it like this:</p>
<pre data-code-wrap="ex"><code class="lang-ex">root = JSV.build!(MeetingRecap)
Omni.stream_text(model, context, output: {JSVAdapter, root})
</code></pre>
<p>And if needed, you can use the same pattern in tools:</p>
<pre data-code-wrap="ex"><code class="lang-ex">defmodule MeetingTool do
  use Omni.Tool

  @root JSV.build!(MeetingRecap)
  def schema, do: {JSVAdapter, @root}

  # .... etc
end
</code></pre>
<p>If you want to play with this it’s already in the main branch - so will be in the next release.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388211" 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/omni-a-universal-elixir-client-for-llm-apis/74589/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-388211" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388211"
                     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 #15"></div>
  </section>
</div>
    <div class="postbit" id="388214" data-post-id="388214">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think the schema needs to be collected to have proper refs when using modules but otherwise looks good.</p>
<p>Is there a way to use an external schema with the built-in schema system?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388214" 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/omni-a-universal-elixir-client-for-llm-apis/74589/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-388214" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388214"
                     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 #16"></div>
  </section>
</div>
    <div class="postbit" id="388215" data-post-id="388215">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aaronrussell" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aaronrussell/120/39972_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aaronrussell
                      <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>The <code>:output</code> option ordinarily receives a plain map that can serialise to a JSON schema. You can use the <code>Omni.Schema</code> builders if you want, or build it with some other tool. Then after the request the output is validated against the schema - the default implementation offloads this to Peri, using <code>Peri.from_json_schema</code>. I don’t know how well that will validate against complex schemas with <code>$defs</code> etc. Maybe it will be fine. But if not, then reach for an adapter</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388215" 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/omni-a-universal-elixir-client-for-llm-apis/74589/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-388215" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388215"
                     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 #17"></div>
  </section>
</div>
    <div class="postbit" id="388300" data-post-id="388300">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="aaronrussell" data-post="16" data-topic="74589">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aaronrussell/48/39972_2.png" class="avatar"> aaronrussell:</div>
<blockquote>
<p><code>Omni.Schema.Adapter</code></p>
</blockquote>
</aside>
<p>I can’t find this on the main branch. Maybe you did not push it yet?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388300" 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/omni-a-universal-elixir-client-for-llm-apis/74589/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-388300" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388300"
                     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 #18"></div>
  </section>
</div>
    <div class="postbit" id="388304" data-post-id="388304">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aaronrussell" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aaronrussell/120/39972_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aaronrussell
                      <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">
								<aside class="quote no-group" data-username="lud" data-post="19" data-topic="74589">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lud/48/14382_2.png" class="avatar"> lud:</div>
<blockquote>
<p>Maybe you did not push it yet?</p>
</blockquote>
</aside>
<p><em>Looks sheepish</em> <img src="https://forum.elixirforum.com/images/emoji/apple/see_no_evil_monkey.png?v=15" title=":see_no_evil_monkey:" class="emoji" alt=":see_no_evil_monkey:" loading="lazy" width="20" height="20"> <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p>
<p>So sorry. It’s there now.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388304" 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/omni-a-universal-elixir-client-for-llm-apis/74589/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-388304" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388304"
                     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>
    <div class="postbit" id="388307" data-post-id="388307">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thank you <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388307" 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/omni-a-universal-elixir-client-for-llm-apis/74589/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-388307" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388307"
                     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>
</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/74589/load_more?page=3">Load more posts</a>
</div></template></turbo-stream>