<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>RadLab — Blog</title>
  <subtitle>Uczenie maszynowe i przetwarzanie języka naturalnego. Modele, zbiory danych i oprogramowanie open source dla języka polskiego.</subtitle>
  <link href="https://radlab.dev/en/feed.xml" rel="self"/>
  <link href="https://radlab.dev/en/"/>
  <id>https://radlab.dev/en/</id>
  <updated>2026-01-01T00:00:00Z</updated>
  <author><name>RadLab</name></author>
  <rights>© RadLab</rights>
  <entry>
    <title>Are crypto mining farms frozen?</title>
    <link href="https://radlab.dev/en/2026-01-01/are-crypto-mining-farms-frozen/"/>
    <id>https://radlab.dev/en/2026-01-01/are-crypto-mining-farms-frozen/</id>
    <updated>2026-01-02T00:00:00Z</updated>
    <published>2026-01-01T00:00:00Z</published>
<category term="crypto-mining"/><category term="genai"/><category term="llm"/><category term="llm-router"/><category term="local"/><category term="open-source"/><category term="saas"/>    <summary>Today we’re looking at a slightly different “fairy‑tale”. Not from a production‑side technical perspective, but perhaps a proposal for a partial solution to…</summary>
    <content type="html">&lt;p&gt;&lt;strong&gt;Today&lt;/strong&gt; we’re looking at a slightly different “fairy‑tale”. Not from a production‑side technical perspective, but perhaps a &lt;strong&gt;proposal&lt;/strong&gt; for a partial &lt;strong&gt;solution&lt;/strong&gt; to the &lt;strong&gt;problem&lt;/strong&gt; that’s been discussed in the media—how else we might use “frozen” cryptocurrency mines 😉 for example,&lt;a href=&#34;https://www.benchmark.pl/aktualnosci/odchodza-od-kryptowalut-ai.html&#34;&gt;LINK&lt;/a&gt;..&lt;/p&gt;
&lt;p&gt;Given the demand for computing power required to train models, not every graphics card will be suitable for this purpose (you need cards with a very large amount of VRAM). In this post we’ll show how to turn a USB drive into a &lt;strong&gt;ready‑made&lt;/strong&gt; &lt;strong&gt;computational&lt;/strong&gt; &lt;strong&gt;environment&lt;/strong&gt;, to which we’ll attach an &lt;strong&gt;LLM Router&lt;/strong&gt; as a &lt;strong&gt;communication&lt;/strong&gt; layer for &lt;strong&gt;generative&lt;/strong&gt; &lt;strong&gt;models&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/6dff10b6ce-480.webp 480w, /assets/img/6dff10b6ce-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/6dff10b6ce.png&#34; alt=&#34;&#34; width=&#34;768&#34; height=&#34;597&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;If you &lt;strong&gt;already have&lt;/strong&gt; a ready &lt;strong&gt;environment&lt;/strong&gt; for &lt;strong&gt;cryptocurrency mining&lt;/strong&gt;, you can safely &lt;strong&gt;skip&lt;/strong&gt; the &lt;strong&gt;HiveOS Installation&lt;/strong&gt; step. &lt;strong&gt;If&lt;/strong&gt; you &lt;strong&gt;don’t&lt;/strong&gt;, going through this &lt;strong&gt;step&lt;/strong&gt; &lt;strong&gt;helps&lt;/strong&gt; to &lt;strong&gt;prepare&lt;/strong&gt; the &lt;strong&gt;system&lt;/strong&gt;. In the description a &lt;strong&gt;USB&lt;/strong&gt; drive is used as the &lt;strong&gt;system&lt;/strong&gt; &lt;strong&gt;medium&lt;/strong&gt;, because &lt;strong&gt;HiveOS&lt;/strong&gt; is &lt;strong&gt;installed by default&lt;/strong&gt; on &lt;strong&gt;USB&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;a class=&#34;headerlink&#34; href=&#34;#intro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;How can &lt;strong&gt;llm‑router&lt;/strong&gt; help solve this problem? The proposal is actually quite obvious and simple: &lt;strong&gt;use&lt;/strong&gt; the &lt;strong&gt;resources&lt;/strong&gt; of a &lt;strong&gt;cryptocurrency mining&lt;/strong&gt; &lt;strong&gt;farm&lt;/strong&gt; as a &lt;strong&gt;provider&lt;/strong&gt; for offering &lt;strong&gt;inference&lt;/strong&gt; services for &lt;strong&gt;generative models&lt;/strong&gt;. In other words, if you &lt;strong&gt;already have&lt;/strong&gt; a ready‑made &lt;strong&gt;infrastructure&lt;/strong&gt;, this post will show you how to &lt;strong&gt;leverage&lt;/strong&gt; it to &lt;strong&gt;run&lt;/strong&gt; &lt;strong&gt;generative&lt;/strong&gt; &lt;strong&gt;models&lt;/strong&gt;. As a result, you’ll have a &lt;strong&gt;locally&lt;/strong&gt; &lt;strong&gt;operating&lt;/strong&gt; &lt;strong&gt;service&lt;/strong&gt; that can launch models such as &lt;em&gt;gpt‑oss&lt;/em&gt; or &lt;em&gt;gemma&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;What can you do with this setup? For example, you could &lt;strong&gt;offer&lt;/strong&gt; a &lt;strong&gt;paid&lt;/strong&gt; &lt;strong&gt;service&lt;/strong&gt; that performs &lt;strong&gt;computations&lt;/strong&gt; (inference) on those models.&lt;/p&gt;
&lt;h2 id=&#34;hiveos-installation&#34;&gt;HiveOS Installation&lt;a class=&#34;headerlink&#34; href=&#34;#hiveos-installation&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The first step is to install a ready‑made operating system with the graphics‑card drivers already configured. For example, you can use &lt;a href=&#34;https://hiveon.com/&#34;&gt;HiveOS&lt;/a&gt; (the standard Ubuntu desktop is also an acceptable option if you don’t want to deal with installing GPU‑driver libraries yourself). The installation process is described in detail on the official site &lt;a href=&#34;https://hiveon.com/install&#34;&gt;https://hiveon.com/install&lt;/a&gt; – the currently available version is based on Ubuntu 22.04.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/ebfc1c96ab-480.webp 480w, /assets/img/ebfc1c96ab-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/ebfc1c96ab.png&#34; alt=&#34;&#34; width=&#34;1022&#34; height=&#34;1114&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;We select the GPU (or the beta driver version for the adventurous ;‑)) and install it according to the &lt;strong&gt;&lt;em&gt;&lt;a href=&#34;https://hiveon.com/install/#howto-image&#34;&gt;How to Write Image&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; guide. In our example we performed the installation on a USB stick using Ubuntu’s built‑in image‑writing tool (you can also use &lt;a href=&#34;https://etcher.balena.io/&#34;&gt;balenaEtcher&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/a3a9373fed-480.webp 480w, /assets/img/a3a9373fed-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/a3a9373fed.png&#34; alt=&#34;&#34; width=&#34;890&#34; height=&#34;557&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;After the installation the default user is &lt;code&gt;user&lt;/code&gt; and the password is &lt;code&gt;1&lt;/code&gt;. Of course, it’s good practice to change the default password to something more complex (once you’re logged in to the GPU machine run &lt;code&gt;passwd&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id=&#34;os-configuration&#34;&gt;OS configuration&lt;a class=&#34;headerlink&#34; href=&#34;#os-configuration&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We’ll skip the part where you set up the HiveOS server as a mining RIG (cryptocurrency mining and process monitoring through the HiveOS interface). Instead, we’ll take advantage of the already‑configured system and install a few basic system libraries that are required to run a local instance of &lt;strong&gt;LLM Router&lt;/strong&gt; together with a model served via &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The local provider can be any of the following – Ollama, vLLM, llama.cpp – it doesn’t matter; LLM Router is simply an interface that talks to whatever local model‑provider protocol you choose.&lt;/p&gt;
&lt;p&gt;After logging into the machine that has HiveOS installed: &lt;code&gt;ssh user@IP.LOKALNE.MASZYNY&lt;/code&gt; you will see information about the loaded drivers and the available graphics cards, e.g.:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/039332d5b9-480.webp 480w, /assets/img/039332d5b9-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/039332d5b9.png&#34; alt=&#34;&#34; width=&#34;942&#34; height=&#34;677&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;In our case there are three RTX 3090 cards available, each with 24 GB of VRAM. Detailed information about limits, temperatures, etc., can be viewed with the &lt;code&gt;nvidia‑info&lt;/code&gt; command (for NVIDIA GPUs).&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/6bc206ed03-480.webp 480w, /assets/img/6bc206ed03-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/6bc206ed03.png&#34; alt=&#34;&#34; width=&#34;809&#34; height=&#34;615&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Now we only need to install the basic packages &lt;code&gt;pip&lt;/code&gt;(for installing dependencies) and &lt;strong&gt;&lt;code&gt;git&lt;/code&gt;&lt;/strong&gt;(for cloning the repository):&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Installation on the system (if it isn’t already present) git + pip&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python3-pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;In fact, those two additional packages are enough for the operating system to be fully configured to run LLM Router.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;installing-llm-router&#34;&gt;Installing LLM Router&lt;a class=&#34;headerlink&#34; href=&#34;#installing-llm-router&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this example we show how to run the latest version of &lt;strong&gt;LLM Router&lt;/strong&gt; natively (i.e., not from a Docker image) directly from the main (&lt;code&gt;main&lt;/code&gt;) branch.&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Cloning the repository llm-router&lt;/span&gt;
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/radlab-dev-group/llm-router

&lt;span class=&#34;c1&#34;&gt;# Installation of dependencies and the API&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;llm-router/
pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requirements.txt
pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;api&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That’s it—in short: download, install, and start with just three commands :). Now, by running: &lt;code&gt;./run-rest-api-gunicorn.sh&lt;/code&gt; we expose a ready‑made API using &lt;strong&gt;Gunicorn&lt;/strong&gt;. At this point no models are attached yet, but the network service (REST API) is already up and running.&lt;/p&gt;
&lt;h3 id=&#34;view-the-startup-log-click&#34;&gt;&lt;em&gt;&lt;em&gt;View the startup log&lt;/em&gt;&lt;/em&gt; [CLICK]+&lt;a class=&#34;headerlink&#34; href=&#34;#view-the-startup-log-click&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;roo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;@HiveOS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/home/user/llm&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;./ru&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;api&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;gu&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;icor&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.sh&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;058&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;mai&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;S&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tart&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;LLM‑Rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;API&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;gu&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;icor&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;065&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.core.lb.provider_s&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;trate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;gy_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;fa&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;cade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;provider&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;mo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;072&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.core.lb.provider_s&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;trate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;gy_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;fa&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;cade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Load&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;bala&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ci&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;S&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;trate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;gy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Firs&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AvailableS&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;trate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;gy&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;072&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.core.mo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;or.services_mo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;mo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;hread&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tarte&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;077&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIComple&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dlerWOApi&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;werBasedO&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;TheCo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nte&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIComple&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIModelsV&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ApiVersio&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nts&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ru&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nn&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;LLM&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;versio&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.4.4&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIRespo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nses&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Pi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIRespo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nses&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Co&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;versa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;hModel&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;FullAr&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;icleFromTex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ten&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dedCo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;versa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;hModel&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ge&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nerate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;NewsFromTex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Tra&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nslate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Tex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;078&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Simpli&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;yTex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;OllamaTagsHa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ge&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nerate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;FromTex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;LLMS&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tu&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dioCha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;OllamaHomeHa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Fas&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Tex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Maski&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;VllmCha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Comple&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;LmS&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tu&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dioModelsHa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIModelsHa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.au&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o_loader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nstant&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;OllamaCha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/cha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/comple&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIComple&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dlerWOApi)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;079&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/ge&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nerat&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ive_a&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(A&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;werBasedO&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;TheCo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nte&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;080&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/cha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/comple&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIComple&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;080&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/v&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/models&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIModelsV&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;080&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/versio&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(ApiVersio&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;080&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/v&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/respo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nses&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIRespo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nses&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;080&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/pi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Pi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;081&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/respo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nses&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIRespo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nses&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;081&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/co&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;versa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h_model&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Co&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;versa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;hModel)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;081&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/crea&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;full&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_ar&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;icle_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;fr&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;om_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(FullAr&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;icleFromTex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;081&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/ex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ten&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ded_co&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;versa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h_model&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Ex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ten&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dedCo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;versa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;hModel)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;081&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/ge&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nerate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_ar&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;icle_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;fr&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;om_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Ge&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nerate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;NewsFromTex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;081&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;translate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Tra&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nslate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Tex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;082&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/simpli&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;y_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Simpli&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;yTex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;082&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ta&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;gs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(OllamaTagsHa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;082&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/ge&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nerate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_ques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Ge&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nerate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;FromTex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;082&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/v&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/cha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/comple&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(LLMS&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tu&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dioCha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;082&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(OllamaHomeHa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;082&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;fast&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_mask&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Fas&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Tex&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Maski&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;083&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/v&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/cha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/comple&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(VllmCha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Comple&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;083&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/v&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/models&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(LmS&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tu&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dioModelsHa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;083&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/models&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(Ope&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;AIModelsHa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;083&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tere&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dpoi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;POST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/api/cha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(OllamaCha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ha&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dler)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;083&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.core.me&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Prome&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;heus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;prepari&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;me&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ics&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;reques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;hooks&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;083&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.core.me&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Prome&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;heus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;regis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;me&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ics&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;reques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;hooks&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147288&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;S&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tart&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;gu&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;icor&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;23.0.0&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147288&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Lis&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ten&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tt&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//0.0.0.0:8080 (147288)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147288&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Usi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;worker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;hread&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147296&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Boo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;worker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147296&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147297&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Boo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;worker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147297&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147298&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Boo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;worker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147298&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147299&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;INFO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Boo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;worker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;147299&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2026-01-01&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;066&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;DEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;llm_rou&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ter&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_api.core.lb.provider_s&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;trate&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;gy_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;fa&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;cade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;provider&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;mo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;p&gt;The log contains information from DEBUG mode, so there’s quite a lot of it. This is the default logging level, which can be changed at any time.&lt;/p&gt;
&lt;h2 id=&#34;sample-configuration-ollama-gptoss120b&#34;&gt;&lt;strong&gt;Sample configuration: Ollama + gpt‑oss:120b&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#sample-configuration-ollama-gptoss120b&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Now we’ll move on to installing Ollama with the 120‑billion‑parameter model (gpt‑oss:120b) made available. The model is quite large, requiring three RTX cards with 24 GB of VRAM each. Ollama can run this model very well on three cards while maintaining almost full context‑length support.&lt;/p&gt;
&lt;p&gt;We stop the running LLM Router instance (CTRL +C) and install Ollama—the installation is straightforward; just invoke the official installation script from the console:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fsSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://ollama.com/install.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After a short while (depending on your internet connection), Ollama will be ready and you need to load a local model onto it. A detailed guide on how to do this locally is available on the model’s page: &lt;a href=&#34;https://ollama.com/library/gpt-oss&#34;&gt;https://ollama.com/library/gpt-oss&lt;/a&gt;. All you have to do is:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ollama run gpt-oss:120b
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After the download finishes, the model is immediately available in the local Ollama instance.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;gpt-oss:120b&lt;/code&gt; model available through Ollama is a quantized version of OpenAI’s gpt‑oss‑120b. Despite the heavy quantization, the model is still very large—it occupies roughly &lt;strong&gt;65 GB on disk&lt;/strong&gt; (and the same amount in GPU memory). Consequently, the USB drive must be sufficiently large to store the model locally (or you can mount an external drive that already contains the model).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;OPTION:&lt;/strong&gt; If the model has already been downloaded and is available over the network, you can attach the model from a network drive instead of copying it to a USB stick. Below is an example of how to run the model on three GPUs when the model is stored on a network share (e.g., via nfs) from a directory &lt;code&gt;/mnt/data2/llms/models/ollama/.ollama/models/&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;CUDA_VISIBLE_DEVICES=0,1,2 \
  OLLAMA_NOPRUNE=true \
  OLLAMA_CONTEXT_LENGTH=128000 \
  OLLAMA_MODELS=/mnt/data2/llms/models/ollama/.ollama/models/ \
  OLLAMA_HOST=0.0.0.0 \
  ollama serve
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To see which models are available in Ollama, simply run the command &lt;code&gt;ollama list&lt;/code&gt;. For example, in our setup (with a mounted network drive):&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@HiveOS:/home/user/llm-router# ollama list
NAME                           ID              SIZE      MODIFIED
dolphin-mistral:latest         5dc8c5a2be65    4.1 GB    5 days ago
dolphin3:8b                    d5ab9ae8e1f2    4.9 GB    6 days ago
devstral-2:latest              524a6607f0f5    74 GB     6 days ago
devstral-2:123b                524a6607f0f5    74 GB     6 days ago
deepseek-r1:70b                d37b54d01a76    42 GB     4 weeks ago
gemini-3-pro-preview:latest    91a1db042ba1    -         4 weeks ago
gpt-oss:120b-ctx32k-rope       c265a9f5b5de    65 GB     7 weeks ago
gpt-oss:120b-ctx250k           964592b444fd    65 GB     7 weeks ago
glm-4.6:cloud                  05277b76269f    -         8 weeks ago
qwen3-coder:30b                06c1097efce0    18 GB     2 months ago
qwen3:235b                     72840bddff91    142 GB    3 months ago
gpt-oss:120b                   f7f8e2f8f4e0    65 GB     4 months ago
gpt-oss:20b                    aa4295ac10c3    13 GB     4 months ago
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id=&#34;llm-router-configuration-for-gptoss120b&#34;&gt;LLM Router Configuration for gpt‑oss:120b&lt;a class=&#34;headerlink&#34; href=&#34;#llm-router-configuration-for-gptoss120b&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Alright, we now have the system set up, the router downloaded, and the model loaded into Ollama. It’s time to connect the model to the router. The previous commands start the model on the same machine where the llm‑router is running. To simplify the demonstration, we also provide a ready‑made configuration file that can be plugged into the router (it will overwrite the default configuration file):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can either edit the startup script run‑rest‑api‑gunicorn.sh and change the default path to the configuration (the variable LLM_ROUTER_MODELS_CONFIG ),&lt;/li&gt;
&lt;li&gt;or, even more simply, pass the path to the prepared configuration when launching the router process. In other words, just issue the following command:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;LLM_ROUTER_MODELS_CONFIG=resources/configs/specific/models-config-local-ollama.json ./run-rest-api-gunicorn.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That’s basically it 🙂 You can now query the router by specifying the model name. Here’s an example using &lt;code&gt;curl&lt;/code&gt; with JSON formatting via &lt;code&gt;jq&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-X&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;POST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://localhost:8080/v1/chat/completions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-H&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Content-Type: application/json&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;{&amp;quot;model&amp;quot;: &amp;quot;gpt-oss:120b&amp;quot;, &amp;quot;messages&amp;quot;: [{&amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;Cześć&amp;quot;}]}&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jq
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;which should produce a result similar to:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/5e76e1b9bc-480.webp 480w, /assets/img/5e76e1b9bc-768.webp 768w, /assets/img/5e76e1b9bc-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/5e76e1b9bc.png&#34; alt=&#34;&#34; width=&#34;1248&#34; height=&#34;740&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&#34;outro&#34;&gt;Outro&lt;a class=&#34;headerlink&#34; href=&#34;#outro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These few steps are enough to get the LLM Router up and running on typical cryptocurrency‑mining hardware and operating systems, leveraging those resources. Of course, this is just an example; the repository contains many more model configurations and ways to connect to various local providers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Miners, this is your second chance! 🙂&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Happy New Year! Take care of your data and avoid sending sensitive information to the cloud!&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Can a knowledge base be easily introduced for GenAI?</title>
    <link href="https://radlab.dev/en/2025-12-27/can-a-knowledge-base-be-easily-introduced-for-genai/"/>
    <id>https://radlab.dev/en/2025-12-27/can-a-knowledge-base-be-easily-introduced-for-genai/</id>
    <updated>2025-12-27T00:00:00Z</updated>
    <published>2025-12-27T00:00:00Z</published>
    <summary>Absolutely—just plug langchain_rag into the llm-router 😉 Intro Hello! Today we are showing additional capabilities of the LLM Router in the form of plugins,…</summary>
    <content type="html">&lt;p&gt;Absolutely—just plug &lt;code&gt;langchain_rag&lt;/code&gt; into the &lt;code&gt;llm-router&lt;/code&gt; 😉&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/1643f5479d-480.webp 480w, /assets/img/1643f5479d-768.webp 768w, /assets/img/1643f5479d-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/1643f5479d.jpeg&#34; alt=&#34;&#34; width=&#34;1152&#34; height=&#34;896&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;a class=&#34;headerlink&#34; href=&#34;#intro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Hello! Today we are showing additional capabilities of the LLM Router in the form of plugins, actually just one plugin &lt;code&gt;langchain_rag&lt;/code&gt;. This is a plugin that creates a local knowledge base from the content provided during the indexing process. It uses well‑known solutions such as &lt;code&gt;langchain&lt;/code&gt; to create a RAG system and &lt;code&gt;fais&lt;/code&gt; as a vector knowledge base. Then the created knowledge base can be attached to any query in the LLM Router, without modifying the application that currently uses generative models. What does this approach provide?&lt;/p&gt;
