<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Guides on Llamatik Documentation</title><link>http://docs.llamatik.com/v1-legacy/guides/</link><description>Recent content in Guides on Llamatik Documentation</description><generator>Hugo</generator><language>en-us</language><copyright>Copyright © 2026 Llamatik. All rights reserved.</copyright><atom:link href="http://docs.llamatik.com/v1-legacy/guides/index.xml" rel="self" type="application/rss+xml"/><item><title>Embeddings</title><link>http://docs.llamatik.com/v1-legacy/guides/embeddings/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/embeddings/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;Embeddings convert text into vectors that preserve semantic meaning.
They are a foundation for search, retrieval, similarity ranking, clustering, and RAG pipelines.&lt;/p&gt;
&lt;h2 id="initialization"&gt;Initialization&lt;a class="anchor" href="#initialization"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; ok = &lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.initEmbedModel(modelPath)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;check(ok)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Use an embedding model here, not your general chat model.&lt;/p&gt;
&lt;h2 id="generating-vectors"&gt;Generating vectors&lt;a class="anchor" href="#generating-vectors"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; v1 = &lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.embed(&lt;span style="color:#e6db74"&gt;&amp;#34;What is Llamatik?&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; v2 = &lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.embed(&lt;span style="color:#e6db74"&gt;&amp;#34;Kotlin llama.cpp bindings&amp;#34;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The returned &lt;code&gt;FloatArray&lt;/code&gt; can be stored directly or passed into your vector search library.&lt;/p&gt;</description></item><item><title>Text generation</title><link>http://docs.llamatik.com/v1-legacy/guides/text-generation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/text-generation/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;Text generation is the core &lt;code&gt;LlamaBridge&lt;/code&gt; workflow.&lt;/p&gt;
&lt;h2 id="basic-one-shot-generation"&gt;Basic one-shot generation&lt;a class="anchor" href="#basic-one-shot-generation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Use &lt;code&gt;generate(...)&lt;/code&gt; when each request is independent.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; ok = &lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.initGenerateModel(modelPath)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;check(ok)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; answer = &lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generate(&lt;span style="color:#e6db74"&gt;&amp;#34;Explain Llamatik in one sentence.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;println(answer)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is the right choice for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one-off prompts&lt;/li&gt;
&lt;li&gt;utility screens&lt;/li&gt;
&lt;li&gt;simple summarization tasks&lt;/li&gt;
&lt;li&gt;commands that do not need chat history&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="context-aware-generation"&gt;Context-aware generation&lt;a class="anchor" href="#context-aware-generation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Use &lt;code&gt;generateWithContext(...)&lt;/code&gt; when you want to separate:&lt;/p&gt;</description></item><item><title>Streaming</title><link>http://docs.llamatik.com/v1-legacy/guides/streaming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/streaming/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;Streaming lets your app consume generation output incrementally.
This usually feels much better than waiting for the full answer, especially on-device where responses may take time.&lt;/p&gt;
&lt;h2 id="plain-streaming"&gt;Plain streaming&lt;a class="anchor" href="#plain-streaming"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generateStream(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; prompt = &lt;span style="color:#e6db74"&gt;&amp;#34;Stream a short poem.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; callback = &lt;span style="color:#66d9ef"&gt;object&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;: &lt;/span&gt;&lt;span style="color:#a6e22e"&gt;GenStream&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onDelta&lt;/span&gt;(text: String) = print(text)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onComplete&lt;/span&gt;() = println(&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;Done&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onError&lt;/span&gt;(message: String) = println(&lt;span style="color:#e6db74"&gt;&amp;#34;Error: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;$message&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="streaming-with-context"&gt;Streaming with context&lt;a class="anchor" href="#streaming-with-context"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generateStreamWithContext(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; systemPrompt = &lt;span style="color:#e6db74"&gt;&amp;#34;You are concise.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; contextBlock = &lt;span style="color:#e6db74"&gt;&amp;#34;Topic: on-device LLMs.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; userPrompt = &lt;span style="color:#e6db74"&gt;&amp;#34;Give me 3 bullet points.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; callback = &lt;span style="color:#66d9ef"&gt;object&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;: &lt;/span&gt;&lt;span style="color:#a6e22e"&gt;GenStream&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onDelta&lt;/span&gt;(text: String) = print(text)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onComplete&lt;/span&gt;() = println(&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;Done&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onError&lt;/span&gt;(message: String) = println(&lt;span style="color:#e6db74"&gt;&amp;#34;Error: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;$message&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="streaming-json"&gt;Streaming JSON&lt;a class="anchor" href="#streaming-json"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generateJsonStream(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; prompt = &lt;span style="color:#e6db74"&gt;&amp;#34;Return a JSON object for one task.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jsonSchema = schema,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; callback = &lt;span style="color:#66d9ef"&gt;object&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;: &lt;/span&gt;&lt;span style="color:#a6e22e"&gt;GenStream&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onDelta&lt;/span&gt;(text: String) = print(text)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onComplete&lt;/span&gt;() = println(&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;Done&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onError&lt;/span&gt;(message: String) = println(&lt;span style="color:#e6db74"&gt;&amp;#34;Error: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;$message&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="streaming-with-kv-cache-continuity"&gt;Streaming with KV cache continuity&lt;a class="anchor" href="#streaming-with-kv-cache-continuity"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every streaming function on &lt;code&gt;LlamaBridge&lt;/code&gt; (&lt;code&gt;generateStream&lt;/code&gt;, &lt;code&gt;generateStreamWithContext&lt;/code&gt;, etc.) resets the KV cache before each call by design. To keep the model&amp;rsquo;s memory across turns while streaming, you have two options.&lt;/p&gt;</description></item><item><title>Generation parameters</title><link>http://docs.llamatik.com/v1-legacy/guides/generation-parameters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/generation-parameters/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;Llamatik exposes runtime generation parameters through &lt;code&gt;updateGenerateParams(...)&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.updateGenerateParams(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; temperature = &lt;span style="color:#ae81ff"&gt;0.7f&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; maxTokens = &lt;span style="color:#ae81ff"&gt;256&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; topP = &lt;span style="color:#ae81ff"&gt;0.95f&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; topK = &lt;span style="color:#ae81ff"&gt;40&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; repeatPenalty = &lt;span style="color:#ae81ff"&gt;1.1f&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; contextLength = &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; numThreads = &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; useMmap = &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; flashAttention = &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; batchSize = &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gpuLayers = &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="sampling-parameters"&gt;Sampling parameters&lt;a class="anchor" href="#sampling-parameters"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="temperature"&gt;temperature&lt;a class="anchor" href="#temperature"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Controls randomness.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lower values: more deterministic&lt;/li&gt;
&lt;li&gt;higher values: more varied and creative&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="maxtokens"&gt;maxTokens&lt;a class="anchor" href="#maxtokens"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Sets the maximum number of tokens the model may generate.
Use this to control response length and latency.&lt;/p&gt;</description></item><item><title>Schema-constrained JSON</title><link>http://docs.llamatik.com/v1-legacy/guides/schema-constrained-json/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/schema-constrained-json/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;Llamatik can ask the model to return JSON and optionally constrain it to a JSON Schema.
This is one of the most useful features when you want AI output to plug into typed application logic.&lt;/p&gt;
&lt;h2 id="basic-json-generation"&gt;Basic JSON generation&lt;a class="anchor" href="#basic-json-generation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; json = &lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generateJson(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; prompt = &lt;span style="color:#e6db74"&gt;&amp;#34;Return a JSON object with fields: name (string), year (int).&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;println(json)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="json-schema-constrained-generation"&gt;JSON Schema constrained generation&lt;a class="anchor" href="#json-schema-constrained-generation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; schema = &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &amp;#34;type&amp;#34;: &amp;#34;object&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &amp;#34;additionalProperties&amp;#34;: false,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &amp;#34;properties&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &amp;#34;name&amp;#34;: { &amp;#34;type&amp;#34;: &amp;#34;string&amp;#34; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &amp;#34;year&amp;#34;: { &amp;#34;type&amp;#34;: &amp;#34;integer&amp;#34; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &amp;#34;required&amp;#34;: [&amp;#34;name&amp;#34;, &amp;#34;year&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;.trimIndent()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; json = &lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generateJson(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; prompt = &lt;span style="color:#e6db74"&gt;&amp;#34;Generate an example object.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jsonSchema = schema
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="with-context"&gt;With context&lt;a class="anchor" href="#with-context"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; json = &lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generateJsonWithContext(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; systemPrompt = &lt;span style="color:#e6db74"&gt;&amp;#34;You output only JSON.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; contextBlock = &lt;span style="color:#e6db74"&gt;&amp;#34;The product is Llamatik.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; userPrompt = &lt;span style="color:#e6db74"&gt;&amp;#34;Return product metadata.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jsonSchema = schema
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="streaming-json"&gt;Streaming JSON&lt;a class="anchor" href="#streaming-json"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generateJsonStream(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; prompt = &lt;span style="color:#e6db74"&gt;&amp;#34;Return JSON for a grocery list with 3 items.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jsonSchema = schema,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; callback = &lt;span style="color:#66d9ef"&gt;object&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;: &lt;/span&gt;&lt;span style="color:#a6e22e"&gt;GenStream&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onDelta&lt;/span&gt;(text: String) = print(text)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onComplete&lt;/span&gt;() = println(&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;Done&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;override&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;fun&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onError&lt;/span&gt;(message: String) = println(&lt;span style="color:#e6db74"&gt;&amp;#34;Error: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;$message&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="why-this-matters"&gt;Why this matters&lt;a class="anchor" href="#why-this-matters"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Schema-constrained output reduces brittle post-processing and makes it easier to parse results with Kotlin serialization libraries.
It is especially useful for:&lt;/p&gt;</description></item><item><title>KV cache and sessions</title><link>http://docs.llamatik.com/v1-legacy/guides/kv-cache-and-sessions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/kv-cache-and-sessions/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;KV cache reuse is one of the most important performance features for chat-like experiences.
Instead of rebuilding the full prompt state from scratch for every turn, the model can continue from what it has already processed.&lt;/p&gt;
&lt;p&gt;There are three ways to use the KV cache:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;LlamaSession&lt;/code&gt;&lt;/strong&gt; — for streaming multi-turn conversations with an in-memory KV cache that persists across &lt;code&gt;stream()&lt;/code&gt; calls. Recommended for chat UIs that do not need cross-process persistence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;generateContinueStream&lt;/code&gt;&lt;/strong&gt; — streaming multi-turn generation with the global KV cache. Supports &lt;code&gt;sessionSave&lt;/code&gt;/&lt;code&gt;sessionLoad&lt;/code&gt; for persistence across restarts. The correct choice when you need both streaming and disk-serialized session state.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;generateContinue&lt;/code&gt;&lt;/strong&gt; — blocking (non-streaming) continuation. Use when you do not need incremental token delivery.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="core-methods-global"&gt;Core methods (global)&lt;a class="anchor" href="#core-methods-global"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.sessionReset()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.sessionSave(path)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.sessionLoad(path)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generateContinue(prompt) &lt;span style="color:#75715e"&gt;// blocking
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generateContinueStream(prompt, callback) &lt;span style="color:#75715e"&gt;// streaming&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="fresh-turn-vs-continued-turn"&gt;Fresh turn vs continued turn&lt;a class="anchor" href="#fresh-turn-vs-continued-turn"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="fresh-generation"&gt;Fresh generation&lt;a class="anchor" href="#fresh-generation"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; answer = &lt;span style="color:#a6e22e"&gt;LlamaBridge&lt;/span&gt;.generate(&lt;span style="color:#e6db74"&gt;&amp;#34;Explain Kotlin coroutines.&amp;#34;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Use this when the request is independent and you do not care about previous turns.&lt;/p&gt;</description></item><item><title>Stable Diffusion image generation</title><link>http://docs.llamatik.com/v1-legacy/guides/stable-diffusion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/stable-diffusion/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;StableDiffusionBridge&lt;/code&gt; lets you generate images locally from text prompts.
The bridge returns raw RGBA pixel data so your app can convert it into the most appropriate image type for the current platform.&lt;/p&gt;
&lt;h2 id="initialize-the-model"&gt;Initialize the model&lt;a class="anchor" href="#initialize-the-model"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; modelPath = &lt;span style="color:#a6e22e"&gt;StableDiffusionBridge&lt;/span&gt;.getModelPath(&lt;span style="color:#e6db74"&gt;&amp;#34;dreamshaper.safetensors&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; ok = &lt;span style="color:#a6e22e"&gt;StableDiffusionBridge&lt;/span&gt;.initModel(modelPath, threads = &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;check(ok)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="generate-an-image"&gt;Generate an image&lt;a class="anchor" href="#generate-an-image"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; rgba = &lt;span style="color:#a6e22e"&gt;StableDiffusionBridge&lt;/span&gt;.txt2img(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; prompt = &lt;span style="color:#e6db74"&gt;&amp;#34;A cinematic illustration of a llama explorer&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; negativePrompt = &lt;span style="color:#e6db74"&gt;&amp;#34;blurry, low quality, extra limbs&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; width = &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; height = &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; steps = &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cfgScale = &lt;span style="color:#ae81ff"&gt;7.0f&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; seed = &lt;span style="color:#ae81ff"&gt;1234L&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="understanding-the-result"&gt;Understanding the result&lt;a class="anchor" href="#understanding-the-result"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The output is an RGBA &lt;code&gt;ByteArray&lt;/code&gt;.
To display it, convert the bytes into your platform image type using the same width and height you requested.&lt;/p&gt;</description></item><item><title>Whisper speech-to-text</title><link>http://docs.llamatik.com/v1-legacy/guides/whisper-speech-to-text/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/whisper-speech-to-text/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;WhisperBridge&lt;/code&gt; is the speech-to-text entry point in Llamatik.
The library exposes two transcription methods: &lt;code&gt;transcribeWav&lt;/code&gt; for a simple flat string, and &lt;code&gt;transcribeWavSegments&lt;/code&gt; for structured per-segment output with timestamps, detected language, and speaker-turn boundaries.&lt;/p&gt;
&lt;h2 id="initialize-the-model"&gt;Initialize the model&lt;a class="anchor" href="#initialize-the-model"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; modelPath = &lt;span style="color:#a6e22e"&gt;WhisperBridge&lt;/span&gt;.getModelPath(&lt;span style="color:#e6db74"&gt;&amp;#34;ggml-base.en.bin&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; ok = &lt;span style="color:#a6e22e"&gt;WhisperBridge&lt;/span&gt;.initModel(modelPath)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;check(ok)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="transcribe-a-file"&gt;Transcribe a file&lt;a class="anchor" href="#transcribe-a-file"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;val&lt;/span&gt; text = &lt;span style="color:#a6e22e"&gt;WhisperBridge&lt;/span&gt;.transcribeWav(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; wavPath = &lt;span style="color:#e6db74"&gt;&amp;#34;/path/to/audio.wav&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; language = &lt;span style="color:#e6db74"&gt;&amp;#34;en&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;println(text)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="language-hint"&gt;Language hint&lt;a class="anchor" href="#language-hint"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;language&lt;/code&gt; parameter is optional, but supplying it can improve reliability when you already know the input language.&lt;/p&gt;</description></item><item><title>Multimodal vision (VLM)</title><link>http://docs.llamatik.com/v1-legacy/guides/multimodal-vision/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/multimodal-vision/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;MultimodalBridge&lt;/code&gt; lets you analyze images on-device using a vision-language model (VLM).
The model can describe scenes, answer questions about images, extract text, and reason about visual content.&lt;/p&gt;
&lt;h2 id="required-models"&gt;Required models&lt;a class="anchor" href="#required-models"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You need two files from the same VLM release:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A GGUF language model (e.g. &lt;code&gt;llava-v1.6-mistral-7b.Q4_K_M.gguf&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A multimodal projector (e.g. &lt;code&gt;llava-v1.6-mistral-7b-mmproj-model-f16.gguf&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The projector must match the language model — mixing files from different releases will produce incorrect or empty output.&lt;/p&gt;</description></item><item><title>Concurrent sessions</title><link>http://docs.llamatik.com/v1-legacy/guides/concurrent-sessions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/concurrent-sessions/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;LlamaSession&lt;/code&gt; lets you run multiple independent generation streams at the same time.
Each session has its own KV cache and cancel flag, so they do not interfere with one another.&lt;/p&gt;
&lt;h2 id="when-to-use-sessions"&gt;When to use sessions&lt;a class="anchor" href="#when-to-use-sessions"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The global &lt;code&gt;LlamaBridge.generateStream(...)&lt;/code&gt; works well for single-threaded chat flows.
Use &lt;code&gt;LlamaSession&lt;/code&gt; when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you want to compare responses to the same prompt from different system prompts side by side&lt;/li&gt;
&lt;li&gt;you have multiple users sharing a single JVM process&lt;/li&gt;
&lt;li&gt;you need a background task (summarization, classification) while the main chat is active&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="create-a-session"&gt;Create a session&lt;a class="anchor" href="#create-a-session"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sessions are created from &lt;code&gt;LlamaBridge&lt;/code&gt; after the generation model is loaded.
Pass a &lt;code&gt;name&lt;/code&gt; string to give the session a human-readable label:&lt;/p&gt;</description></item><item><title>Multi-Token Prediction (MTP)</title><link>http://docs.llamatik.com/v1-legacy/guides/multi-token-prediction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/multi-token-prediction/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;Multi-Token Prediction (MTP) is a speculative decoding technique where a lightweight draft head — embedded in the same GGUF file as the main model — predicts several tokens ahead of the trunk.
The trunk model then verifies all draft tokens in one batched forward pass and accepts the ones that match.&lt;/p&gt;
&lt;p&gt;The result is faster generation with no change in output quality.&lt;/p&gt;</description></item><item><title>Building from source</title><link>http://docs.llamatik.com/v1-legacy/guides/building-from-source/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://docs.llamatik.com/v1-legacy/guides/building-from-source/</guid><description>&lt;blockquote class="book-hint warning" &gt;

**⚠️ Legacy (v1.x)** — You are viewing the old documentation. [View current v2.0 docs](/)
&lt;/blockquote&gt;
&lt;p&gt;The pre-built Maven Central artifacts include CPU-only native binaries everywhere except macOS, where Metal is enabled by default. If you need a GPU backend such as Vulkan or CUDA you must build Llamatik from source and pass the appropriate CMake flags.&lt;/p&gt;
&lt;h2 id="extra-cmake-flags"&gt;Extra CMake flags&lt;a class="anchor" href="#extra-cmake-flags"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;llamatik.cmake.args&lt;/code&gt; Gradle property (or the &lt;code&gt;LLAMATIK_CMAKE_ARGS&lt;/code&gt; environment variable as a fallback) lets you append flags to the CMake configure step without editing the build script.&lt;/p&gt;</description></item></channel></rss>