&lt;p&gt;The ability to automatically enrich the context passed to the generative model — i.e., the standard RAG approach. It is enough to index the documents you choose using the available CLI command &lt;code&gt;llm-router-rag-langchain index [OPTIONS]&lt;/code&gt; and all those contents are available to the generative model when generating a response.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What does this provide?
The ability to automatically enrich the context passed to the generative model — i.e., the standard RAG approach. It is enough to index the documents you choose using the available CLI command &lt;code&gt;llm-router-rag-langchain index [OPTIONS]&lt;/code&gt;, and all those contents are available to the generative model when generating a response.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;indexation&#34;&gt;Indexation&lt;a class=&#34;headerlink&#34; href=&#34;#indexation&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Data indexing is the step in which, from a given directory, files with specified extensions are stored in a local knowledge base. The &lt;strong&gt;knowledge‑base&lt;/strong&gt; plugin uses a loaded embedder model (by default configured as&lt;code&gt;google/embeddinggemma-300m&lt;/code&gt;) to create vector representations of chunked texts and saves them to a locally created &lt;strong&gt;FAISS vector database&lt;/strong&gt;. It is the user who chooses which &lt;strong&gt;documents&lt;/strong&gt; to use &lt;strong&gt;for&lt;/strong&gt; &lt;strong&gt;context enrichment&lt;/strong&gt; and in which collections they should be placed. This is an important step because the &lt;strong&gt;accuracy&lt;/strong&gt; of the &lt;strong&gt;generative model’s&lt;/strong&gt; &lt;strong&gt;responses&lt;/strong&gt; depends on the content of this &lt;strong&gt;database&lt;/strong&gt;. Despite its importance, the &lt;strong&gt;process&lt;/strong&gt; is very &lt;strong&gt;simple&lt;/strong&gt;. After installing llm‑router, a &lt;strong&gt;command&lt;/strong&gt; for handling the plugin’s knowledge base is available: &lt;code&gt;llm-router-rag-langchain&lt;/code&gt;. The command is installed in the CLI, so it is &lt;strong&gt;available&lt;/strong&gt; from any &lt;strong&gt;router&lt;/strong&gt; &lt;strong&gt;directory&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In today’s example we used all the descriptions from the main repository and sub‑repositories of LLM Router as the knowledge base:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Main llm-routera repository: md and txt files;&lt;/li&gt;
&lt;li&gt;Plugins repository (including the described plugin) – files in md , txt format;&lt;/li&gt;
&lt;li&gt;Services handling guardrails and maskers plugins – md and txt ;&lt;/li&gt;
&lt;li&gt;Repository with example tools using llm‑router – md and txt files;&lt;/li&gt;
&lt;li&gt;Dedicated graphical interfaces for Anonymizer and Configs Manager – also md and txt files;&lt;/li&gt;
&lt;li&gt;llm-router.cloud website – html , md , and txt files;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For simplicity we added a basic Bash script in which you only need to change the file types and indexing paths and, without modifying any other settings from the main router directory, issue the command [here &lt;a href=&#34;https://github.com/radlab-dev-group/llm-router/blob/main/scripts/llm-router-rag-langchain-index.sh&#34;&gt;full&lt;/a&gt; script]:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bash scripts/llm-router-rag-langchain-index.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Because of this, a local knowledge base will be saved in the default directory: &lt;code&gt;workdir/plugins/utils/rag/langchain/sample_collection/&lt;/code&gt;, which can then be attached as the knowledge base in the llm‑router.&lt;/p&gt;
&lt;h2 id=&#34;running-the-knowledge-base-in-llm-router&#34;&gt;Running the knowledge base in LLM Router&lt;a class=&#34;headerlink&#34; href=&#34;#running-the-knowledge-base-in-llm-router&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The knowledge base is loaded by default from the directory where the LLM Router is started, but the storage/load location can be set arbitrarily with the environment variable &lt;code&gt;LLM_ROUTER_LANGCHAIN_RAG_PERSIST_DIR&lt;/code&gt;. For the LLM Router to use the created knowledge base, the &lt;code&gt;langchain_rag&lt;/code&gt; plugin must be activated and the path to the created knowledge base must be set. After starting the router with such a configuration, every query to the generative model will be enriched with context from the attached knowledge base. Activating the plugin simply means exporting the environment variable with utils‑type plugins when launching the router (the default &lt;a href=&#34;https://github.com/radlab-dev-group/llm-router/blob/main/run-rest-api-gunicorn.sh&#34;&gt;scipt&lt;/a&gt;  allows modification).&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;export LLM_ROUTER_UTILS_PLUGINS_PIPELINE=&amp;quot;langchain_rag&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And that’s basically it—if you don’t modify parameters such as context size or the embedder, there’s nothing you need to change or configure—just index your own data 🙂 How it looks in practice. Below, in the screenshot, is the model’s response without the attached &lt;em&gt;langchain_rag&lt;/em&gt; plugin, with the indexed content:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/3cd4aa28a6-480.webp 480w, /assets/img/3cd4aa28a6-768.webp 768w, /assets/img/3cd4aa28a6-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/3cd4aa28a6.png&#34; alt=&#34;Obrazek posiada pusty atrybut alt - plik: image-4-926x1024.avif&#34; width=&#34;1046&#34; height=&#34;1157&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;And the response with the plugin attached:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/b977cda321-480.webp 480w, /assets/img/b977cda321-768.webp 768w, /assets/img/b977cda321-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/b977cda321.png&#34; alt=&#34;&#34; width=&#34;1046&#34; height=&#34;1157&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&#34;outro&#34;&gt;Outro&lt;a class=&#34;headerlink&#34; href=&#34;#outro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And to wrap up, here’s a console video showing how to index the mentioned content:&lt;/p&gt;
&lt;div class=&#34;embed embed-video&#34;&gt;&lt;video controls preload=&#34;none&#34; src=&#34;/en/blog/posts/can-a-knowledge-base-be-easily-introduced-for-genai/media/llm-router-rag-langchain-indexing.webm&#34;&gt;&lt;/video&gt;&lt;/div&gt;

&lt;p&gt;and switching the router to operate in knowledge‑base mode (the beginning of the video shows the router running without a knowledge base, the second part shows it running with an attached knowledge base):&lt;/p&gt;
&lt;div class=&#34;embed embed-video&#34;&gt;&lt;video controls preload=&#34;none&#34; src=&#34;/en/blog/posts/can-a-knowledge-base-be-easily-introduced-for-genai/media/llm-router-rag-langchain.webm&#34;&gt;&lt;/video&gt;&lt;/div&gt;

&lt;p&gt;Starring: &lt;em&gt;OpenWeb UI&lt;/em&gt; with the &lt;em&gt;LLM‑Router&lt;/em&gt; attached (with the &lt;em&gt;langchain_rag&lt;/em&gt; plugin &lt;em&gt;disabled&lt;/em&gt; and &lt;em&gt;enabled&lt;/em&gt;).
&lt;strong&gt;We encourage you to download, try it out, and share your impressions of using it 🙂&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related Products:&lt;/strong&gt; Knowledge-base context augmentation is natively supported via the plugin ecosystem of &lt;a href=&#34;/en/products/llm-router/&#34;&gt;LLM Router&lt;/a&gt;. You can also explore live demonstrations on &lt;a href=&#34;/en/products/playground/&#34;&gt;RDL Playground AI&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <title>Is it possible to break the laws of nature?</title>
    <link href="https://radlab.dev/en/2025-12-26/is-it-possible-to-break-the-laws-of-nature/"/>
    <id>https://radlab.dev/en/2025-12-26/is-it-possible-to-break-the-laws-of-nature/</id>
    <updated>2025-12-27T00:00:00Z</updated>
    <published>2025-12-26T00:00:00Z</published>
    <summary>I don’t know, although I have a feeling […] Hello everyone!Today we’re back after two months of intensive work on publishing the LLM Router. Here’s the earlier…</summary>
    <content type="html">&lt;p&gt;I don’t know, although I have a feeling [&lt;a href=&#34;https://www.youtube.com/watch?v=ZECKxkfKkY8&#34;&gt;…&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;Hello everyone!
Today we’re back after two months of intensive work on publishing the LLM Router. Here’s the earlier post:&lt;a href=&#34;https://en.radlab.dev/2025/10/23/llm-router-a-connector-between-an-application-and-generative-models/&#34;&gt; click&lt;/a&gt;.. A small project has turned into a sizable project, and its development—beyond just the coding side—has drawn in new contributors. In addition to &lt;a href=&#34;https://techsky.pl/&#34;&gt;Michała&lt;/a&gt; and &lt;a href=&#34;https://evaluation.pl/&#34;&gt;Bartka&lt;/a&gt;, &lt;a href=&#34;https://codee.dev/&#34;&gt;Krzysiek&lt;/a&gt; and &lt;a href=&#34;https://www.shgrowth.com/&#34;&gt;Maciek&lt;/a&gt;. have joined the effort. We’re building a solid set of skills … 😉&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/1d4c106c3b-480.webp 480w, /assets/img/1d4c106c3b-768.webp 768w, /assets/img/1d4c106c3b-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/1d4c106c3b.jpeg&#34; alt=&#34;&#34; width=&#34;1024&#34; height=&#34;1024&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;In today’s post we explain how to configure the LLM Router using the models that are available under the Apache 2.0 license. A huge thank‑you goes to the &lt;strong&gt;&lt;a href=&#34;https://speakleash.org/&#34;&gt;Speakleash&lt;/a&gt;&lt;/strong&gt; foundation, which, as part of its activities, has released two models that are perfect for use in the router. In this article we show how to plug in the models &lt;a href=&#34;https://huggingface.co/speakleash/Bielik-11B-v2.3-Instruct&#34;&gt;Bielik-11B-v2.3-Instruct&lt;/a&gt; “Bielik” and models &lt;a href=&#34;https://huggingface.co/speakleash/Bielik-Guard-0.1B-v1.0&#34;&gt;Bielik-Guard-0.1B-v1.0&lt;/a&gt; “Sójka” models so that they work together in the LLM Router. We also demonstrate an example of how 8 Bieliks and 5 Bielik-Guards can cooperate within a virtual ecosystem. 🙂&lt;/p&gt;
&lt;h2 id=&#34;eagles-and-jays-in-one-nest&#34;&gt;Eagles and jays in one nest&lt;a class=&#34;headerlink&#34; href=&#34;#eagles-and-jays-in-one-nest&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In nature the Eagle Bielik is a solitary predator that only pairs up during the breeding season. It does not allow foreign birds onto its territory. In the context of the jays the relationship is simple: predator – prey. However… that is “just” nature, and in the digital world we can do more.&lt;/p&gt;
&lt;h2 id=&#34;metaphor-of-the-natural-ecosystem&#34;&gt;Metaphor of the Natural Ecosystem&lt;a class=&#34;headerlink&#34; href=&#34;#metaphor-of-the-natural-ecosystem&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the digital world the name eagles is taken by the language model &lt;a href=&#34;https://huggingface.co/speakleash/Bielik-11B-v2.3-Instruct&#34;&gt;Bielik-11B-v2.3-Instruct&lt;/a&gt;, while the jays is represented by &lt;a href=&#34;https://huggingface.co/speakleash/Bielik-Guard-0.1B-v1.0&#34;&gt;Bielik-Guard-0.1B-v1.0&lt;/a&gt;, a guard‑rail type model. The nest is the &lt;a href=&#34;https://llm-router.cloud/&#34;&gt;LLM Router&lt;/a&gt;, which in its ecosystem imposes order and harmony, and the predator‑prey relationship disappears. On the contrary, these “species” start to form large flocks together, and unwanted wildlife is kept out.&lt;/p&gt;
&lt;p&gt;In the conglomerate of &lt;em&gt;Instruct and Guardrail models&lt;/em&gt;, supported by sensitive‑data masking techniques, we obtain an ideal solution for controlled use of generative language models. A locally‑run router lets you control the content sent to generative models. The “prey” from the natural world becomes the defender: the language model communicates with the application, while background masking mechanisms obscure sensitive data.&lt;/p&gt;
&lt;p&gt;This conglomerate is exactly the solution described today in the LLM Router 😉&lt;/p&gt;
&lt;h2 id=&#34;a-few-words-about-llm-router&#34;&gt;A few words about LLM Router&lt;a class=&#34;headerlink&#34; href=&#34;#a-few-words-about-llm-router&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;“The full description of LLM Router can be found on the home page &lt;a href=&#34;https://llm-router.cloud/&#34;&gt;llm-router.cloud&lt;/a&gt; and in the &lt;a href=&#34;https://en.radlab.dev/2025/10/23/llm-router-a-connector-between-an-application-and-generative-models/&#34;&gt;previous blog post&lt;/a&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;LLM Router is an on‑premises solution whose purpose is to control and optimise traffic to generative models. Unlike most routers, we do &lt;strong&gt;not&lt;/strong&gt; optimise for API‑call cost; on the contrary, given a pool of providers (both local and cloud‑based) we aim to distribute the traffic so that response times are as short as possible.&lt;/p&gt;
&lt;p&gt;During the whole process additional steps are performed, such as checking the outgoing content for ethical compliance and for the presence of sensitive data. Ethical correctness of the transmitted content is enforced by &lt;strong&gt;guard‑rail&lt;/strong&gt; mechanisms: when an incident is detected the conversation/message is automatically blocked, an audit record is created, no payload is sent to the generative model, and the application receives a notification that the content has been blocked and the dialogue cannot continue.&lt;/p&gt;
&lt;p&gt;Masking mechanisms run in the background and are responsible for obscuring sensitive information before it reaches the generative model. This mechanism does &lt;strong&gt;not&lt;/strong&gt; block the message; instead it replaces the payload on‑the‑fly with a masked version, logs an audit entry for the detected incident, and forwards the masked message to the generative model.&lt;/p&gt;
&lt;p&gt;All of this is configurable via the appropriate settings of the launched router.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;eagles-and-jays-in-llm-router&#34;&gt;Eagles and jays in LLM Router&lt;a class=&#34;headerlink&#34; href=&#34;#eagles-and-jays-in-llm-router&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To enable the aforementioned ecosystem to operate correctly, we must properly prepare this environment. For this purpose we need several components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/radlab-dev-group/llm-router&#34;&gt;llm-router&lt;/a&gt; – the core traffic‑coordination ecosystem (a detailed description is available on gitgubie end www );&lt;/li&gt;
&lt;li&gt;llm-router-services – services in which guardrail‑type models are run (example with Bielik-Guard );&lt;/li&gt;
&lt;li&gt;model Bielik-11B-v2.3-Instruct – a Polish generative model;&lt;/li&gt;
&lt;li&gt;model Bielik-Guard-0.1B-v1.0 – a guardrail model operating on Polish‑language texts;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next, the individual components simply need to be assembled in one place – the LLM Router configuration. To keep this entry from becoming too long, we have uploaded all configurations to GitHub: [&lt;a href=&#34;https://github.com/radlab-dev-group/llm-router-utils/tree/main/resources/llm-router-speakleash&#34;&gt;click&lt;/a&gt;], where we also placed a complete description of all steps. In short, however:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start the serwice with guard (five “jays” simultaneously monitor the content);&lt;/li&gt;
&lt;li&gt;Launch Bielik on vLLM (8 providers with the same model), on GPUs cuda:0 , cuda:1 , cuda:2 ;&lt;/li&gt;
&lt;li&gt;Configure and start the LLM Router;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In the provided example we initiated the process of &lt;a href=&#34;https://github.com/radlab-dev-group/llm-router/tree/main/llm_router_api/core/auditor&#34;&gt;auditing&lt;/a&gt; and blocking prohibited content, as well as auditing and masking sensitive data using the built‑in &lt;strong&gt;fast_masker&lt;/strong&gt; mechanism (description of the masking rules and their implementations in the router plugins).&lt;/p&gt;
&lt;h2 id=&#34;overview-of-the-ecosystem&#34;&gt;Overview of the ecosystem&lt;a class=&#34;headerlink&#34; href=&#34;#overview-of-the-ecosystem&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Below are screenshots of &lt;code&gt;nvitopa&lt;/code&gt; running on each host, along with a view of the API console.&lt;/p&gt;
&lt;p&gt;Host Lab2 with three “Bielik” models running (in vLLM)&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/b1b4f0e891-480.webp 480w, /assets/img/b1b4f0e891-768.webp 768w, /assets/img/b1b4f0e891-1024.webp 1024w, /assets/img/b1b4f0e891-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/b1b4f0e891.png&#34; alt=&#34;&#34; width=&#34;2504&#34; height=&#34;1339&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Host Lab3 also has three “Bielik” (vLLM) models running.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/a5bec4fd41-480.webp 480w, /assets/img/a5bec4fd41-768.webp 768w, /assets/img/a5bec4fd41-1024.webp 1024w, /assets/img/a5bec4fd41-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/a5bec4fd41.png&#34; alt=&#34;&#34; width=&#34;2504&#34; height=&#34;1339&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Host Lab4 with two “Bielik” models (vLLM)&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/9cfd20e948-480.webp 480w, /assets/img/9cfd20e948-768.webp 768w, /assets/img/9cfd20e948-1024.webp 1024w, /assets/img/9cfd20e948-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/9cfd20e948.png&#34; alt=&#34;&#34; width=&#34;2504&#34; height=&#34;1339&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Host with router API (4 gunicorn workers, 16 threads each) and five “Sójki” (5 gunicorn workers on cuda:0)&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/e11de203a6-480.webp 480w, /assets/img/e11de203a6-768.webp 768w, /assets/img/e11de203a6-1024.webp 1024w, /assets/img/e11de203a6-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/e11de203a6.png&#34; alt=&#34;&#34; width=&#34;2504&#34; height=&#34;1339&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;The environment configured this way is ready to handle dozens of requests 🙂 For performance testing we prepared a simple application whose job is to translate a given text into Polish. For this we used the built‑in endpoint from llm‑router  &lt;code&gt;/api/translate&lt;/code&gt;and the dataset to translate, which is &lt;a href=&#34;https://huggingface.co/datasets/marmikpandya/mental-health&#34;&gt;marmikpandya/mental-health&lt;/a&gt;  available on Hugging Face. To run the test we used the &lt;a href=&#34;https://github.com/radlab-dev-group/llm-router-utils/blob/main/run-text-translator.sh&#34;&gt;run-text-translator.sh&lt;/a&gt;  script from the &lt;a href=&#34;https://github.com/radlab-dev-group/llm-router-utils&#34;&gt;utilsami&lt;/a&gt; repository; after installing the library the CLI command&lt;code&gt;translate-texts&lt;/code&gt; becomes available.&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;See: translate-texts –help&lt;/summary&gt;&lt;div&gt;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;$ translate-texts --help
usage: translate-texts [-h] --llm-router-host LLM_ROUTER_HOST --model MODEL --dataset-path DATASET_PATH [--dataset-type {json,jsonl}] [--accept-field ACCEPT_FIELD] [--num-workers NUM_WORKERS] [--batch-size BATCH_SIZE]

options:
  -h, --help            show this help message and exit
  --llm-router-host LLM_ROUTER_HOST
                        Base URL of the LLM router service (e.g., http://localhost:port)
  --model MODEL         Model name to use for translation (e.g., speakleash/Bielik-11B-v2.3-Instruct)
  --dataset-path DATASET_PATH
                        Path to a dataset file. This option can be provided multiple times to process several files.
  --dataset-type {json,jsonl}
                        Explicit type of dataset files (json or jsonl). If omitted, the type is inferred from each file&#39;s extension.
  --accept-field ACCEPT_FIELD
                        Name of a field to retain from each record. Can be supplied multiple times; if omitted all fields are kept.
  --num-workers NUM_WORKERS
                        Number of worker threads for parallel translation (default: 1 – runs sequentially).
  --batch-size BATCH_SIZE
                        How many texts to send in a single request to the router (default: 8).
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;

&lt;p&gt;In the video below we demonstrate the router’s operation together with the models mentioned earlier.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First 0–3 seconds: a view of the API machine (top part) from the llm‑router, the lower‑left area shows the running service with the jays “Sójki”, and the lower‑right area displays an nvitop view of the GPU cores.&lt;/li&gt;
&lt;li&gt;Seconds 3–6: a view of the Lab4 machine with two eagles Bielik instances (vLLMs running on the left side, and a GPU‑utilization monitor on the right).&lt;/li&gt;
&lt;li&gt;Seconds 6–10: a view of the Lab3 machine with three eagles Bielik instances.&lt;/li&gt;
&lt;li&gt;Seconds 11–13: a similar view showing the load on the Lab2 machine (three Bielik instances).&lt;/li&gt;
&lt;li&gt;Subsequent seconds: switching between the machines, and the final segment returns to a view of the API machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;embed embed-video&#34;&gt;&lt;video controls preload=&#34;none&#34; src=&#34;/en/blog/posts/is-it-possible-to-break-the-laws-of-nature/media/llm-router-bielik-sojka.webm&#34;&gt;&lt;/video&gt;&lt;/div&gt;

&lt;p&gt;During operation, the masking and prohibited‑content detection mechanism caught the cases it masked, blocked, and audited to a file (the logs contain entries like &lt;code&gt;[AUDIT]************&lt;/code&gt;). The audited content is written to a dedicated directory (separate from the main logs) and encrypted with a GPG public key. The data can be decrypted only with the corresponding private key. In the video below we show how the logs (files with the &lt;code&gt;.audit&lt;/code&gt; extension) are stored and how to decrypt them using the decryption script provided in the llm‑router repository (&lt;code&gt;scripts/decrypt_auditor_logs.sh&lt;/code&gt;). Here is the result of running the command.&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scripts/decrypt_auditor_logs.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;with an additional password set on the decryption key&lt;/p&gt;
&lt;div class=&#34;embed embed-video&#34;&gt;&lt;video controls preload=&#34;none&#34; src=&#34;/en/blog/posts/is-it-possible-to-break-the-laws-of-nature/media/llm-router-bielik-sojka-audit-log.webm&#34;&gt;&lt;/video&gt;&lt;/div&gt;

&lt;h2 id=&#34;outro&#34;&gt;Outro&lt;a class=&#34;headerlink&#34; href=&#34;#outro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this way order has been restored in the virtual world. The “Sójki” guard the content sent to generative models, the “Bieliki” generate the output, the masking mechanisms hide sensitive information, and the auditors continuously monitor everything for security.&lt;/p&gt;
&lt;p&gt;We certainly encourage you to download and test the solution! Everything is available under the Apache 2.0 license. Happy masking! 😉&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Llm-Router- a connector between an application and generative models</title>
    <link href="https://radlab.dev/en/2025-10-23/llm-router-a-connector-between-an-application-and-generative-models/"/>
    <id>https://radlab.dev/en/2025-10-23/llm-router-a-connector-between-an-application-and-generative-models/</id>
    <updated>2025-10-24T00:00:00Z</updated>
    <published>2025-10-23T00:00:00Z</published>
    <summary>This time, we’re introducing a project that we’ve been using internally for a while. Given its high versatility, it might be useful to others as well. We…</summary>
    <content type="html">&lt;p&gt;This time, we’re introducing a project that we’ve been using internally for a while. Given its high versatility, it might be useful to others as well. We encourage you to try it out and report any issues you encounter 🙂&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/e4666b00f7-480.webp 480w, /assets/img/e4666b00f7-768.webp 768w, /assets/img/e4666b00f7-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/e4666b00f7.png&#34; alt=&#34;&#34; width=&#34;1024&#34; height=&#34;796&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;In the following part, we’ll briefly describe the contents of the repository, how to run the ready-made image (yes, just download and run :)), and an example configuration. In the &lt;a href=&#34;https://github.com/radlab-dev-group/llm-router/blob/main/README.md&#34;&gt;README&lt;/a&gt; on &lt;a href=&#34;https://github.com/radlab-dev-group&#34;&gt;Github&lt;/a&gt;, we covered the project from a technical angle; here, we’re focusing more on usage.&lt;/p&gt;
&lt;h2 id=&#34;login&#34;&gt;Login&lt;a class=&#34;headerlink&#34; href=&#34;#login&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We’ve publicly shared the llm-router project on &lt;a href=&#34;https://github.com/radlab-dev-group/llm-router&#34;&gt;GitHub&lt;/a&gt;. This solution works like a router in the networking world, with one key difference: routing in &lt;strong&gt;llm-router happens between the user&lt;/strong&gt; and &lt;strong&gt;generative models&lt;/strong&gt;. Just as a router receives a message, processes it, knows where to forward it, and sends a response back to the user, our llm-router receives a query from the user specifying which model they’d like to use. It then routes the query to the appropriate model (it knows their locations), processes the model’s output, and returns the final response to the user. In short, the user doesn’t need to worry about where a model is running—they just need to know the model’s name and send the query to llm-router.&lt;/p&gt;
&lt;h2 id=&#34;supernova-explosion&#34;&gt;Supernova explosion&lt;a class=&#34;headerlink&#34; href=&#34;#supernova-explosion&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What can llm-router be used for? It’s a solution available via a REST API that manages traffic between an application and a generative model. It does this in such a way that the user/&lt;strong&gt;application doesn’t need&lt;/strong&gt; to know the &lt;strong&gt;model’s location,&lt;/strong&gt; connection parameters, and, more importantly, &lt;strong&gt;doesn’t store private keys&lt;/strong&gt; for external generative model services (like OpenAI or Google). This is because all the model handling logic resides on the llm-router side. You just need to connect a list of external models to it, and the router will take care of the appropriate routing. It doesn’t matter whether the model is running locally, for instance using VLLM, LMStudio, or Ollama, or if it’s publicly available in the cloud.&lt;/p&gt;
&lt;p&gt;Currently, all APIs that implement the Ollama or OpenAI standard are supported. Moreover, the router can &lt;strong&gt;handle traffic between different standards&lt;/strong&gt; (including streaming). Even if a user has been using Ollama so far, they can stick with that standard and, without modifying their application code, use llm-router to send a query to an API like VLLM. This greatly simplifies deploying models in production.&lt;/p&gt;
&lt;p&gt;Additionally, the &lt;strong&gt;predefined endpoints&lt;/strong&gt; (&lt;a href=&#34;https://github.com/radlab-dev-group/llm-router?tab=readme-ov-file#%EF%B8%8F-endpoints-overview&#34;&gt;click&lt;/a&gt;), which can be freely &lt;strong&gt;extended and new ones added&lt;/strong&gt;, &lt;strong&gt;significantly streamline&lt;/strong&gt; the software &lt;strong&gt;development proces&lt;/strong&gt;s. The same functionality that would have to be coded into the application (and would only be available there) can now be implemented on the llm-router side, as a &lt;strong&gt;central access node&lt;/strong&gt;. This simplifies introducing fixes, new features, and managing them. These dedicated endpoints can be thought of as &lt;strong&gt;agents performing&lt;/strong&gt; specific &lt;strong&gt;functions.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configuration flexibility&lt;/strong&gt; also allows for &lt;strong&gt;naming models arbitrarily&lt;/strong&gt;. For example, from the application’s perspective, the model it queries might be named &lt;code&gt;model_generatywny&lt;/code&gt;, and this name is then resolved to the correct model and host by the llm-router (the recording below shows an example of how this can work – &lt;strong&gt;the application doesn’t know which model it’s running&lt;/strong&gt;).&lt;/p&gt;
&lt;h2 id=&#34;a-box-of-building-blocks&#34;&gt;&lt;strong&gt;A box of building blocks&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#a-box-of-building-blocks&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And inside the box, there are two smaller boxes: one with an assembled toy and the other with actual building blocks. Let’s start with the toy, which is a publicly available image on &lt;strong&gt;&lt;a href=&#34;https://quay.io/organization/radlab&#34;&gt;quay&lt;/a&gt;&lt;/strong&gt; that can be downloaded and run without building. We only need to configure the models we have access to or are currently using. The process of downloading and running the image is very simple: just have Docker installed on your system and download the ready-made image from our Quay repository. To download the image, just run:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5555&lt;/span&gt;:8080&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quay.io/radlab/llm-router:rc1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and update to the latest version:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pull&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quay.io/radlab/llm-router:rc1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After downloading, t&lt;strong&gt;he image will run automatically&lt;/strong&gt; and expose the llm-router &lt;strong&gt;API&lt;/strong&gt; in its simplest Flask-based version on port 5555. The flag &lt;code&gt;-p 5555:8080&lt;/code&gt; means we’re forwarding port 8080 from inside the Docker container (where the router runs) to port 5555, accessible externally. The base server is Flask, so before scaling up (especially for streaming), we recommend reviewing &lt;a href=&#34;https://github.com/radlab-dev-group/llm-router?tab=readme-ov-file#3%EF%B8%8F%E2%83%A3-optional-configuration-via-environment&#34;&gt; &lt;/a&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/radlab-dev-group/llm-router?tab=readme-ov-file#3%EF%B8%8F%E2%83%A3-optional-configuration-via-environment&#34;&gt;configuration via environment variables &lt;/a&gt;&lt;/strong&gt; and considering deployment with Gunicorn (with a set worker count, log level, etc.). To run llm-router with a custom config, simply mount it into the image to override the default config located at &lt;code&gt;/srv/llm-router/resources/configs/models-config.json&lt;/code&gt;. Pass the &lt;code&gt;-v&lt;/code&gt; parameter to Docker like this:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;-v sciezka/do/lokalnego/pliku/models.json:/srv/llm-router/resources/configs/models-config.json
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now, the building blocks… The instructions are available in the &lt;a href=&#34;https://github.com/radlab-dev-group/llm-router/blob/main/README.md&#34;&gt;README&lt;/a&gt; (along with a &lt;a href=&#34;https://github.com/radlab-dev-group/llm-router/blob/main/llm_router_api/endpoints/README-pl.md&#34;&gt;Polish&lt;/a&gt; description featuring an example advanced endpoint you can add to llm-router yourself), so we won’t repeat that here. However, the key takeaway is how the configuration file is structured. Below, in “Something for the eye,” we’ve included a sample JSON configuration for three models:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;google/vllm : This is the google/gemma-3-12b-it model running on the local network ( http://192.168.100.79:7000/ ), launched via VLLM.&lt;/li&gt;
&lt;li&gt;google/chmura : This is actually the gemini-2.5-flash-lite model accessible through Google’s cloud API https://generativelanguage.googleapis.com/v1beta/openai , for which you’ll need to insert your API key ( PUT YOUR API KEY HERE ).&lt;/li&gt;
&lt;li&gt;openai/model : This is the gpt-oss:120b model running on the local network &lt;a href=&#34;http://192.168.100.66:11434&#34;&gt;http://192.168.100.66:11434&lt;/a&gt; , launched via Ollama.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;something-for-the-eyes&#34;&gt;Something for the Eyes&lt;a class=&#34;headerlink&#34; href=&#34;#something-for-the-eyes&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The video below contains several screens: the &lt;em&gt;top left corner&lt;/em&gt; shows a view of VLLM with google/gemma3-12b-it, the &lt;em&gt;bottom left corner&lt;/em&gt; shows Ollama with the gpt-oss:120b model, the &lt;em&gt;bottom right corner&lt;/em&gt; is a console with the running llm-router, and the &lt;em&gt;top right corner&lt;/em&gt; is the &lt;a href=&#34;https://www.jetbrains.com/ai/&#34;&gt;AI Assistant&lt;/a&gt; plugin for PyCharm. By default, the plugin allows connecting to one model provider, whereas connecting the llm-router allows injecting any standard, even one not natively supported by the application. Additionally, the video shows how you can change model names so that the application side doesn’t know which model is underneath. Meanwhile, in the console at the bottom, you can see how the llm-router receives requests and routes them to the appropriate host:&lt;/p&gt;
&lt;div class=&#34;embed embed-video&#34;&gt;&lt;video controls preload=&#34;none&#34; src=&#34;/en/blog/posts/llm-router-a-connector-between-an-application-and-generative-models/media/pycharm-llm-router.webm&#34;&gt;&lt;/video&gt;&lt;/div&gt;

&lt;p&gt;The configuration used to start Llm-Router:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;google_models&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;google/vllm&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;api_host&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;http://192.168.100.79:7000/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;api_token&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;api_type&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;vllm&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;input_size&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4096&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;model_path&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;google/gemma-3-12b-it&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;google/chmura&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;api_host&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://generativelanguage.googleapis.com/v1beta/openai/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;api_token&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;PUT YOUR API KEY HERE&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;api_type&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;openai&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;input_size&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;512000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;model_path&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;gemini-2.5-flash-lite&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;openai_models&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;openai/model&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;api_host&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;http://192.168.100.66:11434&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;api_token&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;api_type&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ollama&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;input_size&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;256000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;model_path&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;gpt-oss:120b&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;active_models&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;google_models&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;google/vllm&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;google/chmura&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;openai_models&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;openai/model&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And the full script with Docker startup (what is run in the terminal in the video — i.e., full configuration and change of all default parameters :)):&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&#34;nv&#34;&gt;PWD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;

docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5555&lt;/span&gt;:8080&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_TIMEOUT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;500&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_IN_DEBUG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_MINIMUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_EP_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/api&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_SERVER_TYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gunicorn&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_SERVER_PORT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_SERVER_WORKERS_COUNT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_DEFAULT_EP_LANGUAGE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;pl&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_LOG_FILENAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;llm-proxy-rest.log&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_EXTERNAL_TIMEOUT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_MODELS_CONFIG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/srv/cfg.json&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LLM_ROUTER_PROMPTS_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/srv/prompts&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PWD&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/resources/configs/models-config-names.json&amp;quot;&lt;/span&gt;:/srv/cfg.json&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PWD&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/resources/prompts&amp;quot;&lt;/span&gt;:/srv/prompts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;quay.io/radlab/llm-router:rc1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id=&#34;logout&#34;&gt;Logout&lt;a class=&#34;headerlink&#34; href=&#34;#logout&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One of the places where Llm-Router is running is our playground.&lt;/p&gt;
&lt;p&gt;Every generative model functionality is programmed as a dedicated endpoint in llm-router. We’re sharing the code under the Apache 2.0 license—so you can use it commercially and non-commercially. Enjoy! 😊&lt;/p&gt;
&lt;p&gt;We encourage you to try it out and share your suggestions and feedback.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update (v1.1+ Release):&lt;/strong&gt; The planned features (6 advanced Load Balancing strategies, Redis-backed sliding-window Rate Limiting, Prometheus metrics, and the PII / NASK &amp;amp; Sójka guardrail plugin pipeline) are now fully available! Explore the &lt;a href=&#34;/en/products/llm-router/&#34;&gt;full LLM Router product page&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <title>We make the codes publicly available – open source.</title>
    <link href="https://radlab.dev/en/2025-09-27/we-make-the-codes-publicly-available-open-source/"/>
    <id>https://radlab.dev/en/2025-09-27/we-make-the-codes-publicly-available-open-source/</id>
    <updated>2025-09-28T00:00:00Z</updated>
    <published>2025-09-27T00:00:00Z</published>
<category term="github"/><category term="huggingface"/><category term="llm"/><category term="method"/><category term="ml"/><category term="python"/><category term="transformers"/>    <summary>Hello! Today we will describe the technical aspects. Over the past month, we have been working on publishing some of our solutions. Today we would like to…</summary>
    <content type="html">&lt;p&gt;Hello! Today we will describe the technical aspects. Over the past month, we have been working on &lt;a href=&#34;https://github.com/radlab-dev-group&#34;&gt;publishing&lt;/a&gt; some of our solutions. Today we would like to present a few of them. Some of them are working mechanisms on the &lt;a href=&#34;https://playground.radlab.dev/&#34;&gt;playground&lt;/a&gt;, others are ideas implemented “on the side.” We have returned to the idea of developing solutions completely publicly on &lt;a href=&#34;https://github.com/radlab-dev-group&#34;&gt;GitHub&lt;/a&gt;. Therefore, we invite you to visit our GitHub profile, which we briefly present in this post 😉&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/6caffeb267-480.webp 480w, /assets/img/6caffeb267-768.webp 768w, /assets/img/6caffeb267-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/6caffeb267.png&#34; alt=&#34;&#34; width=&#34;1024&#34; height=&#34;796&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Below are the projects with brief descriptions. Each of them has a fairly extensive README file on  &lt;a href=&#34;https://github.com/radlab-dev-group&#34;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;relgat-projector-from-the-side&#34;&gt;relgat – projector (“from the side”)&lt;a class=&#34;headerlink&#34; href=&#34;#relgat-projector-from-the-side&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The repository (&lt;a href=&#34;https://github.com/radlab-dev-group/relgat-projector&#34;&gt;clic&lt;/a&gt;) contains a proprietary implementation of link-prediction mechanisms based on semantic graphs. The idea was to recreate semantic relationships and enable the creation of new representations based on existing ones. We assume that nodes in the graph have a semantic description (e.g., using &lt;em&gt;embedding&lt;/em&gt;), while edges have no description but are distinguishable from each other. The &lt;em&gt;edge label&lt;/em&gt; in such a graph denotes the &lt;em&gt;name of the relation&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The method enables learning transformation matrices for edges in the graph based on the node environment. The model simultaneously learns the transformations of each relation separately and learns to define nodes based on those existing in the graph. A node is defined by its neighborhood (input); we assume that what enters a given node defines it. Unlike standard RelGAT, we do not learn the entire network—we learn transformations of the base space to the same space in such a way that for [&lt;code&gt;A -&amp;gt; rel1 -&amp;gt; B&lt;/code&gt;], [&lt;code&gt;C -&amp;gt; rel2 -&amp;gt; B&lt;/code&gt;] we look for transformations &lt;code&gt;rel1&lt;/code&gt; i &lt;code&gt;rel2&lt;/code&gt; o that the combination of embeddings &lt;code&gt;A&lt;/code&gt; i &lt;code&gt;C&lt;/code&gt; gives embedding &lt;code&gt;B&lt;/code&gt;. By additionally using evaluation by metrics such as &lt;em&gt;hits@X&lt;/em&gt; as loss functions, we additionally learn link prediction. This will make it possible to transform any vector &lt;code&gt;X&lt;/code&gt; from the learned space) using a transformation matrix &lt;code&gt;M&lt;/code&gt; (e.g., by activating specific relations) in such a way as to obtain vector &lt;code&gt;X&lt;/code&gt;‘ in the same space, but after transformation by relations.&lt;/p&gt;
&lt;p&gt;We have already completed a series of experiments (the charts show the latest stable training sessions) and so far (according to the charts) it looks promising 😉&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/36310f66e9-480.webp 480w, /assets/img/36310f66e9-768.webp 768w, /assets/img/36310f66e9-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/36310f66e9.png&#34; alt=&#34;&#34; width=&#34;1024&#34; height=&#34;467&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/608a0d71fd-480.webp 480w, /assets/img/608a0d71fd-768.webp 768w, /assets/img/608a0d71fd-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/608a0d71fd.png&#34; alt=&#34;&#34; width=&#34;1024&#34; height=&#34;162&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&#34;plwordnet-from-the-side&#34;&gt;&lt;a href=&#34;https://github.com/radlab-dev-group/plwordnet&#34;&gt;plwordnet&lt;/a&gt; (“from the side”)&lt;a class=&#34;headerlink&#34; href=&#34;#plwordnet-from-the-side&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This repository (&lt;a href=&#34;https://github.com/radlab-dev-group/plwordnet&#34;&gt;clic&lt;/a&gt;) can be used to operate on the Polish and English &lt;a href=&#34;http://plwordnet.pwr.wroc.pl/wordnet/&#34;&gt;Wordnet&lt;/a&gt; (Wordnet – Polish, Princeton Wordnet – English). Although it is not currently used only for browsing wordnet’s, it is primarily a mechanism for creating data sets. A method for creating embeddings for semantic graph nodes is implemented there. It contains the entire process from downloading Wordnet, preparing data for further processing, to: creating&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a semantic embedder,&lt;/li&gt;
&lt;li&gt;embedding representations for the meanings of PLWordnet and Princeton Wordnet using this embedder.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the &lt;a href=&#34;https://huggingface.co/radlab&#34;&gt;huggingface&lt;/a&gt; platform we have published the first version of the  &lt;a href=&#34;https://huggingface.co/radlab/semantic-euro-bert-encoder-v1&#34;&gt;model&lt;/a&gt; (&lt;a href=&#34;https://huggingface.co/radlab/semantic-euro-bert-encoder-v1&#34;&gt;radlab/semantic-euro-bert-encoder-v1&lt;/a&gt;). It is a bilingual embedder model in which we used &lt;a href=&#34;https://huggingface.co/EuroBERT&#34;&gt;EuroBERT&lt;/a&gt; as the language model. Creating embedding representations is a multi-step process. First, representations are created for lexical units. Then, for those units for which no representation could be created but which are found in a synset that contains some representations, a (&lt;em&gt;fake&lt;/em&gt;) representation is created for the unit. Then, for each synset that has at least one representation of a unit, embedding representations are created as weighted averages of the embedding’s of the units. After this operation, not all units and synsets have definitions, which is why the &lt;a href=&#34;https://github.com/radlab-dev-group/relgat-projector&#34;&gt;relgat-projector&lt;/a&gt; is to be used, among other things, to transform a node without a representation but with some environment (synset or unit).&lt;/p&gt;
&lt;h2 id=&#34;ml-utils-from-the-side&#34;&gt;&lt;a href=&#34;https://github.com/radlab-dev-group/ml-utils&#34;&gt;ml-utils (“from the side”)&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#ml-utils-from-the-side&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Earlier libraries are based on &lt;a href=&#34;https://github.com/radlab-dev-group/ml-utils&#34;&gt;ml-utils&lt;/a&gt;. This is a library that simplifies the processing process in the context of machine learning. It contains general classes and methods that are independent of the project, but their functionality can be shared with other projects. Thanks to &lt;a href=&#34;https://github.com/radlab-dev-group/ml-utils&#34;&gt;ml-utils&lt;/a&gt;, you can, among other things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Easily manage the logging of results to Weights &amp;amp; Biases,&lt;/li&gt;
&lt;li&gt;manage prompts for generative models using directory-based names,&lt;/li&gt;
&lt;li&gt;support any OpenAPI-compliant generative model API, create queues, and cache responses to reduce the number of model queries.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, general-purpose modules are available, such as &lt;em&gt;env&lt;/em&gt; parsing and creating unified loggers, as well as a module for downloading data from &lt;a href=&#34;https://github.com/radlab-dev-group/ml-utils/blob/main/rdl_ml_utils/utils/wikipedia.py&#34;&gt;Wikipedia&lt;/a&gt;, which is used in &lt;a href=&#34;https://github.com/radlab-dev-group/plwordnet&#34;&gt;plwordnet&lt;/a&gt; to enrich the context of built embeddings.&lt;/p&gt;
&lt;h2 id=&#34;modules-from-the-playground&#34;&gt;Modules from the playground&lt;a class=&#34;headerlink&#34; href=&#34;#modules-from-the-playground&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the &lt;a href=&#34;https://github.com/radlab-dev-group/clusterer&#34;&gt;clusterer&lt;/a&gt; repository, we’ve included a module responsible for creating clusters on the &lt;a href=&#34;https://playground.radlab.dev/&#34;&gt;Playground&lt;/a&gt;. The types of information visible in the &lt;em&gt;&lt;a href=&#34;https://radlab.dev/2025/05/28/przegladarka-informacji/&#34;&gt;Information Browser&lt;/a&gt;&lt;/em&gt; or &lt;em&gt;&lt;a href=&#34;https://radlab.dev/2025/07/14/eksplorator-informacji-nie-mlotek-a-skalpel/&#34;&gt;Information Explorer&lt;/a&gt;&lt;/em&gt; are created using this module. A more detailed description of the method is available on the blog in the linked articles. We’ve also released the code for the&lt;a href=&#34;https://github.com/radlab-dev-group/graph-visualizer&#34;&gt; graph visualizer&lt;/a&gt;, currently running at &lt;a href=&#34;https://graph.playground.radlab.dev/&#34;&gt;https://graph.playground.radlab.dev/&lt;/a&gt;, which presents continuous and discontinuous information graphs. We’ve also included the &lt;a href=&#34;https://github.com/radlab-dev-group/radlab-playground-ui&#34;&gt;radlab-playground-ui&lt;/a&gt; repository with the &lt;a href=&#34;https://playground.radlab.dev/&#34;&gt;Playground&lt;/a&gt; interface code as a Streamlite application.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;a class=&#34;headerlink&#34; href=&#34;#summary&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;All code is available under the &lt;a href=&#34;https://www.apache.org/licenses/LICENSE-2.0&#34;&gt;Apache 2.0&lt;/a&gt; open source license and is free for commercial and non-commercial use. End. 😉&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Information Explorer- not a hammer, but a scalpel</title>
    <link href="https://radlab.dev/en/2025-07-14/eksplorator-informacji-nie-mlotek-a-skalpel/"/>
    <id>https://radlab.dev/en/2025-07-14/eksplorator-informacji-nie-mlotek-a-skalpel/</id>
    <updated>2025-09-17T00:00:00Z</updated>
    <published>2025-07-14T00:00:00Z</published>
    <summary>Today’s blog post will be short, but the attachment is quite long 🙂 Intro i Outro We encourage you to take a look behind the scenes at how the Information…</summary>
    <content type="html">&lt;p&gt;Today’s blog post will be short, but the attachment is quite long 🙂&lt;/p&gt;
&lt;h2 id=&#34;intro-i-outro&#34;&gt;Intro i Outro&lt;a class=&#34;headerlink&#34; href=&#34;#intro-i-outro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We encourage you to take a look behind the scenes at how the &lt;a href=&#34;https://radlab.dev/2025/05/28/przegladarka-informacji/&#34;&gt;Information Browser&lt;/a&gt; and &lt;a href=&#34;https://playground.radlab.dev/Eksplorator_Informacji&#34;&gt;Information Explorer&lt;/a&gt; work 😉 For this occasion, we have prepared a technical report with a detailed description of how our solutions work. In the report, we present precise definitions of information and its types, i.e., &lt;em&gt;daily, continuous,&lt;/em&gt; and &lt;em&gt;discontinuous information&lt;/em&gt;. We have introduced definitions of information &lt;em&gt;graphs for information&lt;/em&gt; and presented the process of their construction, analysis, and extraction of elements that make up the &lt;em&gt;information browser&lt;/em&gt; and &lt;em&gt;information explorer&lt;/em&gt;. The data that feeds these methods is, of course, &lt;em&gt;news&lt;/em&gt; from the &lt;a href=&#34;https://playground.radlab.dev/Strumie%C5%84_Aktualno%C5%9Bci&#34;&gt;News stream&lt;/a&gt;. We have also launched a public &lt;a href=&#34;https://github.com/radlab-dev-group/latex/blob/main/tech_reports/playground/przegladarka_eksplorator/REAMDE.md&#34;&gt;GitHuba&lt;/a&gt;, where we have posted both the &lt;em&gt;&lt;a href=&#34;https://github.com/radlab-dev-group/latex/blob/main/tech_reports/playground/przegladarka_eksplorator/Eksplorator_Informacji-Raport-techniczny-latest.pdf&#34;&gt;pdf&lt;/a&gt;&lt;/em&gt; and &lt;a href=&#34;https://github.com/radlab-dev-group/latex/tree/main/tech_reports/playground/przegladarka_eksplorator&#34;&gt;LaTeX codes&lt;/a&gt; of the report.&lt;/p&gt;
&lt;h2 id=&#34;combo&#34;&gt;Combo&lt;a class=&#34;headerlink&#34; href=&#34;#combo&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When reading, we recommend reading the entire document from start to finish, without missing any details. The report shows how to extract information from the data written between the lines. Here is a preview of the PDF file:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.radlab.dev/wp-content/uploads/2025/07/Eksplorator_Informacji-Raport-techniczny-v1.0-20250714.pdf&#34;&gt;Pobierz PDF&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Eksplorator_Informacji-Raport-techniczny-v1.0-20250714&lt;/p&gt;
&lt;p&gt;Pobierz&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related Products:&lt;/strong&gt; Graph-based entity discovery and clustering algorithms are deployed in &lt;a href=&#34;/en/products/radar/&#34;&gt;Radar Informacji&lt;/a&gt; and the analytics modules of &lt;a href=&#34;/en/products/playground/&#34;&gt;RDL Playground AI&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <title>3c Polarization – model from plg on HF</title>
    <link href="https://radlab.dev/en/2025-06-01/polaryzacja-3c-model-z-plg-na-hf/"/>
    <id>https://radlab.dev/en/2025-06-01/polaryzacja-3c-model-z-plg-na-hf/</id>
    <updated>2025-09-26T00:00:00Z</updated>
    <published>2025-06-01T00:00:00Z</published>
<category term="3c"/><category term="polaryzacja"/>    <summary>Hello 😉 Today, we are presenting and publishing an element of the playground’s. It is a classification model whose task is to determine the polarity of texts.…</summary>
    <content type="html">&lt;p&gt;Hello 😉 Today, we are presenting and publishing an element of the &lt;a href=&#34;https://playground.radlab.dev/&#34;&gt;playground’s&lt;/a&gt;. It is a classification model whose task is to determine the &lt;a href=&#34;https://huggingface.co/radlab/polarity-3c&#34;&gt;polarity of texts&lt;/a&gt;. We are publishing the model on our &lt;a href=&#34;https://huggingface.co/radlab&#34;&gt;huggingface&lt;/a&gt; 😉 We define polarities as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;positive — the model assigns this class if the information in the texts can evoke positive emotions/feelings;&lt;/li&gt;
&lt;li&gt;negative — if the information in the texts evokes negative feelings;&lt;/li&gt;
&lt;li&gt;ambivalent/neutral — if the information is neutral or evokes conflicting feelings at the same time;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/7ea37d09b8-480.webp 480w, /assets/img/7ea37d09b8-768.webp 768w, /assets/img/7ea37d09b8-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/7ea37d09b8.png&#34; alt=&#34;&#34; width=&#34;1152&#34; height=&#34;896&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3 id=&#34;process-data-and-learning&#34;&gt;Process: data and learning&lt;a class=&#34;headerlink&#34; href=&#34;#process-data-and-learning&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The model was developed in two stages. However, unlike the standard approach (starting with annotation), we began by training the model based on existing annotations (hm… that’s nothing new… yes and no…). However, when looking for a dataset for polarization, most often these are datasets related to opinions on a given topic. In our case, it is not about determining the polarization of opinions (e.g., &lt;em&gt;This product can be thrown in the trash! or I recommend this doctor because he has a very good approach to patients!&lt;/em&gt;), but about determining the polarization of information that the &lt;em&gt;media&lt;/em&gt; (websites) feed us.&lt;/p&gt;
&lt;p&gt;So we had to look elsewhere 😉 The choice was not so obvious, but it reflected the idea of polarization of information rather than opinion… and we settled on PlWordNet Emo. PlWordNet Emo is a selected part of PlWordNet’s marked with emotions (and more) (the markings are at the level of word meanings) — I recommend familiarizing yourself with what &lt;a href=&#34;http://plwordnet.pwr.wroc.pl/wordnet/&#34;&gt;EmoPlWordNet&lt;/a&gt;  is — it is a very valuable source of information. After a few technical steps, we transformed the examples of usage into meanings with emotional descriptions, and then into an approximate set of emotional polarization (reduction of emotions and granulation to 3 – positive, negative, ambivalent). Below are a few examples from the set, after conversion:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/4f873f4675-480.webp 480w, /assets/img/4f873f4675-768.webp 768w, /assets/img/4f873f4675-1024.webp 1024w, /assets/img/4f873f4675-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/4f873f4675.png&#34; alt=&#34;&#34; width=&#34;1507&#34; height=&#34;492&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;We used this collection to train the &lt;em&gt;polarity3c-zero&lt;/em&gt; model, which was immediately used in the decision support process during annotation. The model provided real-time annotation suggestions for two annotators. This resulted in a collection of approximately 3,500 manual annotations, which were used for the final training of the model.&lt;/p&gt;
&lt;p&gt;The final model is a simple architecture in which a simple classification layer (&lt;em&gt;ClassificationHead&lt;/em&gt;) is added above the language model, which is trained to determine polarity. Classification layer architecture:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;  (classifier): RobertaClassificationHead(
    (dense): Linear(in_features=1024, out_features=1024, bias=True)
    (dropout): Dropout(p=0.1, inplace=False)
    (out_proj): Linear(in_features=1024, out_features=3, bias=True)
  )
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;1024 on the first dense layer of Linear is the output of the base model  &lt;a href=&#34;https://huggingface.co/sdadas/polish-roberta-large-v2&#34;&gt;polish-roberta-large-v2&lt;/a&gt;, the output of the &lt;em&gt;polarity3c&lt;/em&gt; model, is the layer marked (out_proj), which has 3 features at the output, i.e., our detected classes. The charts below show the basic metrics from training this model:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/0a36d5c7a8-480.webp 480w, /assets/img/0a36d5c7a8-768.webp 768w, /assets/img/0a36d5c7a8-1024.webp 1024w, /assets/img/0a36d5c7a8-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/0a36d5c7a8.png&#34; alt=&#34;&#34; width=&#34;1628&#34; height=&#34;642&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3 id=&#34;launch-and-testing&#34;&gt;Launch and testing&lt;a class=&#34;headerlink&#34; href=&#34;#launch-and-testing&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The easiest way to run the model is to use the &lt;em&gt;&lt;a href=&#34;https://huggingface.co/docs/transformers&#34;&gt;transformers&lt;/a&gt;&lt;/em&gt; library with a &lt;em&gt;&lt;a href=&#34;https://huggingface.co/docs/transformers/pipeline_tutorial&#34;&gt;pipeline’a&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;transformers&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;classifier&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;radlab/polarity-3c&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;task&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;text-classification&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The use of the model is equally simple:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt; classifier(&amp;quot;Po upadku reżimu Asada w Syrii, mieszkańcy, borykający się z ubóstwem, zaczęli tłumnie poszukiwać skarbów, zachęceni legendami o zakopanych bogactwach i dostępnością wykrywaczy metali, które stały się popularnym towarem. Mimo, że działalność ta jest nielegalna, rząd przymyka oko, a sprzedawcy oferują urządzenia nawet dla dzieci. Poszukiwacze skupiają się na obszarach historycznych, wierząc w legendy o skarbach ukrytych przez starożytne cywilizacje i wojska osmańskie, choć eksperci ostrzegają przed fałszywymi monetami i kradzieżą artefaktów z muzeów.&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In response, we will receive the value:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;label&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;ambivale&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;score&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.9994786381721497&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To read the full confidence distribution of the model, simply add the option specifying how many labels with the highest probability you want to receive. In our case, we have 3 labels, so we add the option &lt;code&gt;top_k=3&lt;/code&gt;  to the&lt;code&gt;classifier&lt;/code&gt; to receive information about all classes:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt; classifier(&amp;quot;Po upadku reżimu Asada w Syrii, mieszkańcy, borykający się z ubóstwem, zaczęli tłumnie poszukiwać skarbów, zachęceni legendami o zakopanych bogactwach i dostępnością wykrywaczy metali, które stały się popularnym towarem. Mimo, że działalność ta jest nielegalna, rząd przymyka oko, a sprzedawcy oferują urządzenia nawet dla dzieci. Poszukiwacze skupiają się na obszarach historycznych, wierząc w legendy o skarbach ukrytych przez starożytne cywilizacje i wojska osmańskie, choć eksperci ostrzegają przed fałszywymi monetami i kradzieżą artefaktów z muzeów.&amp;quot;, top_k=3)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And here’s the way out:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;label&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;ambivale&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;score&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.9994786381721497&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;label&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ne&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ga&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ive&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;score&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.0002675618161447346&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;label&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;posi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ive&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;score&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.0002538080152589828&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id=&#34;outro&#34;&gt;Outro&lt;a class=&#34;headerlink&#34; href=&#34;#outro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The model has been available on our  &lt;a href=&#34;https://playground.radlab.dev/&#34;&gt;playground’s&lt;/a&gt; since July last year. We collect data on its performance, which can be viewed in the &lt;a href=&#34;https://playground.radlab.dev/Statystyki&#34;&gt;statistics&lt;/a&gt;. Information about polarization is also added to each &lt;a href=&#34;https://playground.radlab.dev/Strumie%C5%84_Aktualno%C5%9Bci&#34;&gt;new stream&lt;/a&gt; using this model. The model is, of course, available for free on our HF:&lt;a href=&#34;https://huggingface.co/radlab/polarity-3c&#34;&gt; here is the model. &lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related solutions:&lt;/strong&gt; This model powers sentiment and polarity analytics in &lt;a href=&#34;/en/products/radar/&#34;&gt;Radar Informacji&lt;/a&gt; and the live news stream on &lt;a href=&#34;/en/products/playground/&#34;&gt;RDL Playground AI&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;unlock-the-potential-of-your-data-with-our-mlnlp-bon-appetit&#34;&gt;Unlock the potential of your data with our ML/NLP. Bon appetit! 😉&lt;a class=&#34;headerlink&#34; href=&#34;#unlock-the-potential-of-your-data-with-our-mlnlp-bon-appetit&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;</content>
  </entry>
  <entry>
    <title>Information Browser</title>
    <link href="https://radlab.dev/en/2025-05-28/przegladarka-informacji/"/>
    <id>https://radlab.dev/en/2025-05-28/przegladarka-informacji/</id>
    <updated>2025-09-26T00:00:00Z</updated>
    <published>2025-05-28T00:00:00Z</published>
<category term="playground"/>    <summary>From a marketing perspective, it would be good to start this post with something like: Today, we present a revolutionary, fully automated solution that will…</summary>
    <content type="html">&lt;p&gt;From a marketing perspective, it would be good to start this post with something like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Today, we present a revolutionary, fully automated solution that will allow you to analyze media trends in real time. Want to find out what people are writing about? What’s trending? Yes! You’ve come to the right place. Today is your chance to take advantage of this opportunity….&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Easy…. It’s a bit like Telemango these days… it’s not appropriate 😉 So we’ll start as usual.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/c8612afc62-480.webp 480w, /assets/img/c8612afc62-768.webp 768w, /assets/img/c8612afc62-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/c8612afc62.png&#34; alt=&#34;&#34; width=&#34;1152&#34; height=&#34;896&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3 id=&#34;what-is-todays-post-about&#34;&gt;What is today’s post about?&lt;a class=&#34;headerlink&#34; href=&#34;#what-is-todays-post-about&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We have released a new feature on the &lt;a href=&#34;https://playground.radlab.dev/&#34;&gt;playground&lt;/a&gt; called &lt;a href=&#34;https://playground.radlab.dev/Przegl%C4%85darka_Informacji&#34;&gt;Information Browser&lt;/a&gt;, and it does exactly what its name suggests—it allows you to browse information over time.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What is &lt;strong&gt;information&lt;/strong&gt;? We understand information to be a &lt;strong&gt;concise thematic group&lt;/strong&gt; of news items from websites that implicitly relate to the same situation/topic/event… What appears in the news, what the media write about, what is trending. It is what people read about on a given day/time period, only collected in one place, summarized, and named. &lt;strong&gt;The name&lt;/strong&gt; of the information is not &lt;strong&gt;predefined in any way; it is determined on the basis&lt;/strong&gt; of emerging &lt;strong&gt;news&lt;/strong&gt; items grouped into compact information group.. The name of the information may be different every day—it depends on what is being written (and read ;-)).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;em&gt;Browser&lt;/em&gt; operates on the basis of information found on popular news websites, which we analyze on a regular basis and present the results of these analyses in the &lt;em&gt;playground&lt;/em&gt;. The Browser presents the process of automatic analysis of information from these websites. It is a mechanism that presents the most important information from a given day, names this information, and writes a short summary in which you can learn in brief what the detected information is about. In addition, it will present a number of related (let’s call them) &lt;em&gt;triggers&lt;/em&gt; for this information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;will show the exact addresses of the websites that publish this information;&lt;/li&gt;
&lt;li&gt;will show the sources of information dissemination using a diagram visualizing the percentage share of a specific portal in sharing this information;&lt;/li&gt;
&lt;li&gt;will present an analysis of the polarization of this information (it is worth noting the correlation between the name of the information and the polarization of the information);&lt;/li&gt;
&lt;li&gt;use a calendar to enable tracking and analysis of information over time (although it may have a different name);&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;how-does-it-work&#34;&gt;How does it work?&lt;a class=&#34;headerlink&#34; href=&#34;#how-does-it-work&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;From a technical point of view, it is a mix of different methods and optimizations. The mechanism examines the differences between texts and, based on their similarity, selects the news items that are most similar to each other from the perspective of reduced embedding for one information group. The mechanism for separating information clusters adjusts its operation to the amount of data it analyzes. There are days when there are about 600 news items, but there are also days when there are twice as many. Based on multiple distributions, the mechanism selects the one that best fits the additional conditions for data division, e.g., it does not allow divisions below 5 information groups or above 60, and additionally takes into account the &lt;em&gt;golden mean&lt;/em&gt;, i.e., targeting 20 topics per day, while optimizing the number of rejected examples. From the perspective of the &lt;em&gt;two months reviewed&lt;/em&gt;, the media most often publishes between 20 and 30 pieces of information per day.&lt;/p&gt;
&lt;h3 id=&#34;for-whom-as-different-as-chalk-and-cheese&#34;&gt;For whom: “as different as chalk and cheese”&lt;a class=&#34;headerlink&#34; href=&#34;#for-whom-as-different-as-chalk-and-cheese&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You could say: For everyone… From the perspective of someone looking for specific information, this solution allows them to access dozens or hundreds of news items from a specific day with specific information in one place. If someone is interested in sporting events and there is a lot of information about sporting events on a given day, they will receive a summary of many events (including those from foreign sources). For example, suggestion number 1 (number 0 appears by default) on May 26, 2025, shows the information &lt;em&gt;“Sports – successes and changes.”,&lt;/em&gt;  whose summary looks like this (click to enlarge):&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/cf3980964d-480.webp 480w, /assets/img/cf3980964d-768.webp 768w, /assets/img/cf3980964d-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/cf3980964d.png&#34; alt=&#34;&#34; width=&#34;1196&#34; height=&#34;685&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;In addition, we receive addresses of related pages with information containing this description:&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;Kliknij aby zobaczyć zdjęcie&lt;/summary&gt;&lt;div&gt;&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/3f4dd9a22c-480.webp 480w, /assets/img/3f4dd9a22c-768.webp 768w, /assets/img/3f4dd9a22c-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/3f4dd9a22c.png&#34; alt=&#34;&#34; width=&#34;1116&#34; height=&#34;1235&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;&lt;/div&gt;&lt;/details&gt;

&lt;p&gt;From an analyst’s perspective, linking information about sources of propagation, i.e., the graph:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/56a54d55ab-480.webp 480w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/56a54d55ab.png&#34; alt=&#34;&#34; width=&#34;752&#34; height=&#34;364&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;The graph shows where the information comes from and how much it is dominated by a single data source. And while in the case of sports, this may be a less important variable, in information related to, for example, politics or modern technologies, the distribution of the origin of the pages may show the process of introducing information into circulation. Analyzing this information over time using a calendar allows you to track it and draw conclusions. It is important to remember that information is named individually on a daily basis, so names may vary depending on the day. Therefore, human interaction is (still) required to track specific information over time 😉 In addition, we receive a summary of the distribution of emotional polarization in the form of a diagram:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/58335d752a-480.webp 480w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/58335d752a.png&#34; alt=&#34;&#34; width=&#34;752&#34; height=&#34;364&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;When analyzing such a diagram, it is worth paying attention to the correlation between the name of the information and the polarization/tone of the text (positive, negative, ambivalent-neutral information). The name of the category clearly indicates what the polarization distribution may look like. Our model, which has been operating on the &lt;em&gt;&lt;a href=&#34;https://playground.radlab.dev/&#34;&gt;playground&lt;/a&gt;&lt;/em&gt; for a very long time and is used to evaluate texts in real time, is responsible for detecting polarization. Based on the decisions of this model, the share of a specific tone in a particular piece of information is presented (this is not the tone of the summary article, but of the news items containing the information). In addition, we obtain accurate data on the number of news items:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/692f8a4752-465.webp 465w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/692f8a4752.png&#34; alt=&#34;&#34; width=&#34;465&#34; height=&#34;167&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;And linking the number of news items in the information with the number of news items throughout the day (and this variable is accessible):&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/a7c865bc4e-480.webp 480w, /assets/img/a7c865bc4e-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/a7c865bc4e.png&#34; alt=&#34;&#34; width=&#34;803&#34; height=&#34;122&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;allows you to determine the relevance of information in the context of the entire day…. The rest can be left to the imagination 😉&lt;/p&gt;
&lt;h3 id=&#34;outro&#34;&gt;Outro&lt;a class=&#34;headerlink&#34; href=&#34;#outro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Why only one day? No problem, the mechanism works based on time intervals, analyzing information from the specified interval, not for the specified day. The mechanism itself is universal, and for analyses covering more than a week, it requires slightly more powerful hardware (and, surprisingly, it is RAM and a processor, not a GPU :)), the analysis of about a thousand news items from a given day takes 15 to 28 minutes, so not that long. We are currently analyzing days up to January 1, 2025. After this process, it will be possible to track information from January 1, 2025, to the day on which it will be tracked. The mechanism works on the basis of automated one-day analyses, which is why a summary of the previous day’s information appears every day. After the one-day analysis, we plan to introduce weekly analyses.&lt;/p&gt;
&lt;p&gt;We encourage you to browse the &lt;em&gt;&lt;a href=&#34;https://playground.radlab.dev/Przegl%C4%85darka_Informacji&#34;&gt;Information browser&lt;/a&gt;&lt;/em&gt;, analyze it, and draw conclusions. &lt;em&gt;The browser is, of course, entirely non-profit, without ads or logging in 😉&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Interesting fact&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;Content Supervisor about Browser [click]&lt;/summary&gt;&lt;div&gt;&lt;p&gt;Summary of this post using the content supervisor from &lt;a href=&#34;https://playground.radlab.dev/Czat_publiczny&#34;&gt;Public Chat&lt;/a&gt; 😉 Here’s what gemma wrote about the &lt;em&gt;&lt;a href=&#34;https://playground.radlab.dev/Przegl%C4%85darka_Informacji&#34;&gt;Browser&lt;/a&gt;&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/9f697dd930-480.webp 480w, /assets/img/9f697dd930-768.webp 768w, /assets/img/9f697dd930-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/9f697dd930.png&#34; alt=&#34;&#34; width=&#34;1113&#34; height=&#34;329&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Conversation available to read in &lt;a href=&#34;https://playground.radlab.dev/Czat_publiczny&#34;&gt;Public Chat&lt;/a&gt;, just load the hash:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;text
7ivUpPCTNPR0d8gGbPT9hh5nD1Y8yMapJSOISOTg7mFJvryf3BgzGdT03Bsf0Ui3gWymAkciIWRxPJnHslFwnP0FtYzrSi8xj7AOqxT5lcqQ1waaYadNUIOoOJAqu9wP&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;/div&gt;&lt;/details&gt;

&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Explore related solutions:&lt;/strong&gt; Learn about the complete 8-stage algorithmic pipeline and architecture in the &lt;a href=&#34;/en/products/radar/&#34;&gt;Radar Informacji&lt;/a&gt; product overview and try the live demo on &lt;a href=&#34;/en/products/playground/&#34;&gt;RDL Playground AI&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;unlock-the-potential-of-your-data-with-our-mlnlp-bon-appetit&#34;&gt;Unlock the potential of your data with our ML/NLP. Bon appetit! 😉&lt;a class=&#34;headerlink&#34; href=&#34;#unlock-the-potential-of-your-data-with-our-mlnlp-bon-appetit&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;</content>
  </entry>
  <entry>
    <title>pLLama3.1 8B — medium-sized and even small GenAI for Polish</title>
    <link href="https://radlab.dev/en/2024-12-08/pllama3-1-8b-czyli-srednio-duze-a-nawet-male-genai-dla-polskiego/"/>
    <id>https://radlab.dev/en/2024-12-08/pllama3-1-8b-czyli-srednio-duze-a-nawet-male-genai-dla-polskiego/</id>
    <updated>2025-10-24T00:00:00Z</updated>
    <published>2024-12-08T00:00:00Z</published>
<category term="dpo"/><category term="fine-tuning"/><category term="genai"/><category term="huggingface"/><category term="llm"/><category term="pllama"/><category term="transformers"/>    <summary>Yes… it was intentional to misspell not-in-or-de-r (it’s not a mistake) as a preview of the next version of the model 🙂 Between pLlamą3 and pLlamą3.2, there…</summary>
    <content type="html">&lt;p&gt;Yes… it was intentional to misspell &lt;strong&gt;not-in-or-de-r&lt;/strong&gt; (it’s not a mistake) as a preview of the next version of the model 🙂 Between &lt;a href=&#34;https://radlab.dev/2024/08/16/pllama3-8b-70b-genai-dla-polskiego/&#34;&gt;pLlamą3&lt;/a&gt; and &lt;a href=&#34;https://radlab.dev/2024/10/20/pllama3-2-1b-3b-male-genai-dla-polskiego/&#34;&gt;pLlamą3.2&lt;/a&gt;, there was also a version called pLLama3.1 — and that’s what today’s post is about.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/9efe550e20-480.webp 480w, /assets/img/9efe550e20-768.webp 768w, /assets/img/9efe550e20-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/9efe550e20.png&#34; alt=&#34;pLLama - wygenerowane za pomocą AI&#34; width=&#34;1024&#34; height=&#34;796&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;pLLama – generated using AI&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We recently wrote:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/42535a5ece-480.webp 480w, /assets/img/42535a5ece-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/42535a5ece.png&#34; alt=&#34;&#34; width=&#34;810&#34; height=&#34;155&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3 id=&#34;intro&#34;&gt;Intro&lt;a class=&#34;headerlink&#34; href=&#34;#intro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Another version of Meta’s model that speaks better Polish! In this post, we present the  &lt;a href=&#34;https://huggingface.co/collections/radlab/pllama31-models-6710cace79670d489fe7d9bd&#34;&gt;pLLama3.1&lt;/a&gt; model in 8B architecture. This time, we have published the –&lt;em&gt;content model&lt;/em&gt;, which is a less talkative version of the model, the –&lt;em&gt;chat&lt;/em&gt; model as a more talkative version, the pure –&lt;em&gt;base model&lt;/em&gt; after LoR, but we have also made available an &lt;em&gt;experimental model with the transfer of adaptive&lt;/em&gt; layers from the pLLama3 model to the pLLama3.1 model (more on that in a future post :)). All models are of course available on &lt;a href=&#34;https://huggingface.co/radlab&#34;&gt;huggingface&lt;/a&gt; (full &lt;a href=&#34;https://huggingface.co/collections/radlab/pllama31-models-6710cace79670d489fe7d9bd&#34;&gt;collection of 3.1 models&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Model radlab/pLLama3.1-8B-content : this is an SFT model, and DPO provides short and concise answers.&lt;/li&gt;
&lt;li&gt;Model radlab/pLLama3.1-8B-chat model is a more talkative version of the model (after SFT and DPO), ideal for chatting.&lt;/li&gt;
&lt;li&gt;Model radlab/pLLama3.1-8B-base-ft-16bit is a model directly after SFT with LoRa.&lt;/li&gt;
&lt;li&gt;Eksperimental model radlab/pLLama-L31-adapters-MIX-SFT-DPO with transfer of adaptive layers between models.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;dataset-learning-and-graphs&#34;&gt;Dataset, learning, and graphs&lt;a class=&#34;headerlink&#34; href=&#34;#dataset-learning-and-graphs&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;All versions of the pLLama3.1 models have one parent, namely &lt;a href=&#34;https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct&#34;&gt;Llama-3.1-8B-Instruct&lt;/a&gt; from Meta.AI in the 8B architecture. This model already writes quite well in its basic version in Polish, but it still has a long way to go before it can write (at least) correctly. Hence the idea: let’s train this model too 🙂&lt;/p&gt;
&lt;p&gt;For training, we used a dataset developed for earlier models. To briefly recap, this is over 650k instructions generated automatically based on available datasets. We converted each set (e.g., marked with parts of speech) into system prompts in the form of questions and answers. This resulted in a set of instructions that we used as data to train the model. We also developed a set of instructions for DPO based on available language corpora, including NKJP and KPWr.&lt;/p&gt;
&lt;p&gt;Due to hardware limitations, we performed SFT using adaptive layers (LoRA) with 16-bit quantization (bits and bytes). Similarly, in DPO, the base model was loaded as a quantized version of pLLama3.1 after SFT, and the adaptive layer was also retrained during DPO. As a reminder, in our case, during SFT, we skew the model weights towards the Polish language, while in the DPO process, we teach the model to generate text correctly in terms of grammar and punctuation. We trained the models on single RTX 4090 graphics cards (24 GB). SFT (LoRA) lasted 14d 2h 3m and 52s. DPO lasted 2d 15h 2m  and 42s. The difference between the –&lt;em&gt;content&lt;/em&gt; and –&lt;em&gt;chat&lt;/em&gt; models is a matter of a different way of combining the adaptation layer with the model (but this will be discussed in a separate post). Below are two graphs, the first showing the loss function value in SFT, and the second showing the &lt;em&gt;chosen and rejected&lt;/em&gt; logit values during DPO.&lt;/p&gt;
&lt;p&gt;Loss function during SFT with Lora:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/0d37e0f2a1-480.webp 480w, /assets/img/0d37e0f2a1-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/0d37e0f2a1.png&#34; alt=&#34;&#34; width=&#34;796&#34; height=&#34;314&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;In the DPO process:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/a5e10bfbf8-480.webp 480w, /assets/img/a5e10bfbf8-768.webp 768w, /assets/img/a5e10bfbf8-1024.webp 1024w, /assets/img/a5e10bfbf8-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/a5e10bfbf8.png&#34; alt=&#34;&#34; width=&#34;1598&#34; height=&#34;320&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3 id=&#34;outro&#34;&gt;Outro&lt;a class=&#34;headerlink&#34; href=&#34;#outro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;How does version 3.1 differ from the  &lt;a href=&#34;https://radlab.dev/2024/08/16/pllama3-8b-70b-genai-dla-polskiego/&#34;&gt;pLLama3&lt;/a&gt; model? First and foremost, in terms of context size. The pLLama3 model had a limited context of 8k tokens. The pLLama3.1 version has a context length of 128k tokens (this results from the base model, i.e., in pLLama 3, we trained Llama3 from Meta, while in pLLama3.1, we trained the LLama3.1 model from Meta). In RAG tests, pLLama3.1 performs significantly better than version 3, mainly due to its larger context. At the moment, when answering a question, the model is able to accommodate much more information, which significantly reduces the frequency of its querying, greatly reduces the problem of too frequent querying of the model, dividing the data to the size of the input (and, incidentally, reduces the problem of compiling the final answer in RAG based on partial answers with a small context).&lt;/p&gt;
&lt;p&gt;And as an addition to HuggingFace, we have a model that we call L31 (&lt;a href=&#34;https://huggingface.co/radlab/pLLama-L31-adapters-MIX-SFT-DPO&#34;&gt;pLLama-L31-adapters-MIX-SFT-DPO&lt;/a&gt;) as an experiment in mixing models.&lt;/p&gt;
&lt;p&gt;That’s all for today, thanks!&lt;/p&gt;
&lt;h2 id=&#34;unlock-the-potential-of-your-data-with-our-mlnlp-bon-appetite&#34;&gt;Unlock the potential of your data with our ML/NLP. Bon appetite! 😉&lt;a class=&#34;headerlink&#34; href=&#34;#unlock-the-potential-of-your-data-with-our-mlnlp-bon-appetite&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;</content>
  </entry>
  <entry>
    <title>pLlama3.2 (1B + 3B) – small GenAI for Polish</title>
    <link href="https://radlab.dev/en/2024-10-20/pllama3-2-1b-3b-male-genai-dla-polskiego/"/>
    <id>https://radlab.dev/en/2024-10-20/pllama3-2-1b-3b-male-genai-dla-polskiego/</id>
    <updated>2025-10-24T00:00:00Z</updated>
    <published>2024-10-20T00:00:00Z</published>
<category term="dpo"/><category term="fine-tuning"/><category term="genai"/><category term="hf"/><category term="huggingface"/><category term="pllama"/><category term="transformers"/><category term="uczenie"/>    <summary>pLLama – generated using AI Intro Today a very short post. A post about a model, small by today’s standards. You’ve probably heard about Llama 3.2 from Meta…</summary>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/9efe550e20-480.webp 480w, /assets/img/9efe550e20-768.webp 768w, /assets/img/9efe550e20-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/9efe550e20.png&#34; alt=&#34;pLLama - wygenerowane za pomocą AI&#34; width=&#34;1024&#34; height=&#34;796&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;pLLama – generated using AI&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;a class=&#34;headerlink&#34; href=&#34;#intro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Today a very short post. A post about a model, small by today’s standards. You’ve probably heard about Llama 3.2 from Meta AI? Meta recently released models for content generation (&lt;em&gt;Instruct&lt;/em&gt;) and images (&lt;em&gt;Vision-Instruct&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/5d4ab12b5b-480.webp 480w, /assets/img/5d4ab12b5b-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/5d4ab12b5b.png&#34; alt=&#34;&#34; width=&#34;836&#34; height=&#34;178&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/74cbcb6a25-480.webp 480w, /assets/img/74cbcb6a25-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/74cbcb6a25.png&#34; alt=&#34;&#34; width=&#34;825&#34; height=&#34;361&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately, the &lt;em&gt;Vision-Instruct&lt;/em&gt; models are not available in the European Union, and by extension, in our country.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/7bd342c90e-480.webp 480w, /assets/img/7bd342c90e-768.webp 768w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/7bd342c90e.png&#34; alt=&#34;&#34; width=&#34;892&#34; height=&#34;157&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;So… what are we left with? We are left with teaching small text models in 1B and 3B architecture in Polish 😉&lt;/p&gt;
&lt;h2 id=&#34;data-and-training&#34;&gt;Data and Training&lt;a class=&#34;headerlink&#34; href=&#34;#data-and-training&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For further training, we first used the fine-tuning technique, and then in the DPO process, we trained both models for language correction. The data was exactly the same as for pLLama3 (&lt;a href=&#34;https://radlab.dev/2024/08/16/pllama3-8b-70b-genai-dla-polskiego/&#34;&gt;Click to read the article&lt;/a&gt;). This applies to both the fine-tuning and DPO. The only change was a small adjustment in the learning hyperparameters (batch size, learning rate). The number of epochs in FT was 5, and the number of steps in DPO was 50k. And… oh yes, training in 16-bit 🙂&lt;/p&gt;
&lt;p&gt;See for yourself the loss function chart for both the training and evaluation parts (it’s the same fine-tuning process for the Polish language):&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/96132b0792-480.webp 480w, /assets/img/96132b0792-768.webp 768w, /assets/img/96132b0792-1024.webp 1024w, /assets/img/96132b0792-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/96132b0792.png&#34; alt=&#34;&#34; width=&#34;2363&#34; height=&#34;1147&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/21a5f11944-480.webp 480w, /assets/img/21a5f11944-768.webp 768w, /assets/img/21a5f11944-1024.webp 1024w, /assets/img/21a5f11944-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/21a5f11944.png&#34; alt=&#34;&#34; width=&#34;2368&#34; height=&#34;1156&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;And that’s exactly the difference between them 🙂&lt;/p&gt;
&lt;h2 id=&#34;feelings&#34;&gt;Feelings&lt;a class=&#34;headerlink&#34; href=&#34;#feelings&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Since the 1B and 3B models are distilled versions of existing models, likely trained mostly on English data, I was curious about the result of fine-tuning and DPO training for these models. The 1B model (after both FT and DPO) is, without a doubt, the least capable model in our collection—but Meta’s own benchmarks show exactly the same. As for the 3B model, it’s a completely different tier than the 1B. One could say it performs as expected.&lt;/p&gt;
&lt;p&gt;Comparing them to larger models somewhat misses the point, because with the 1B and 3B, Meta focused on making them runnable on less powerful hardware, even on a smartphone 😉. While the 1B model struggles, the 3B model can be surprisingly effective.&lt;/p&gt;
&lt;h2 id=&#34;models-for-download&#34;&gt;Models for Download&lt;a class=&#34;headerlink&#34; href=&#34;#models-for-download&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We invite you to our HuggingFace page, where we have created a collection with the  &lt;em&gt;&lt;a href=&#34;https://huggingface.co/collections/radlab/pllama32-models-6710bdf9eac198072676a52f&#34;&gt;pLLama3.2 Models&lt;/a&gt;&lt;/em&gt;. All models are, of course, publicly available for free:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1B architecture models: radlab/pLLama3.2-1B – the model after fine-tuning only, and radlab/pLLama3.2-1B-DPO after FT + DPO&lt;/li&gt;
&lt;li&gt;3B architecture models: radlab/pLLama3.2-3B the model after fine-tuning only, and radlab/pLLama3.2-3B-DPO after FT + DPO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bon appetit 🙂&lt;/p&gt;
&lt;h2 id=&#34;what-next&#34;&gt;&lt;strong&gt;What next?&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#what-next&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Next will be not-in-or-de-r: pLLama3.1-8B (the green graph) and L31 as an interesting mix…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/491ea5e991-480.webp 480w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/491ea5e991.png&#34; alt=&#34;&#34; width=&#34;648&#34; height=&#34;268&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/a5be28258b-480.webp 480w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/a5be28258b.png&#34; alt=&#34;&#34; width=&#34;647&#34; height=&#34;279&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>pLlama3 (8B + 70B) – GenAI for Polish</title>
    <link href="https://radlab.dev/en/2024-08-16/pllama3-8b-70b-genai-dla-polskiego/"/>
    <id>https://radlab.dev/en/2024-08-16/pllama3-8b-70b-genai-dla-polskiego/</id>
    <updated>2025-10-24T00:00:00Z</updated>
    <published>2024-08-16T00:00:00Z</published>
<category term="dpo"/><category term="fine-tuning"/><category term="genai"/><category term="hf"/><category term="huggingface"/><category term="llama"/><category term="pllama"/><category term="transformers"/>    <summary>pLLama – generated using AI Intro In the last post, we mentioned the GenaAI model… Yes! Today we want to introduce you to our new model, or rather a family…</summary>
    <content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/9efe550e20-480.webp 480w, /assets/img/9efe550e20-768.webp 768w, /assets/img/9efe550e20-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/9efe550e20.png&#34; alt=&#34;pLLama - wygenerowane za pomocą AI&#34; width=&#34;1024&#34; height=&#34;796&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;pLLama – generated using&lt;/em&gt; &lt;em&gt;AI&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;a class=&#34;headerlink&#34; href=&#34;#intro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the last &lt;a href=&#34;https://radlab.dev/2024/08/04/rag-i-problemy/&#34;&gt;post&lt;/a&gt;, we mentioned the GenaAI model… Yes! Today we want to introduce you to our new model, or rather a family of models further trained on the Polish language: &lt;a href=&#34;https://huggingface.co/radlab/pLLama3-8B-chat&#34;&gt;pLLama3-8B-chat&lt;/a&gt;, &lt;a href=&#34;https://huggingface.co/radlab/pLLama3-8B-creator&#34;&gt;pLLama3-8B-creator&lt;/a&gt;, and &lt;a href=&#34;https://huggingface.co/radlab/pLLama3-70B&#34;&gt;pLLama3-70B&lt;/a&gt;. This time, we decided to further train models from the giants to make them handle language Polish.&lt;/p&gt;
&lt;p&gt;First up were &lt;a href=&#34;https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct&#34;&gt;Llama-3-8B-Instruct&lt;/a&gt; and &lt;a href=&#34;https://huggingface.co/meta-llama/Meta-Llama-3-70B-Instruct&#34;&gt;Llama-3-70B-Instruct&lt;/a&gt; from Meta.ai. This is an instruction model that can carry out commands given in the model’s prompt. The original model does not handle Polish very well. Sometimes it can write something in Polish, but it is difficult to force it to communicate fluently in language Polish. Interestingly, it can surprisingly well understand Polish commands, but it cannot construct a correct response.&lt;/p&gt;
&lt;p&gt;We are making the 8B architecture models available in two configurations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;radlab/pLLama3-8B-creator , a model that gives fairly short, specific answers to user queries;&lt;/li&gt;
&lt;li&gt;radlab/pLLama3-8B-chat – a model that is a talkative version, reflecting the behavior of the original meta-llama/Meta-Llama-3-8B-Instruct model..&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;dataset&#34;&gt;Dataset&lt;a class=&#34;headerlink&#34; href=&#34;#dataset&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The fact that the original model could understand Polish commands was the spark that ignited our work on the model. We hypothesized that it would suffice to appropriately fine-tune the language layer while interfering as little as possible with the instruction layer.&lt;/p&gt;
&lt;p&gt;However, as is often the case with large language models, the first problem arose: where to obtain data (&lt;em&gt;especially available as instruction/chat conversation sets!)&lt;/em&gt; that would be sufficiently abundant and of the highest possible quality? For the Polish language, there is actually only one publicly available dataset for training an instruction model: &lt;a href=&#34;https://huggingface.co/datasets/Lajonbot/alpaca-dolly-chrisociepa-instruction-only-polish&#34;&gt;alpaca-dolly-chrisociepa-instruction-only-polish&lt;/a&gt;. However, the size of this dataset did not allow for sufficient fine-tuning of the model.&lt;/p&gt;
&lt;p&gt;Therefore, we developed a method to create a dataset structured as instructions, using other datasets available online. We prepared a set of approximately 650k Polish instructions that we fed to the model during training.&lt;/p&gt;
&lt;p&gt;Additionally, we developed a training set for the DPO process, which contained 100k examples where we taught the model to select correctly written versions of texts over those containing language errors. The DPO training examples included a correctly written linguistic form (&lt;em&gt;chosen&lt;/em&gt;) and an incorrectly written form (&lt;em&gt;rejected&lt;/em&gt;) of the same text. It is worth noting that the DPO data was built in reverse – namely, for very high-quality texts (&lt;em&gt;chosen&lt;/em&gt;), we prepared their corrupted counterpart (&lt;em&gt;rejected&lt;/em&gt;).&lt;/p&gt;
&lt;h2 id=&#34;training-process&#34;&gt;Training Process&lt;a class=&#34;headerlink&#34; href=&#34;#training-process&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The training process was divided into two stages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fine-tuning (FT) on a set of 650k Polish-language instructions, with the fine-tuning duration set to 5 epochs.&lt;/li&gt;
&lt;li&gt;After the FT stage, we further trained the model using DPO on 100k instructions for correct Polish writing; in this case, we set the training duration to 15k steps.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fine-tuning the model on 650k was aimed at shifting the language layer of the fine-tuned model toward the Polish language. Unfortunately, due to the imperfect instruction set&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Fun fact:&lt;/strong&gt; the instruction set was generated ~95% automatically — using an early version of the trained model (in the 70B architecture) iteratively to assist in creating the set that we used to train this target model…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;the model started actually speaking Polish and responding to instructions, but it sometimes made quite a lot of typos. That’s why we decided to further train the model with DPO. In DPO, we primarily wanted to achieve an improvement in the model’s language layer compared to the FT model. The optimization involved teaching the model to select the correct linguistic form and reject the incorrect one.&lt;/p&gt;
&lt;p&gt;The graph below shows the loss function during the entire training process (8B model). The sudden drop in value at the beginning of the function may indicate a fairly quick adaptation of the model to the Polish language. And the entire, long-lasting training process is, de facto, refining the already existing linguistic details.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/1e3570ed6f-480.webp 480w, /assets/img/1e3570ed6f-768.webp 768w, /assets/img/1e3570ed6f-1024.webp 1024w, /assets/img/1e3570ed6f-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/1e3570ed6f.png&#34; alt=&#34;&#34; width=&#34;2387&#34; height=&#34;1225&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;We trained the 8B models for 5 epochs, and the entire training process lasted over 19 days and 14 hours on a single RTX 4090 card.&lt;/p&gt;
&lt;p&gt;Detailed metrics after completed fine-tuning (8B model):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;eval/loss&lt;/td&gt;
&lt;td&gt;0.8690009713172913&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;eval/runtime&lt;/td&gt;
&lt;td&gt;464.5158&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;eval/samples_per_second&lt;/td&gt;
&lt;td&gt;8.611&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;total_flos&lt;/td&gt;
&lt;td&gt;46121863674517000000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;train_loss&lt;/td&gt;
&lt;td&gt;0.8724352801788304&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;train_runtime&lt;/td&gt;
&lt;td&gt;1695168.0431&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;train_samples_per_second&lt;/td&gt;
&lt;td&gt;1.758&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;train/epoch&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;train/grad_norm&lt;/td&gt;
&lt;td&gt;0.17023593187332153&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;train/learning_rate&lt;/td&gt;
&lt;td&gt;6.584723441615452e-8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;train/loss&lt;/td&gt;
&lt;td&gt;0.8293&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Metrics after the training process (fine-tuning)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;And the DPO metrics are as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;eval/logits/chosen: 0.1370937079191208&lt;/li&gt;
&lt;li&gt;eval/logits/rejected: 0.07430506497621536&lt;/li&gt;
&lt;li&gt;eval/logps/chosen: -454.11962890625&lt;/li&gt;
&lt;li&gt;eval/logps/rejected :-764.1261596679688&lt;/li&gt;
&lt;li&gt;eval/loss: 0.05717926099896431&lt;/li&gt;
&lt;li&gt;eval/rewards/accuracies: 0.9372459053993224&lt;/li&gt;
&lt;li&gt;eval/rewards/chosen: -26.75682830810547&lt;/li&gt;
&lt;li&gt;eval/rewards/margins: 32.37759780883789&lt;/li&gt;
&lt;li&gt;eval/rewards/rejected: -59.134429931640625&lt;/li&gt;
&lt;li&gt;eval/runtime: 1,386.3177&lt;/li&gt;
&lt;li&gt;eval/samples_per_second: 2.838&lt;/li&gt;
&lt;li&gt;eval/steps_per_second: 1.42&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;The graph below shows the loss function during the entire training process of the model in the 70B architecture.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/40d18e2ee9-480.webp 480w, /assets/img/40d18e2ee9-768.webp 768w, /assets/img/40d18e2ee9-1024.webp 1024w, /assets/img/40d18e2ee9-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/40d18e2ee9.png&#34; alt=&#34;&#34; width=&#34;2370&#34; height=&#34;1122&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;We also trained the 70B model for 5 epochs, and the entire training process lasted over 1 month and 5 days on a single RTX A6000 ADA 48GB card, while the metrics after completed fine-tuning:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;eval/loss:0.7297297716140747&lt;/li&gt;
&lt;li&gt;eval/runtime:6,364.4589&lt;/li&gt;
&lt;li&gt;eval/samples_per_second:0.628&lt;/li&gt;
&lt;li&gt;eval/steps_per_second:0.628&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-after-training&#34;&gt;What after training?&lt;a class=&#34;headerlink&#34; href=&#34;#what-after-training&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Our models have one very interesting feature. &lt;strong&gt;At the moment, they can read text in any language and respond in Polish.&lt;/strong&gt; That’s why one of them, which we named &lt;a href=&#34;https://huggingface.co/radlab/pLLama3-8B-creator&#34;&gt;pLLama3-8B-creator&lt;/a&gt; , we employed to write articles for a certain project, which we’ll tell you about soon. Another one, &lt;a href=&#34;https://huggingface.co/radlab/pLLama3-8B-chat&#34;&gt;pLLama3-8B-chat&lt;/a&gt;, also has its part in it 🙂 Enjoy!&lt;/p&gt;
&lt;h2 id=&#34;huggingface&#34;&gt;Huggingface&lt;a class=&#34;headerlink&#34; href=&#34;#huggingface&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Of course! We make the model available for free on our &lt;a href=&#34;https://huggingface.co/radlab&#34;&gt;Hugging Face&lt;/a&gt;. The individual models:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;radlab/pLLama3-8B-chat at: https://huggingface.co/radlab/pLLama3-8B-chat&lt;/li&gt;
&lt;li&gt;radlab/pLLama3-8B-creator available: https://huggingface.co/radlab/pLLama3-8B-creator&lt;/li&gt;
&lt;li&gt;radlab/pLLama3-70B available: https://huggingface.co/radlab/pLLama3-70B&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Bon appetit and welcome! 🙂&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>RAG (problems?)</title>
    <link href="https://radlab.dev/en/2024-08-04/rag-i-problemy/"/>
    <id>https://radlab.dev/en/2024-08-04/rag-i-problemy/</id>
    <updated>2025-09-26T00:00:00Z</updated>
    <published>2024-08-04T00:00:00Z</published>
<category term="bi-encoder"/><category term="cross-encoder"/><category term="decoder"/><category term="encoder"/><category term="genai"/><category term="llm"/><category term="rag"/>    <summary>Today’s post will be a little different than usual. This time, we are not presenting a new model, but a description of the RAG method. The method is widely…</summary>
    <content type="html">&lt;p&gt;Today’s post will be a little different than usual. This time, we are not presenting a new model, but a description of the RAG method. The method is widely known, so this post will focus more on the problems that arise when implementing systems that use RAG than on the description of the method itself.&lt;/p&gt;
&lt;p&gt;To explain RAG in a few words, it is an information retrieval method combined (in the results presentation layer) with a generative model/instruction model. The search mechanism and the reordering of search results are responsible for finding text fragments that contain the answer to the user’s question. The text fragments are then applied to the generative model in such a way that the model can use them to answer the user’s question. And that’s it in a nutshell 😉&lt;/p&gt;
&lt;p&gt;So what can RAG be used for? Since it is a search method, it can obviously be used for all kinds of search engines. However, an important aspect that distinguishes RAG from the standard method of searching document collections is the introduction of a generative model (&lt;em&gt;GenAI&lt;/em&gt;) to provide the final answer to the user. Thanks to the accuracy of the search engine itself and the ability of the GenAI model to answer questions based on context, RAG is ideal for searching and summarizing information scattered across multiple documents. Additionally, thanks to GenAI and its purpose of conducting chat conversations, we have the ability to influence the final form of the answer when asking a question. For example, imagine that we have a collection of documents in which we gather texts with different user opinions about various products. In this case, RAG would be ideal for answering the question:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What are the positive and negative opinions about product XYZ? Give three examples of positive and negative opinions and suggest responses to customer comments.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As you can see in the example, you can provide RAG not only with a search term, but also with detailed &lt;em&gt;instructions on how to respond.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In fig. 1, we have broken down the RAG process into smaller and more specific steps. There are six main modules that symbolize issues throughout the RAG pipeline. The minimum path in such a pipeline is marked with a red dotted line and a red arrow. The green line and green arrow show the optimal path in the pipeline, which can be called RAG. In this post, we have briefly described the individual steps, and their detailed elaborations will be published in subsequent posts.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/3fce57b3bf-480.webp 480w, /assets/img/3fce57b3bf-768.webp 768w, /assets/img/3fce57b3bf-1024.webp 1024w, /assets/img/3fce57b3bf-1440.webp 1440w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/3fce57b3bf.png&#34; alt=&#34;&#34; width=&#34;2328&#34; height=&#34;1220&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Fig. 1 RAG components (own work)&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;rag-in-pieces&#34;&gt;RAG in pieces&lt;a class=&#34;headerlink&#34; href=&#34;#rag-in-pieces&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;data&#34;&gt;Data&lt;a class=&#34;headerlink&#34; href=&#34;#data&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Data is a fundamental element of any system that uses machine learning (ML) methods. Depending on the problem that such an ML system solves, it must be provided with appropriate data. In the case of RAG- data refers to all kinds of texts in which answers can be found. It may therefore seem that nowadays, when you can find everything on the internet, a lack of data should not be a problem… This is partly true, but for the most part it is not 😉&lt;/p&gt;
&lt;p&gt;It is the abundance of data that introduces the problem of its location, availability under the appropriate license, and its quality, however understood. The selection of the origin of information from specific sources, the quality of the data itself, its readability, and detail are very important elements of the whole puzzle. Add to this the various file formats in which the information is stored (including &lt;em&gt;pdf&lt;/em&gt;), and we are faced with the task of integrating different sources into a common format. It is important to remember that if we enter data into the system that contains false information, or contains too little information, or is not detailed enough, then a system using the RAG method will provide answers based on this data, which may be incorrect.&lt;/p&gt;
&lt;p&gt;It is worth emphasizing once again that the final response of the system is generated on the basis of the data provided by the search engine. Therefore, if the search engine contains unreliable data, false and inaccurate information, then we will receive such responses. That is why it is worth taking the time to carefully select the set/create the collection of documents on which we will be working, and to take care of &lt;em&gt;data preprocessing.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;It is therefore safe to say that the quality of responses from such a system is strongly determined by the quality of the data used by that system.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;data-preprocessing&#34;&gt;Data Preprocessing&lt;a class=&#34;headerlink&#34; href=&#34;#data-preprocessing&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A very important element of the RAG system is &lt;em&gt;data preprocessing&lt;/em&gt;, i.e., its initial processing. Before the data enters the further process, it is worth introducing a certain standard for its quality. The aforementioned diversity of data records causes problems with reading them correctly. Automatic processing of data downloaded from websites, docx files, and pdf introduces a lot of noise into the data. From the perspective of the RAG system, it is important that the data contains relevant information. When data is loaded automatically, for example from a pdf file, we will read not only the relevant fragments, but also a whole lot of text, including chapter headings, fragmented tabular data, or worse — completely unreadable data, such as this (e.g., when there are images in the pdf file that are also difficult to OCR):&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;4kV�#4T��##�_#�p��W#�_�|3��-�tg�\S�x�b�X��t�]*���\&amp;amp;/#��/�P�
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Of course, it is difficult to do anything about this situation, but it is worth detecting such files and not allowing the data to pass further, already at the pre-processing stage. In our &lt;a href=&#34;https://radlab.dev/2024/04/20/odszumiacz-tekstow/&#34;&gt;previous post&lt;/a&gt; , we presented another problem with pdf files. After reading them, we get heavily distorted data, to quote an example from the post:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Strona...Tytuł...%6%z%50%|.....Zdecydowana0większość0czerwonych.karłów$należy#do,typu,widmowego%M,%ale%zalicza^się^do^nich^także^wieleHgwiazdHpóźnychHpodtypówHtypuHwidmowegoHKHorazHrzadkoHwystępujące,,najsłabsze,gwiazdy,typu,L.,Maksimum%intensywności%emitowanego%światła%przypada%w%zakresie%światła%czerwonego%lub%nawet%bliskiej%podczerwieni.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;From the perspective of further processing without proper cleaning of such data, this only causes problems. Indexing text that contains such illegible data will make it equally illegible for the search methods themselves. At this stage, it is important to be able to assess the data in terms of its quality and, as far as possible, bring it to a form close to ideal 😉 Is it worth introducing ML models for assessment and improvement at this stage?– Of course yes! Here is an example of how our &lt;a href=&#34;https://radlab.dev/2024/04/20/odszumiacz-tekstow/&#34;&gt;T5&lt;/a&gt; model works, cleaning texts from such situations:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Zdecydowana większość czerwonych karłów należy do typu widmowego M, ale zalicza się do nich także wiele gwiazd późnych podtypów typu widmowego K oraz rzadko występujące, najsłabsze gwiazdy typu L. Maksimum intensywności emitowanego światła przypada w zakresie światła czerwonego lub nawet bliskiej podczerwieni.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Maybe not perfect, but this form is good 😉&lt;/p&gt;
&lt;p&gt;What to do if your documents contain a lot of tables, drawings, or charts? It is worth considering using models that can interpret them and generate a description that can then be used to enrich the original text.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(…) It is also important to identify good and bad quality data and standardize it for further processing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;data-indexing&#34;&gt;Data indexing&lt;a class=&#34;headerlink&#34; href=&#34;#data-indexing&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This is a very important process in the entire RAG. After preliminary data processing, the data must be saved in a database, where it will then be searched. At this stage, it is worth introducing parallel text indexing in both relational and vector databases. The relational database will help to arrange a longer document in its original structure, while the vector database will enable semantic searching. A very important element in the indexing process is the method of indexing. It is at this stage that we decide which information from the previous step will be indexed, and where and how.&lt;/p&gt;
&lt;p&gt;First of all, we need to consider the purpose of the RAG system (specific field, specialist agent, general information) and select an appropriate model (&lt;a href=&#34;https://www.sbert.net/examples/applications/cross-encoder/README.html&#34;&gt;embedder&lt;/a&gt;) that will “understand” the indexed content well enough. It is the embedder that creates vector representations of texts that are indexed in vector databases (e.g., &lt;a href=&#34;https://milvus.io/&#34;&gt;Milvus&lt;/a&gt;), which are then searched. If, at this stage, the transformation of text into a vector is inaccurate, in other words, if we choose the wrong embedder model for the content we are indexing, this may result in poorer/less accurate quality in the comparison process. An indexing error can therefore be propagated to further processing steps. It is also important to choose the appropriate length of texts that are indexed as a single fragment. If the text is too long, it is worth dividing it into smaller parts called &lt;em&gt;chunks&lt;/em&gt; — that is, one text is divided into several smaller fragments.&lt;/p&gt;
&lt;p&gt;What if we index highly specific content for which no embedders are available? Of course, we are faced with the problem of finding another, more suitable model or training such a model from scratch. In one of our previous posts, we presented our preliminary  &lt;a href=&#34;https://radlab.dev/2024/04/30/dwa-nowe-modele-encoderow-dla-polskiego/&#34;&gt;embedder&lt;/a&gt; model, which was trained on web content.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(…) It is also important to select or train a specialist embedder and ensure appropriate indexing in databases.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;search&#34;&gt;Search&lt;a class=&#34;headerlink&#34; href=&#34;#search&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;One could say that things are somewhat simplified here, because at the search stage we use the same mechanisms to translate text into vector representation as at the indexing stage… Nothing could be further from the truth. This is only the case when we limit the search process to counting the similarity of vectors representing the query to chunks in the database. Most often, the cosine of the angle between the query vector and the vectors stored in the vector database is calculated. These are the vectors that we stored during the data indexing stage. However, as we mentioned earlier, &lt;em&gt;it depends on what information we index, and where and how.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If, at the indexing stage, we enrich the information about the indexed fragments with additional metadata, it is at this step that we are able to preliminarily filter out those chunks that are 100% incorrect. For example, if we enrich the description of a chunk with its category, then at this stage, before semantic comparison using a search engine, we can limit the search space only to those that come from the specified category.&lt;/p&gt;
&lt;p&gt;Therefore, it is worth considering the option of limiting semantic search by additional dimensions. Will additional ML methods be useful for this? Of course they will. It is just a matter of imagination and the purpose of a given model.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(…) Additional meta-information about chunks can be very helpful during search, e.g., limiting results only to documents from a specific category.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;changing-the-order-of-ranking-results&#34;&gt;Changing the order of ranking results&lt;a class=&#34;headerlink&#34; href=&#34;#changing-the-order-of-ranking-results&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Okay, but what if, after filtering and searching for information, we still have trouble choosing which of the found chunks is the most relevant? This is where the &lt;em&gt;process of reranking&lt;/em&gt; the order of results returned by the search engine comes in handy. One of the standard approaches is to use &lt;em&gt;&lt;a href=&#34;https://www.sbert.net/examples/applications/cross-encoder/README.html&#34;&gt;cross-encoders&lt;/a&gt;&lt;/em&gt; models, which, if properly trained, can determine the degree of relevance of the query to the chunk found. Of course, as in the case of an embedder, if the reranker model is not properly matched to the specifics of the data, the result may be the opposite of what is expected 😉&lt;/p&gt;
&lt;p&gt;What should you do in such a situation? There are two main approaches:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;after gaining a better understanding of the field and conducting more thorough research, you can make a more informed choice of a different one,&lt;/li&gt;
&lt;li&gt;or you can train a specialized reranker yourself, tailored to the problem.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both approaches have advantages and disadvantages. The first one is faster, but (a) there is no guarantee that there is a model that we need, (b) if we agree on a model, we accept its accuracy in our problem. The approach involving training or retraining our own model will likely be much more costly due to the time needed to develop it. However, there is a good chance that such a model will be much more accurate than the available ones, which will improve the quality of the final RAG system. So what should we choose? It depends on the situation… 😉&lt;/p&gt;
&lt;p&gt;Of course, in the &lt;em&gt;reranking process,&lt;/em&gt; we are not limited to operating only on cross-encoder models. At this stage, we get potential fragments that contain the answer, so only our imagination limits us here in terms of what can be done… Is it worth using specialized models here? Absolutely.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(…) Matching the relevance of the chunk to the given question is a very important step. An inappropriate change in the ranking order of documents may result in texts containing important information being rejected just before they are submitted to GenAI, which can significantly spoil the final result.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;generating-responses&#34;&gt;Generating responses&lt;a class=&#34;headerlink&#34; href=&#34;#generating-responses&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;And finally, we are here, at the stage that makes the biggest impression on the end user. It is only at this stage that GenAI comes into play—as an element that constructs the response, which is presented as an answer to the RAG system user.&lt;/p&gt;
&lt;p&gt;All of the steps mentioned above constitute a stream of data preprocessing, searching, selection, and determining the relevance of partial results to the user’s query. It is these steps that largely determine whether the final answer will be relevant or not. Incorrectly selected data at this stage will cause the GenAI model to &lt;em&gt;hallucinate&lt;/em&gt;. It is also important that the GenAI model we use to generate responses is also properly trained in the task of answering questions. When we talk about GenAI, we tend to think of instruction models. It is therefore important that such a GenAI not only understands the language and is able to respond in that language, but also responds appropriately to instructions. Its task will be to summarize all the fragments/chunks returned from the previous steps. So it is important that such a model is primarily able to respond to instructions for answering questions based on the context provided in the form of chunks.&lt;/p&gt;
&lt;p&gt;Instruction models are usually very large models, starting with the smaller 8B (&lt;em&gt;billions&lt;/em&gt;), through 70B, 405B, and more parameters. This brings us to another question — should we use an on-premises model or a cloud model? Of course, it all depends on the purpose of the system and the ability to transfer data via the internet to external services such as ChatGPT. If you choose a locally queried generative model, the question remains, as in all previous steps… the right model for the problem at hand 🙂 And what model? That’s a separate story.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(…) The previous steps are important, but equally important is the right choice of GenAI, which will generate the final response. It can ruin the whole impression.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;a class=&#34;headerlink&#34; href=&#34;#conclusion&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let’s put it all together 😉&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It is safe to say that the quality of responses from such a system is strongly determined by the quality of the data used by the system. It is also important to identify good and bad quality data and standardize it for further processing. It is also important to select or train a specialized embedder and ensure proper indexing in databases. Additional meta-information about chunks can be very helpful during searches, e.g., limiting results to documents from a specific category. Matching the relevance of a chunk to a given question is a very important step. Inappropriate changes to the ranking of documents may result in texts with important information being rejected just before they are submitted to GenAI, which can significantly spoil the final result. The previous steps are important, but equally important is the appropriate selection of GenAI, which will generate the final answer. It is GenAI that can spoil the whole impression.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;PPS&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;And soon we will publish our GenAI model — pLLama, an LLama model trained in Polish 😉&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tools for RAG Architecture:&lt;/strong&gt; To manage request routing across local/cloud model engines and protect enterprise prompts against personal data leaks, check out &lt;a href=&#34;/en/products/llm-router/&#34;&gt;LLM Router&lt;/a&gt; and &lt;a href=&#34;/en/products/pii-masker/&#34;&gt;PII Masker&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;unlock-the-potential-of-your-data-with-our-mlnlp-bon-appetit&#34;&gt;Unlock the potential of your data with our ML/NLP. Bon appetit! 😉&lt;a class=&#34;headerlink&#34; href=&#34;#unlock-the-potential-of-your-data-with-our-mlnlp-bon-appetit&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;</content>
  </entry>
  <entry>
    <title>Bi-encoder and cross-encoder model</title>
    <link href="https://radlab.dev/en/2024-04-30/dwa-nowe-modele-encoderow-dla-polskiego/"/>
    <id>https://radlab.dev/en/2024-04-30/dwa-nowe-modele-encoderow-dla-polskiego/</id>
    <updated>2025-09-26T00:00:00Z</updated>
    <published>2024-04-30T00:00:00Z</published>
    <summary>The possibilities offered by generative models are enormous, as evidenced by the success of OpenAI and its flagship product, ChatGPT. Generative models based…</summary>
    <content type="html">&lt;p&gt;The possibilities offered by generative models are enormous, as evidenced by the success of &lt;a href=&#34;https://openai.com/&#34;&gt;OpenAI&lt;/a&gt;  and its flagship product, &lt;a href=&#34;https://chat.openai.com&#34;&gt;ChatGPT&lt;/a&gt;. Generative models based on transformer architecture are on par with humans in terms of content creation, whether in the form of text, images, or more complex animations. Despite their powerful &lt;em&gt;generative&lt;/em&gt; capabilities, they have one fundamental drawback: updating information in these models. When querying such a model for information from the everyday world that goes beyond the training set, it is virtually impossible for the model to provide the correct answer. One solution to this problem is an approach based on Retrieval Augmented Generation (RAG).&lt;/p&gt;
&lt;h3 id=&#34;retrieval-augmented-generation&#34;&gt;Retrieval Augmented Generation&lt;a class=&#34;headerlink&#34; href=&#34;#retrieval-augmented-generation&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The idea behind RAG is to separate the i&lt;em&gt;nformation layer&lt;/em&gt; from the generative model. The information layer is a form of database where information is stored, while the generative model is used to provide answers based on information retrieved from the database. What does this approach offer? A lot. 😉&lt;/p&gt;
&lt;p&gt;It introduces a breakthrough in NLP, where the previously used Retrieval Information approaches (replaced by new mechanisms), combined with well-functioning generative models, are able to provide the latest information. Since this information is stored in a database, it can be updated on an ongoing basis. When a piece of information becomes outdated, it can simply be &lt;em&gt;removed&lt;/em&gt; from the database. As a result, when providing an answer, the generative model will not receive this information as context for its response, which will limit the model’s hallucinations.&lt;/p&gt;
&lt;h3 id=&#34;machinery&#34;&gt;Machinery&lt;a class=&#34;headerlink&#34; href=&#34;#machinery&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;So what is needed to implement the RAG approach? In the simplest case, it is a few mechanisms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a mechanism that convert text into vector form (hereinafter referred to as an embedder);&lt;/li&gt;
&lt;li&gt;a database that allows indexed texts to be stored and searched (e.g., Milvus );&lt;/li&gt;
&lt;li&gt;a generative model that will provide answers based on the context provided (e.g., LLama3 from MetaAI ).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In more complex cases, not only the information retrieval process is controlled, but also the collection of texts returned by the search engine.&lt;/p&gt;
&lt;h3 id=&#34;embedder-and-reranker-model&#34;&gt;Embedder and reranker model&lt;a class=&#34;headerlink&#34; href=&#34;#embedder-and-reranker-model&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In today’s post, we would like to present our two models. The first one is an &lt;em&gt;&lt;a href=&#34;https://huggingface.co/radlab/polish-bi-encoder-mean&#34;&gt;embedder&lt;/a&gt;&lt;/em&gt;, that can be used to transform text into vector form. The second one is a mechanism that &lt;em&gt;&lt;a href=&#34;https://huggingface.co/radlab/polish-cross-encoder&#34;&gt;reranking&lt;/a&gt;&lt;/em&gt; the results returned by a semantic search engine. The technical difference between an &lt;em&gt;embedder&lt;/em&gt; (bi-encoder) and a &lt;em&gt;reranker&lt;/em&gt; (cross-encoder) is very well presented in &lt;a href=&#34;https://sbert.net/examples/applications/cross-encoder/README.html&#34;&gt;this article&lt;/a&gt;. In a nutshell: we train the bi-encoder model on a semantic similarity process, where the evaluation function is the indicated semantic distance, in our case the cosine angle measure. In the case of a cross-encoder, the model is trained on the value of the loss function, resulting from the correlation of the model’s responses to the test set.&lt;/p&gt;
&lt;p&gt;We used the &lt;a href=&#34;https://sbert.net/&#34;&gt;sentence-transformers&lt;/a&gt; library to build these models. The loss function for the bi-encoder model is the cosine distance, and for the cross-encoder it is &lt;a href=&#34;https://github.com/yym6472/ConSERT/blob/master/sentence_transformers/cross_encoder/evaluation/CECorrelationEvaluator.py&#34;&gt;CECorrelationEvaluator&lt;/a&gt;. As a dataset, we used existing information retrieval datasets, e.g.,  &lt;a href=&#34;https://huggingface.co/datasets/ipipan/maupqa&#34;&gt;ipipan/maupqa&lt;/a&gt;, which we enriched with our &lt;a href=&#34;https://huggingface.co/datasets/radlab/polish-sts-dataset&#34;&gt;radlab/polish-sts-dataset&lt;/a&gt;. Of course, in both cases, these datasets had to be transformed accordingly and adapted to the problem of training the bi-encoder and cross-encoder.&lt;/p&gt;
&lt;h4 id=&#34;bi-encoder&#34;&gt;“bi-encoder”&lt;a class=&#34;headerlink&#34; href=&#34;#bi-encoder&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The bi-encoder model trained for 1 day and 9 hours on a single NVIDIA GeForce RTX 4090 card. The Pearson and Spearman correlation values, measured on the evaluation set, are as follows:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/1e2a0b4331-480.webp 480w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/1e2a0b4331.png&#34; alt=&#34;&#34; width=&#34;499&#34; height=&#34;74&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;What is most interesting from our perspective is the correlation for &lt;em&gt;Cosine-Similariy&lt;/em&gt;. The correlation values are high, and in both cases, they can be interpreted as a strong and fairly strong correlation. This means that the model’s responses strongly correlate with the test data. The published bi-encoder model has an averaged pooling layer. It can be used to create embeddings from text and compare them semantically. Link to the model on huggigface: &lt;a href=&#34;https://huggingface.co/radlab/polish-bi-encoder-mean&#34;&gt;radlab/polish-bi-encoder-mean&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sample code to load the model using sentence-transformers, which will create a vector representation for the specified texts:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sentence_transformers&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SentenceTransformer&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sentences&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Ala ma kota i psa, widzi dzisiaj też śnieg&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Ewa ma białe zęby&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SentenceTransformer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;radlab/polish-bi-encoder-mean&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;embeddings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sentences&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;embeddings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id=&#34;cross-encoder&#34;&gt;“cross-encoder”&lt;a class=&#34;headerlink&#34; href=&#34;#cross-encoder&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;We have also made available a &lt;em&gt;cross-encoder&lt;/em&gt; model that returns the relevance value of two texts. It can, of course, be used as a &lt;em&gt;reranker&lt;/em&gt;, e.g., in a semantic search engine. What might such a process look like? As usual- it’s simple 🙂&lt;/p&gt;
&lt;p&gt;As a result of a semantic search, we get a set of texts that are ranked according to the similarity of one text fragment to another – the one being searched for. This set is the perfect input for a model whose goal is not only to determine the similarity between two text fragments, but also to determine which fragment better matches the searched text.&lt;/p&gt;
&lt;p&gt;We have also made the finished reranking model available on huggingface in the &lt;a href=&#34;https://huggingface.co/radlab/polish-cross-encoder&#34;&gt;radlab/polish-cross-encoder&lt;/a&gt; repository. This model was trained on a single NVIDIA GeForce RTX 4090 card for 3 days and 10 hours. Pearson and Spearman correlation on the test set:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pearson Correlation : 0.9360742942528038&lt;/li&gt;
&lt;li&gt;Spearman Correlation : 0.8718174291678207&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The values of both correlations, as in the case of the bi-encoder, are interpreted as a strong and fairly strong correlation between the model’s responses and the test set.&lt;/p&gt;
&lt;p&gt;Sample code (using sentence-transformers) that assigns responses to questions:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kc&#34;&gt;fr&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;om&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;se&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nten&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ce_&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;transf&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ormers.cross_e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;coder&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;impor&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;CrossE&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;coder&lt;/span&gt;

&lt;span class=&#34;err&#34;&gt;model_pa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;radlab/polish-cross-encoder&amp;quot;&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;CrossE&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;coder(model_pa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h)&lt;/span&gt;

&lt;span class=&#34;err&#34;&gt;ques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Jaką mamy dziś pogodę? bo Andrzej nic nie mówił.&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Gdzie jedzie Andrzej? Bo wczoraj był w Warszawie.&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Czy oskarżony się zgadza z przedstawionym wyrokiem?&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Pan Andrzej siedzi w pociągu i jedzie do Wiednia. Ogląda na telefonie zabawne filmiki.&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Poada deszcz i jest wilgotno, jednak wczoraj było słonecznie.&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Wyrok jest prawomocny i nie podlega dalszym rozważaniom.&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;co&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nte&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h_ques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;resul&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;sor&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d(&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nu&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;mera&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(model.predic&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(co&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nte&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;_wi&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;h_ques&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ms()&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;key=lambda&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;reverse=True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pri&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;QUESTION: {question}&amp;quot;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pri&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ANSWERS (sorted):&amp;quot;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;resul&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pri&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;\t[{score}]\t{answers[idx]}&amp;quot;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pri&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nt&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The result of calling the above code should be similar to:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;QUESTION&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Jaką&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;mamy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dziś&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pogodę?&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;bo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;drzej&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ic&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;mówił.&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;ANSWERS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(sor&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.016749681904911995&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Poada&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;deszcz&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jes&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wilgo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tn&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jed&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;na&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wczoraj&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;było&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;sło&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ne&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;cz&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ie.&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.01602918468415737&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Pa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;drzej&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;siedzi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pociągu&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jedzie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Wied&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ogląda&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;na&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;telef&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;zabaw&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ne&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ilmiki.&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.016013670712709427&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Wyrok&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jes&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;prawomoc&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;podlega&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dalszym&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;rozważa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;iom.&lt;/span&gt;

&lt;span class=&#34;err&#34;&gt;QUESTION&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Gdzie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jedzie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;drzej?&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Bo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wczoraj&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;był&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Warszawie.&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;ANSWERS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(sor&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.5997582674026489&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Pa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;drzej&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;siedzi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pociągu&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jedzie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Wied&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ogląda&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;na&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;telef&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;zabaw&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ne&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ilmiki.&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.4528200924396515&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Wyrok&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jes&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;prawomoc&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;podlega&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dalszym&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;rozważa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;iom.&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.17350871860980988&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Poada&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;deszcz&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jes&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wilgo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tn&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jed&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;na&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wczoraj&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;było&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;sło&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ne&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;cz&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ie.&lt;/span&gt;

&lt;span class=&#34;err&#34;&gt;QUESTION&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Czy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;oskarżo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;się&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;zgadza&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;z&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;przeds&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ta&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wio&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ym&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wyrokiem?&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;ANSWERS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;(sor&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;te&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;d)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.8431766629219055&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Wyrok&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jes&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;prawomoc&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;podlega&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;dalszym&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;rozważa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;iom.&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.6823258996009827&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Poada&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;deszcz&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jes&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wilgo&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;tn&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jed&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;na&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;wczoraj&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;było&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;sło&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ne&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;cz&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ie.&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.558414101600647&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Pa&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;drzej&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;siedzi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;pociągu&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;jedzie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Wied&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ia.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ogląda&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;na&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;telef&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;zabaw&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;ne&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ilmiki.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id=&#34;outro&#34;&gt;Outro&lt;a class=&#34;headerlink&#34; href=&#34;#outro&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Both models presented today can be easily used to build a system based on the RAG approach. They can also be used as independently operating models. However, it is worth noting that the performance measured by the cross-encoder model’s operating time is incomparably lower than that of the bi-encoder model. Therefore, in the final solution, it is recommended to combine both models into a single pipeline. In the first step, based on text embeddings, the most similar fragments are searched for in the database, and then the question is matched to a limited set of answers based on the returned fragments.&lt;/p&gt;
&lt;p&gt;Of course, for more models, visit our &lt;a href=&#34;https://huggingface.co/radlab&#34;&gt;huggingface&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;unlock-the-potential-of-your-data-with-our-mlnlp-bon-appetit&#34;&gt;Unlock the potential of your data with our ML/NLP. Bon appetit! 😉&lt;a class=&#34;headerlink&#34; href=&#34;#unlock-the-potential-of-your-data-with-our-mlnlp-bon-appetit&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;</content>
  </entry>
  <entry>
    <title>Text denoiser</title>
    <link href="https://radlab.dev/en/2024-04-20/odszumiacz-tekstow/"/>
    <id>https://radlab.dev/en/2024-04-20/odszumiacz-tekstow/</id>
    <updated>2025-09-24T00:00:00Z</updated>
    <published>2024-04-20T00:00:00Z</published>
    <summary>Currently, the world of natural language processing is dominated by solutions based on transformer architecture models. The diversity of these models has…</summary>
    <content type="html">&lt;p&gt;Currently, the world of natural language processing is dominated by solutions based on &lt;em&gt;transformer&lt;/em&gt; architecture models. The diversity of these models has practically dominated every area of NLP. Regardless of their architecture and purpose, however, they have one thing in common: a high demand for good-quality data, which is used to train these models.&lt;/p&gt;
&lt;h2 id=&#34;the-problem-to-be-solved&#34;&gt;The problem to be solved&lt;a class=&#34;headerlink&#34; href=&#34;#the-problem-to-be-solved&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So where can the data be obtained? Of course, it depends on the specific case and purpose of the model. And data, as data, is often stored in various formats, including one of the least accessible for automatic processing, namely &lt;em&gt;pdf&lt;/em&gt;. The concept of saving in &lt;em&gt;pdf&lt;/em&gt; format is primarily to present the saved content so that the graphic form is the same in any reader on any device. However, when automatically processing these files, problems with reading the content may be encountered.&lt;/p&gt;
&lt;p&gt;An example of a problem with text that occurs after reading a poor-quality &lt;em&gt;pdf&lt;/em&gt; file:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Strona...Tytuł...%6%z%50%|.....Zdecydowana0większość0czerwonych.karłów$należy#do,typu,widmowego%M,%ale%zalicza^się^do^nich^także^wieleHgwiazdHpóźnychHpodtypówHtypuHwidmowegoHKHorazHrzadkoHwystępujące,,najsłabsze,gwiazdy,typu,L.,Maksimum%intensywności%emitowanego%światła%przypada%w%zakresie%światła%czerwonego%lub%nawet%bliskiej%podczerwieni.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The correct form of this text is:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Zdecydowana większość czerwonych karłów należy do typu widmowego M, ale zalicza się do nich także wiele gwiazd późnych podtypów typu widmowego K oraz rzadko występujące, najsłabsze gwiazdy typu L. Maksimum intensywności emitowanego światła przypada w zakresie światła czerwonego lub nawet bliskiej podczerwieni.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id=&#34;solution-to-the-problem&#34;&gt;Solution to the problem&lt;a class=&#34;headerlink&#34; href=&#34;#solution-to-the-problem&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Seeing many problems that are repetitive on a large scale, we developed a method of noise generator to data that resembles the problems encountered.The method is based on conditional probabilities and maps the distribution of problems from mass-processed texts. The developed collection contains 1 M texts, from which we randomly selected 100K for the &lt;em&gt;noise removal&lt;/em&gt; model training process.&lt;/p&gt;
&lt;h2 id=&#34;training-the-noise-remover&#34;&gt;Training the noise remover&lt;a class=&#34;headerlink&#34; href=&#34;#training-the-noise-remover&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We used a pre-trained base model in the T5 &lt;a href=&#34;https://huggingface.co/allegro/plt5-base&#34;&gt;allegro/plt5-base&lt;/a&gt; architecture, which we trained on the data cleaning problem. Training the model took 5 hours and 30 minutes on a single NVIDIA GeForce RTX 4090 card. &lt;em&gt;Loss function&lt;/em&gt; graph for the evaluation set:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&#34;image/webp&#34; srcset=&#34;/assets/img/0afa4fccf9-480.webp 480w, /assets/img/0afa4fccf9-768.webp 768w, /assets/img/0afa4fccf9-1024.webp 1024w&#34; sizes=&#34;(max-width: 760px) 100vw, 720px&#34;&gt;&lt;img src=&#34;/assets/img/0afa4fccf9.png&#34; alt=&#34;&#34; width=&#34;1105&#34; height=&#34;664&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&#34;example-of-operation&#34;&gt;Example of operation&lt;a class=&#34;headerlink&#34; href=&#34;#example-of-operation&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We have made the trained model available on our &lt;a href=&#34;https://huggingface.co/radlab&#34;&gt;huggingface&lt;/a&gt; repository &lt;a href=&#34;https://huggingface.co/radlab/polish-denoiser-t5-base&#34;&gt;radlab/polish-denoiser-t5-base&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The input to the model is text in the form: &lt;code&gt;denoise: &amp;lt;text to noise remover&amp;gt;.&lt;/code&gt; For the example above, it is:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;denoise: Strona...Tytuł...%6%z%50%|.....Zdecydowana0większość0czerwonych.karłów$należy#do,typu,widmowego%M,%ale%zalicza^się^do^nich^także^wieleHgwiazdHpóźnychHpodtypówHtypuHwidmowegoHKHorazHrzadkoHwystępujące,,najsłabsze,gwiazdy,typu,L.,Maksimum%intensywności%emitowanego%światła%przypada%w%zakresie%światła%czerwonego%lub%nawet%bliskiej%podczerwieni.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The output from the model looks like this:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Zdecydowana większość czerwonych karłów należy do typu widmowego M, ale zalicza się do nich także wiele gwiazd późnych podtypów typu widmowego K oraz rzadko występujące, najsławsze gwiazdy typu L. Maksimum intensywności emitowanego światła przypada w zakresie światła czerwonego lub nawet bliskiej podczerwieni.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sample code that allows you to run the model for the text from the example above:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;transformers&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T5ForConditionalGeneration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T5Tokenizer&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;do_inference&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tokenizer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;input_text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;denoise: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tokenizer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;input_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;return_tensors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;pt&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;max_length&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;max_length&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;truncation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

    &lt;span class=&#34;n&#34;&gt;corrected_ids&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;max_length&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;num_beams&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;early_stopping&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

    &lt;span class=&#34;n&#34;&gt;corrected_sentence&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tokenizer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;corrected_ids&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;skip_special_tokens&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;corrected_sentence&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T5ForConditionalGeneration&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_pretrained&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;radlab/polish-denoiser-t5-base&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;tokenizer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T5Tokenizer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_pretrained&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;radlab/polish-denoiser-t5-base&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;text_str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Strona...Tytuł...&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%6%&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;z&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%50%&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|.....Zdecydowana0większość0czerwonych.karłów$należy#do,typu,widmowego%M,&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%a&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;le%zalicza^się^do^nich^także^wieleHgwiazdHpóźnychHpodtypówHtypuHwidmowegoHKHorazHrzadkoHwystępujące,,najsłabsze,gwiazdy,typu,L.,Maksimum&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;ntensywności&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%e&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;mitowanego%światła%przypada%w%zakresie%światła&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%c&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;zerwonego&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%lu&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;b%nawet%bliskiej%podczerwieni.&amp;quot;&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;do_inference&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tokenizer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Feel free to use it, bon appétit 🙂&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prompt Sanitization &amp;amp; Security:&lt;/strong&gt; For production-grade personal data anonymization and masking before inference, explore &lt;a href=&#34;/en/products/pii-masker/&#34;&gt;PII Masker&lt;/a&gt; and the &lt;a href=&#34;/en/products/llm-router/&#34;&gt;LLM Router&lt;/a&gt; gateway.&lt;/p&gt;
&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <title>Extraction QA – our model polish-qa-v2</title>
    <link href="https://radlab.dev/en/2024-04-15/ekstrakcyjne-qa-nasz-model-polish-qa-v2/"/>
    <id>https://radlab.dev/en/2024-04-15/ekstrakcyjne-qa-nasz-model-polish-qa-v2/</id>
    <updated>2025-09-24T00:00:00Z</updated>
    <published>2024-04-15T00:00:00Z</published>
    <summary>In the field of natural language processing, innovative solutions are constantly emerging that enable precise answers to questions in different languages. We…</summary>
    <content type="html">&lt;p&gt;In the field of natural language processing, innovative solutions are constantly emerging that enable precise answers to questions in different languages. We present the &lt;a href=&#34;https://huggingface.co/radlab/polish-qa-v2&#34;&gt;polish-qa-v2&lt;/a&gt; model, which represents a step forward in our research on matching questions with answers using large language models.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://huggingface.co/radlab/polish-qa-v2&#34;&gt;polish-qa-v2&lt;/a&gt; model is an example of an extractive QA model that specializes in extracting the most relevant fragment of text to provide a precise answer to a question. Unlike generative models, which create answers from scratch, extractive models limit themselves to selecting existing text fragments as answers to questions.&lt;/p&gt;
&lt;h2 id=&#34;example-of-use&#34;&gt;Example of use&lt;a class=&#34;headerlink&#34; href=&#34;#example-of-use&#34; title=&#34;Permanent link&#34;&gt; &lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;transformers&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;model_path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;radlab/polish-qa-v2&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;question_answerer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
  &lt;span class=&#34;s2&#34;&gt;&amp;quot;question-answering&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;model_path&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Jakie silniki posiadał okręt?&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&amp;quot;Okręt był napędzany przez trzy trzycylindrowe maszyny parowe potrójnego rozprężania, które napędzały poprzez wały napędowe trzy śruby napędowe (dwie trójskrzydłowe&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;zewnętrzne o średnicy 4,5 metra i czteroskrzydłową o średnicy 4,2 metra).&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;Para była dostarczana przez cztery kotły wodnorurkowe typu Marine,&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;wyposażone łącznie w osiem palenisk i osiem kotłów cylindrycznych,&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;które miały łącznie 32 paleniska. Ciśnienie robocze kotłów wynosiło 12 at,&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;a ich łączna powierzchnia grzewcza 3560 m². Wszystkie kotły były opalane węglem,&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;którego normalny zapas wynosił 650, a maksymalny 1070 ton.&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;Nominalna moc siłowni wynosiła 13 000 KM (maksymalnie 13 922 KM przy 108 obr./min),&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;co pozwalało na osiągnięcie prędkości maksymalnej od 17,5 do 17,6 węzła.&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;Zasięg wynosił 3420 mil morskich przy prędkości 10 węzłów. Zużycie węgla przy mocy 10 000 KM&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;wynosiło około 11 ton na godzinę, a przy mocy maksymalnej 16 ton na godzinę.&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;question_answerer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After executing the above code, the following result is obtained:&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;score&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.612459123134613&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;start&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;end&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;84&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;answer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39; trzy trzycylindrowe maszyny parowe potrójnego rozprężania,&amp;#39;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The experiment is based on the &lt;a href=&#34;https://huggingface.co/sdadas/polish-roberta-large-v2&#34;&gt;sdadas/polish-roberta-large-v2&lt;/a&gt; model, which we trained on the &lt;a href=&#34;https://huggingface.co/datasets/clarin-pl/poquad&#34;&gt;clarin-pl/poquad&lt;/a&gt; dataset. Training took 2 hours on a single RTX 3090 Ti graphics card.&lt;/p&gt;
&lt;p&gt;polish-qa-v2 is available at &lt;a href=&#34;https://huggingface.co/radlab/polish-qa-v2&#34;&gt;https://huggingface.co/radlab/polish-qa-v2&lt;/a&gt;, where you can test it without having to run it locally. For those interested, we provide the entire model for download at the same link.&lt;/p&gt;
&lt;p&gt;We invite you to read.&lt;/p&gt;</content>
  </entry>
</feed>