<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
  <channel>
    <title>Liip Blog</title>
    <link>https://www.liip.ch/en/blog</link>
    <lastBuildDate>Fri, 04 Sep 2026 10:39:47 +0200</lastBuildDate>
            <item>
      <title>ChatGPT now speaks WebMCP, LiipGPT is ready</title>
      <link>https://www.liip.ch/en/blog/chatgpt-now-speaks-webmcp-liipgpt-is-ready</link>
      <guid>https://www.liip.ch/en/blog/chatgpt-now-speaks-webmcp-liipgpt-is-ready</guid>
      <pubDate>Fri, 04 Sep 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>Since the end of August, ChatGPT (Codex or Work) has supported WebMCP by default. Finally, the work we did six months ago <a href="https://www.liip.ch/en/blog/webmcp-making-liipgpt-tools-discoverable-by-browser-ai-agents">integrating WebMCP into LiipGPT</a> is paying off. And it's no longer just an obscure feature flag in Chrome that enables people to use it.</p>
<p>No more adding MCP servers manually to ChatGPT, just give it a hint where to look (I assume with a more obvious or well-known domain, it would figure that out by itself). Maybe not "no more," but hopefully less setup and more discovery. Authentication is also usually solved with WebMCP in the way users are used to: it runs in a browser session, where you might need to log in to a site first. No more OAuth workflows that are obscure to the casual user.</p>
<p>Example Question:</p>
<blockquote>
<p>When is the next cardboard collection at Quellenstrasse? Check <a href="https://zuericitygpt.ch">zuericitygpt.ch</a></p>
</blockquote>
<p>Answer in ChatGPT:</p>
<blockquote>
<p>The next cardboard collection on Quellenstrasse (8005) is Wednesday, 9 September 2026. (ZüriCityGPT)</p>
</blockquote>
<p>And it didn't just hallucinate it, or somehow find it otherwise, it actually called the MCP tool <code>get_waste_collection</code>.</p>
<p>It also works for follow up questions for a different place or even to check out a City Council resolution (Stadtratsbeschluss), because ZüriCityGPT has maybe the best approach to search for them (and everything else on the City of Zurich website, but that a normal WebSearch usually also figures out).</p>
<figure><a href="https://www.liip.ch/&lt;https://liip.rokka.io/dynamic/o-af-1/84cc51/chatgpt-webmcp.png&gt;" rel="noreferrer" target="_blank"><img alt="" src="https://liip.rokka.io/www_inarticle_5/84cc51/cleanshot-2026-09-03-at-22-21-34.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/84cc51/cleanshot-2026-09-03-at-22-21-34.jpg 2x"></a></figure>
<p>And because I like the approach a lot, I also added WebMCP to our instance of the <a href="https://www.liip.ch/en/blog/city-of-zurich-s-900-open-data-sets-now-have-an-mcp-server">City of Zurich Open Data MCP Server</a> at <a href="https://zurich-opendata-mcp.liipgpt.ch/">https://zurich-opendata-mcp.liipgpt.ch/</a></p>
<p>From the example question in <a href="https://github.com/malkreide/zurich-opendata-mcp">their GitHub repo</a>: </p>
<blockquote>
<p>How many free parking spots are in Zurich right now, and what's the air quality like? Check on <a href="https://zurich-opendata-mcp.liipgpt.ch/">https://zurich-opendata-mcp.liipgpt.ch/</a></p>
</blockquote>
<p>Answer in ChatGPT:</p>
<blockquote>
<p>The service reports 6,862 free spaces across 36 parking facilities, but that figure is not genuinely current: its timestamp is 18 July 2026, 05:27, and several capacity figures are internally inconsistent. So there’s no trustworthy “right now” parking total from this feed.<br />
Air quality is generally good, based on provisional hourly readings from 4 September 2026, 06:00:</p>
<ul>
<li>PM2.5: 4.2–7.0 µg/m³</li>
<li>PM10: 8.1–16.6 µg/m³</li>
<li>Ozone: 7.9–73.7 µg/m³</li>
<li>NO₂: 4.9–49.4 µg/m³ — highest near Schimmelstrasse and Rosengartenstrasse</li>
</ul>
<p>In short: low particulate pollution, with moderately elevated traffic-related NO₂ at central roadside stations. Source: Zürich Open Data MCP.</p>
</blockquote>
<figure><a href="https://liip.rokka.io/dynamic/o-af-1/8c5d8e/cleanshot-2026-09-04-at-08-52-53.png" rel="noreferrer" target="_blank"><img alt="" src="https://liip.rokka.io/www_inarticle_5/8c5d8e/cleanshot-2026-09-04-at-08-52-53.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/8c5d8e/cleanshot-2026-09-04-at-08-52-53.jpg 2x"></a></figure>
<p>These examples are not groundbreaking, even if asking for "recycling collection times" is always a beloved topic on our public chatbots and Google also doesn't know them by heart. But if websites start adding more useful WebMCP endpoints to their websites, beyond just searching their content, it will enhance the experience for people using ChatGPT et al. Like adding items to a shopping cart or sending a report about a broken street sign or just help filling out a webform without actually sending it. Without them even knowing what WebMCP or MCP is or registering anything explicitly.</p>
<p>Very much looking forward to future use cases for WebMCP and how it will improve the experience with tools like ChatGPT (and others, when they implement it)</p>
<p>See also <a href="https://learn.chatgpt.com/docs/webmcp">OpenAI's documentation about WebMCP</a> for more about their implementation.</p>]]></description>
    </item>
        <item>
      <title>Apertus 1.5 - 6 Ways to Try Out Switzerland&#039;s Updated AI Model</title>
      <link>https://www.liip.ch/en/blog/apertus-1-5-6-ways-to-try-out-switzerland-s-updated-ai-model</link>
      <guid>https://www.liip.ch/en/blog/apertus-1-5-6-ways-to-try-out-switzerland-s-updated-ai-model</guid>
      <pubDate>Thu, 03 Sep 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>On July 24, 2026, the <a href="https://ai.ethz.ch/news-and-events/ai-center-news/2026/07/apertus-15-building-the-next-generation-of-open-ai-infrastructure.html">Swiss AI Initiative</a> — EPFL, ETH Zurich, and CSCS — released <a href="https://publicai.co/stories/apertus-1-5">Apertus 1.5</a>, another step forward for open, transparent, and sovereign AI. Building on Apertus 1.0, this update brings a massively expanded context window (up 4x, to 262,144 tokens), an optional "Thinking Mode" for reasoning, native image understanding (with experimental audio input), and meaningfully better instruction-following and tool use.</p>
<p>At Liip, we're glad to see this foundation model keep improving — it's what powers sovereign, ethical AI use cases for organizations in Switzerland and beyond. We <a href="https://www.liip.ch/en/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model">wrote up our own hands-on comparison</a> after running Apertus in production on ZüriCityGPT, so if you want the deep-dive data, that's the place to look. Here, in the spirit of our <a href="https://www.liip.ch/en/blog/apertus-4-ways-to-try-out-switzerland-s-new-ai-model">original &quot;4 ways&quot; post</a>, we're keeping it practical: 6 ways to try Apertus 1.5 yourself, today.</p>
<h2>1. Try Apertus 1.5 on Public AI</h2>
<figure><a href="https://liip.rokka.io/www_inarticle_5/efe186/01-public-ai-thinking-mode.jpg"><img alt="" src="https://liip.rokka.io/www_inarticle_5/efe186/01-public-ai-thinking-mode.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/efe186/01-public-ai-thinking-mode.jpg 2x"></a><figcaption>Apertus 1.5's Thinking Mode running on Public AI</figcaption></figure>
<p>Use this when you just want to try the model in a chat window, right now, without installing anything or writing a line of code. <a href="https://publicai.co/">Public AI</a>'s mission is to make open AI accessible to everyone, and it remains one of the easiest ways to access Switzerland's sovereign models. It runs on Public AI's own inference utility, hosted within Swiss jurisdiction, and with the 1.5 release you can put the improved multilingual handling — including the well-liked Schwizerdütsch toggle — to the test yourself.</p>
<p>Create a free account at <a href="https://chat.publicai.co/">chat.publicai.co</a> to try the full 70B reasoning model, and make sure to switch on the new <strong>Thinking Mode</strong>. Prefer not to sign in? <a href="https://publicai.co/chat">publicai.co/chat</a> gives you the 8B version with no login required.</p>
<h2>2. Try Apertus 1.5 with RAG using LiipGPT</h2>
<figure><a href="https://liip.rokka.io/www_inarticle_5/4809b7/02-liipgpt-zuericitygpt-oss.jpg"><img alt="" src="https://liip.rokka.io/www_inarticle_5/4809b7/02-liipgpt-zuericitygpt-oss.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/4809b7/02-liipgpt-zuericitygpt-oss.jpg 2x"></a><figcaption>Apertus 1.5 answering a question via LiipGPT's open-source ZüriCityGPT integration</figcaption></figure>
<p>Use this when you want to see Apertus power a real Retrieval-Augmented Generation (RAG) chatbot that answers questions grounded in your own documents, rather than a bare chat window. <a href="https://liipgpt.ch">LiipGPT</a>, our generative AI platform, also runs on open-source models, and we're updating our open-source implementations to use Apertus 1.5. The new 262,144-token context window — 4x the original — is especially useful here: it lets our RAG setups pull in much larger documents, reports, and datasets at once without losing detail.</p>
<p>You can see this in action in our open-source integration: <a href="https://oss.zuericitygpt.ch/">oss.zuericitygpt.ch</a>.</p>
<h2>3. Try Apertus 1.5 in TextMate</h2>
<figure><a href="https://liip.rokka.io/www_inarticle_5/2422da/03-textmate-apertus-revision.jpg"><img alt="" src="https://liip.rokka.io/www_inarticle_5/2422da/03-textmate-apertus-revision.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/2422da/03-textmate-apertus-revision.jpg 2x"></a><figcaption>TextMate revising a text using Apertus 1.5</figcaption></figure>
<p>Use this when you want to feel the model's improvements on your own everyday writing — a report to tidy up, a text to translate — without any setup at all. <a href="https://liip-textmate.liipgpt.ch/">TextMate</a>, our LiipGPT module for text correction, plain-language rewriting, and translation across 12+ languages, now offers Apertus 1.5 as a model option too. It's a good way to get a feel for the model's improved instruction-following on everyday editorial work — correcting, rewriting, or translating your own text.</p>
<p>Try it directly at <a href="https://liip-textmate.liipgpt.ch/">liip-textmate.liipgpt.ch</a>.</p>
<h2>4. Download and test Apertus 1.5 locally</h2>
<figure><a href="https://liip.rokka.io/www_inarticle_5/df7e79/04-huggingface-apertus-v1-5-8b.jpg"><img alt="" src="https://liip.rokka.io/www_inarticle_5/df7e79/04-huggingface-apertus-v1-5-8b.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/df7e79/04-huggingface-apertus-v1-5-8b.jpg 2x"></a><figcaption>The Apertus 1.5 8B model page on Hugging Face</figcaption></figure>
<p>Use this when you need the model running fully under your own control — offline, air-gapped, or wired directly into your own application, with nothing sent to a third party. As with every Apertus release, the 1.5 model family — both the 8B and 70B versions — remains fully open: open weights, open data, open training recipes. You can download the models directly from Hugging Face (<a href="https://huggingface.co/swiss-ai/Apertus-v1.5-8B">swiss-ai/Apertus-v1.5-8B</a> and <a href="https://huggingface.co/swiss-ai/Apertus-v1.5-70B">swiss-ai/Apertus-v1.5-70B</a>). If you'd rather not manage inference yourself, Infomaniak also offers Apertus 1.5 70B through their API.</p>
<p>The 8B version is well-optimized and runs comfortably on modern hardware. On a Mac, <a href="https://github.com/ml-explore/mlx-lm">mlx-lm</a> gets you running locally via Apple Silicon's unified memory and Metal GPU acceleration; with quantization, people have gotten it working even on an <a href="https://digitalpathlines.ch/2026/08/12/shrinking-apertus-1-5-8b-for-an-8-gb-laptop-gpu/">8GB laptop GPU</a>. On other setups, <a href="https://github.com/vllm-project/vllm">vLLM</a> is a solid way to serve it and explore the native image-understanding features.</p>
<h2>5. Explore building your own chatbots with Open WebUI</h2>
<figure><a href="https://liip.rokka.io/www_inarticle_5/f659b1/05-open-webui-side-by-side.jpg"><img alt="" src="https://liip.rokka.io/www_inarticle_5/f659b1/05-open-webui-side-by-side.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/f659b1/05-open-webui-side-by-side.jpg 2x"></a><figcaption>Liip's Open WebUI instance answering the same prompt side by side on aisingapore/Gemma-SEA-LION-v4-27B-IT and swiss-ai/apertus-v1.5-70b-thinking</figcaption></figure>
<p>Use this when you want to build a custom, self-hosted chatbot for your team or organization — and compare Apertus 1.5 against other models before committing to one. <a href="https://www.liip.ch/en/open-webui">Open WebUI</a> remains a great self-hosted, open-source platform for building ChatGPT-like custom chatbot experiences. With Apertus 1.5's improved tool use and instruction-following, it's easier than ever to build bespoke assistants tailored to your organization's workflows.</p>
<p>Apertus 1.5 plugs into Open WebUI just like any other model — it's one of the models available on our own internal Open WebUI instance. One of the platform's best features is the ability to run the same prompt against several LLMs at once — handy if your team wants to quickly see how Apertus 1.5 stacks up against other models for your specific use case.</p>
<h2>6. Let Project Agent draft a ticket for you</h2>
<figure><a href="https://liip.rokka.io/www_inarticle_5/bd9b2a/06-project-agent-youtrack-ticket.jpg"><img alt="" src="https://liip.rokka.io/www_inarticle_5/bd9b2a/06-project-agent-youtrack-ticket.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/bd9b2a/06-project-agent-youtrack-ticket.jpg 2x"></a><figcaption>Project Agent (PAL) drafting a YouTrack ticket using Apertus 1.5's tool-calling</figcaption></figure>
<p>Use this when you want to see Apertus 1.5 not just answer questions but actually do something — turning a rough problem description into a properly researched, ready-to-file ticket. Our internal Project Agent (PAL) — a conversational agent platform Liip teams use on their own projects — now runs on Apertus 1.5 too, and the model's improved tool use makes a real difference here. Point it at a rough problem description, and it uses tool calls to dig into the project itself: reading the git history, searching the issue tracker, and pulling in the relevant wiki pages, then drafts a properly scoped improvement ticket — priority, affected component, concrete impact — ready to send straight to YouTrack.</p>
<p>It's a good showcase of what "better tool use" actually buys you in practice: not a chatbot answering questions about tools, but a model reliably calling the right ones, in the right order, to produce something you'd otherwise have written by hand.</p>
<hr />
<p>How do you want to put the new multimodal and reasoning capabilities of secure, sovereign large language models to work? Let's explore together how to build your own Open WebUI–based chatbot infrastructure, powered by Apertus 1.5.</p>
<p>Looking forward to hearing from you.</p>
<p>Next, we're looking forward to exploring Apertus 1.5's translation capabilities in more depth.</p>]]></description>
    </item>
        <item>
      <title>Apertus 1.5 - first impressions from using Switzerland&#8217;s updated AI model</title>
      <link>https://www.liip.ch/en/blog/apertus-1-5-first-impressions-from-using-switzerland-s-updated-ai-model</link>
      <guid>https://www.liip.ch/en/blog/apertus-1-5-first-impressions-from-using-switzerland-s-updated-ai-model</guid>
      <pubDate>Wed, 26 Aug 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>On July 24, the Swiss AI Initiative — EPFL, ETH Zurich, and CSCS — released Apertus 1.5. By July 25, we had already deployed it to <a href="https://oss.zuericitygpt.ch">oss.zuericitygpt.ch</a>. In this blogpost we will take a look at our first impressions testing Apertus 1.5 on the OSS version of ZueriCityGPT.</p>
<p>It was not just the open-source side that upgraded. The production system at <a href="https://zuericitygpt.ch">zuericitygpt.ch</a> switched from GPT-4o-mini to GPT-5.6 Luna — the cost-efficient tier in OpenAI's latest model family. So in the following, we will take a look at the effect of two simultaneous model upgrades on ZueriCityGPT, tested against the same knowledge base.</p>
<h2>What is new in each model</h2>
<p><strong>Apertus 1.5</strong> adds 2 trillion tokens of continued pretraining to the 70B model. For the first time, the model accepts images alongside text, and audio input is available experimentally. Instruction following — a clear weak spot in 1.0 — was a focus of the update. The model remains fully open-source under Apache 2.0, trained on the Alps supercomputer at CSCS.</p>
<p><strong>GPT-5.6 Luna</strong> is the smallest model in OpenAI's <a href="https://openai.com/index/gpt-5-6/">GPT-5.6 family</a> (Sol / Terra / Luna), released on July 9, 2026. It supports a million-token context window and is designed for high-volume, latency-sensitive workloads — the profile of a public-sector chatbot like ZüriCityGPT. The production system ran on GPT-5.4-nano for most of July before switching to Luna on July 31; our controlled test on August 7 ran against Luna.</p>
<h2>A disclaimer about the comparison</h2>
<p>An important point needs to be reiterated, as it was often misunderstood in the first Apertus release: it is not possible to directly compare the performance of a Large Language Model (LLM) like Apertus to an integrated solution like Luna, which does not provide access directly to the closed LLM inside of it. The software stack that is run by OpenAI to optimize interactions with their models is proprietary, whereas Apertus is running on an open-source stack that you can deploy in the cloud or on-premises.</p>
<p>Similarly, while ZueriCityGPT has an OSS model version, not all source code of the underlying system LiipGPT has been open-sourced at this point. LiipGPT ships with a lot of features that a sophisticated Retrieval-Augmented-Generation (RAG)-system needs in order to provide you with accurate answers based on a curated knowledge base.</p>
<p>Both models run on the same <a href="https://liipgpt.ch">LiipGPT</a> platform and the same knowledge base of official content from <a href="https://www.stadt-zuerich.ch">stadt-zuerich.ch</a>. Note that the OSS version also uses different models for embedding (Qwen3-Embedding-0.6B) and reranking (BGE-Reranker), which can affect answer quality. Neither system uses web search — all answers are generated exclusively from documents retrieved from the stadt-zuerich.ch knowledge base via RAG.</p>
<p>The OSS version of ZüriCityGPT will add 16k tokens from the chunks into the prompt while the Luna version adds 32k tokens. This is because the price of Apertus tokens is roughly 4 times higher than Luna model tokens. We therefore actively choose to constrain the amount of tokens used for cost-control and to achieve a similar cost to question ratio.</p>
<h2>The numbers</h2>
<p>We have two data sources: historical quality metrics from real user traffic (measured automatically by the LiipGPT platform), and a controlled test where we asked 20 identical questions to both systems on the same day.</p>
<p>A note on how to read the comparisons: throughout this post, we make two kinds of comparison. <strong>Before → after</strong> compares the same system across its model upgrade (Apertus 1.0 → 1.5, or GPT-4o-mini → GPT-5.6 Luna). <strong>Head-to-head</strong> compares the two systems against each other on the same question, same day. We always name the specific models so it is clear which comparison we are making.</p>
<h3>Historical metrics — real user traffic</h3>
<p>Over the past months, the LiipGPT platform has scored every answer using our three established metrics:</p>
<ul>
<li>Match Rate (MR: is the answer acceptable?)</li>
<li>Match Rate +1 (MR+1: is the answer actually good?)</li>
<li>Faithfulness (Faith: does the answer stick to the source documents?).</li>
</ul>
<p>In the following, we aggregate each model's entire deployment period. This gives the clearest before-and-after picture.</p>
<figure><a href="https://liip.rokka.io/dynamic/b60ce6/chart-comparison-fullrange.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/b60ce6/chart-comparison-fullrange.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/b60ce6/chart-comparison-fullrange.jpg 2x"></a><figcaption>Full-range model comparison from real user traffic.</figcaption></figure>
<table>
<thead>
<tr>
<th>Period</th>
<th>System</th>
<th>Model</th>
<th>n</th>
<th>Avg Score</th>
<th>MR</th>
<th>MR+1</th>
<th>Faith</th>
</tr>
</thead>
<tbody>
<tr>
<td>Jan–Jun 2026</td>
<td>PROD</td>
<td>GPT-4o-mini</td>
<td>3,935</td>
<td>4.44</td>
<td>98.7%</td>
<td>70.3%</td>
<td>0.83</td>
</tr>
<tr>
<td>Jul 31–Aug 14</td>
<td>PROD</td>
<td>GPT-5.6 Luna</td>
<td>216</td>
<td>4.81</td>
<td>99.1%</td>
<td>86.6%</td>
<td>0.84</td>
</tr>
<tr>
<td>Jan–Jun 2026</td>
<td>OSS</td>
<td>Apertus 1.0</td>
<td>1,466</td>
<td>3.73</td>
<td>91.5%</td>
<td>40.2%</td>
<td>0.53</td>
</tr>
<tr>
<td>Jul 25–Aug 14</td>
<td>OSS</td>
<td>Apertus 1.5</td>
<td>287</td>
<td>3.99</td>
<td>87.1%</td>
<td>59.2%</td>
<td>0.56</td>
</tr>
</tbody>
</table>
<p>Apertus 1.5 made the bigger relative leap: Match Rate +1 jumped from 40% to 59% — a 19 percentage point improvement. GPT-5.6 Luna went from 70% to 87%, a 16 percentage point jump. The absolute gap narrowed only slightly, from 30 points to 27.</p>
<h3>Controlled test — 20 identical questions</h3>
<p>We repeated the exact same <a href="https://www.liip.ch/en/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model#the-20-question-test">20 questions from the original blog post</a>, asking them on both systems on August 7, 2026. One person asked all 20 questions on each system — this is not a user study but a controlled comparison isolating model changes from knowledge-base changes.</p>
<figure><a href="https://liip.rokka.io/dynamic/5ee10f/chart-comparison-controlled.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/5ee10f/chart-comparison-controlled.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/5ee10f/chart-comparison-controlled.jpg 2x"></a><figcaption>Three quality metrics compared across the controlled test — 20 identical questions.</figcaption></figure>
<table>
<thead>
<tr>
<th>#</th>
<th>Question</th>
<th>Apertus 1.0</th>
<th>Apertus 1.5</th>
<th>GPT-4o-mini</th>
<th>GPT-5.6 Luna</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Who is the mayor of the city?</td>
<td>3</td>
<td>2</td>
<td>5</td>
<td>5</td>
</tr>
<tr>
<td>2</td>
<td>which day will paper get collected in 8004</td>
<td>6</td>
<td>6</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>3</td>
<td>do you understand english?</td>
<td>6</td>
<td>6</td>
<td>6</td>
<td>6</td>
</tr>
<tr>
<td>4</td>
<td>was gibts neues im zoo?</td>
<td>3</td>
<td>5</td>
<td>5</td>
<td>5</td>
</tr>
<tr>
<td>5</td>
<td>what are the stadtammanns doing?</td>
<td>5</td>
<td>5</td>
<td>5</td>
<td>5</td>
</tr>
<tr>
<td>6</td>
<td>what do you know?</td>
<td>3</td>
<td>3</td>
<td>5</td>
<td>4</td>
</tr>
<tr>
<td>7</td>
<td>What are the rules to use the Zurich waste dump?</td>
<td>6</td>
<td>3</td>
<td>3</td>
<td>6</td>
</tr>
<tr>
<td>8</td>
<td>wie alt ist die stadt zürich?</td>
<td>5</td>
<td>6</td>
<td>5</td>
<td>5</td>
</tr>
<tr>
<td>9</td>
<td>can you speak english?</td>
<td>3</td>
<td>5</td>
<td>3</td>
<td>5</td>
</tr>
<tr>
<td>10</td>
<td>Wer bist du?</td>
<td>3</td>
<td>6</td>
<td>6</td>
<td>1</td>
</tr>
<tr>
<td>11</td>
<td>Est-ce que tu parles français?</td>
<td>3</td>
<td>6</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>12</td>
<td>Was macht Corine Mauch?</td>
<td>5</td>
<td>5</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>13</td>
<td>What is Smart City?</td>
<td>4</td>
<td>5</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>14</td>
<td>when is the next zürifest</td>
<td>5</td>
<td>5</td>
<td>5</td>
<td>5</td>
</tr>
<tr>
<td>15</td>
<td>How many people live in Zurich</td>
<td>5</td>
<td>6</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>16</td>
<td>How do I dispose of Teflon pans?</td>
<td>3</td>
<td>2</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>17</td>
<td>What is Zurich doing for climate protection?</td>
<td>5</td>
<td>5</td>
<td>6</td>
<td>6</td>
</tr>
<tr>
<td>18</td>
<td>Where do I do my tax declaration?</td>
<td>4</td>
<td>5</td>
<td>5</td>
<td>5</td>
</tr>
<tr>
<td>19</td>
<td>Who is the head of the OIZ?</td>
<td>6</td>
<td>6</td>
<td>6</td>
<td>6</td>
</tr>
<tr>
<td>20</td>
<td>How old is the city of Zurich?</td>
<td>5</td>
<td>2</td>
<td>6</td>
<td>6</td>
</tr>
<tr>
<td></td>
<td><strong>Average</strong></td>
<td><strong>4.40</strong></td>
<td><strong>4.70</strong></td>
<td><strong>4.90</strong></td>
<td><strong>5.15</strong></td>
</tr>
</tbody>
</table>
<p>Apertus 1.5 improved its average score from 4.40 to 4.70. GPT-5.6 Luna came in at 5.15.</p>
<h4>How did the three key metrics change?</h4>
<p>Our automated scoring scale runs from 1 (wrong or refuses to answer) through 3 (partially correct) to 6 (excellent). We define "acceptable" as any score above 2 — the answer is at least partially useful. "Good" means above 3 — the answer is substantively correct and helpful, not just borderline.</p>
<table>
<thead>
<tr>
<th>Metric</th>
<th>Apertus 1.0</th>
<th>Apertus 1.5</th>
<th>Δ</th>
<th>GPT-4o-mini</th>
<th>GPT-5.6 Luna</th>
<th>Δ</th>
</tr>
</thead>
<tbody>
<tr>
<td>Acceptable (&gt;2)</td>
<td>100% (20/20)</td>
<td>85% (17/20)</td>
<td>−15pp</td>
<td>100% (20/20)</td>
<td>95% (19/20)</td>
<td>−5pp</td>
</tr>
<tr>
<td>Good (&gt;3)</td>
<td>65% (13/20)</td>
<td>75% (15/20)</td>
<td>+10pp</td>
<td>90% (18/20)</td>
<td>95% (19/20)</td>
<td>+5pp</td>
</tr>
<tr>
<td>Faithfulness</td>
<td>0.60</td>
<td>0.61</td>
<td>+0.01</td>
<td>0.85</td>
<td>0.80</td>
<td>−0.05*</td>
</tr>
</tbody>
</table>
<p>*The faithfulness delta for Luna is a measurement artifact — see the discussion in "What we learned" below.</p>
<p>Apertus 1.5 gives fewer acceptable answers (85% vs 100%) but more good ones (75% vs 65%). This is the "honest refusal" pattern: the model no longer produces borderline answers that scrape past the threshold. When it answers, it answers well; when it cannot, it says so. The Apertus team confirmed this matches their own testing with OR-Bench, a benchmark designed to measure over-refusal behaviour. GPT-5.6 Luna shows a milder version of the same trend.</p>
<p>In a head-to-head battle, GPT-5.6 Luna won 6 questions, Apertus 1.5 won 2, and 12 were ties. Compare that to the original: GPT-4o-mini won 9, Apertus 1.0 won 3, with 8 ties. Ties grew from 8 to 12 — meaning Apertus now matches the production model on most questions.</p>
<h3>Matched questions — real users, same question, both systems</h3>
<p>Twenty-five real user questions were asked on both systems during the Apertus 1.5 period. The questions from different users who but we chose to simulate them on both systems to achieve a comparison.</p>
<p>On matched questions, the gap in average score is just 0.16 points (4.92 vs 5.08). Match Rate: 96% vs 100%. Match Rate +1: 76% vs 92%. Faithfulness: 0.59 vs 0.83.</p>
<h2>The example questions revisited</h2>
<p>In the original blog, we highlighted specific scenarios to make the numbers tangible. Here is how they changed — plus two new ones that show the practical impact of both upgrades.</p>
<h3>"Est-ce que tu parles français?" — both answer now</h3>
<p>This was the most visible failure in the original comparison. When asked "Do you speak French?", GPT-4o-mini responded fluently in French. Apertus 1.0 declined, saying it could not answer questions about its own linguistic capabilities.</p>
<p>Apertus 1.5 now answers: <em>"Oui, je parle français. Je suis à votre disposition pour vous aider dans la langue que vous préférez."</em> The IFEval improvement that the Apertus team targeted has real practical impact.</p>
<figure><a href="https://liip.rokka.io/dynamic/daed48d/screenshot-french-q11.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/daed48d/screenshot-french-q11.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/daed48d/screenshot-french-q11.jpg 2x"></a><figcaption>Both systems now respond fluently in French — GPT-5.6 Luna left and Apertus 1.5 right.</figcaption></figure>
<h3>Population — improved but still off</h3>
<p>In the original test, GPT-4o-mini returned Zurich's current population (452,421), while Apertus gave a 2013 figure. Apertus 1.5 now returns a more up-to-date number but uses the wrong date. GPT-5.6 Luna cites the correct combination of time and population. Apertus 1.5 plays a part in this, but retrieval logs tell a different story: the OSS embedding model (Qwen3-Embedding-0.6B) ranks old statistical PDFs from 2010–2013 above current population pages, and because those PDFs are large, they fill the smaller context window (16k vs production) before up-to-date sources are included. The production system's embedding model (OpenAI text-embedding-3-small) retrieves the current data as its top result.</p>
<figure><a href="https://liip.rokka.io/dynamic/1a0dda/screenshot-population-q15.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/1a0dda/screenshot-population-q15.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/1a0dda/screenshot-population-q15.jpg 2x"></a><figcaption>Both models return the current population figure, but Apertus cites the wrong date — GPT-5.6 Luna left and Apertus 1.5 right.</figcaption></figure>
<h3>Waste dump — the tables turned</h3>
<p>This was Apertus 1.0's showcase win in the original blog: scoring 6/6 where GPT-4o-mini scored 3/6. In 1.5, the roles reversed. GPT-5.6 Luna now delivers a comprehensive answer. Apertus 1.5 asks the user to specify what kind of waste they mean. This is the clearest example of Apertus 1.5's new pattern: better instruction following sometimes means it asks clarifying questions rather than making assumptions.</p>
<figure><a href="https://liip.rokka.io/dynamic/d90d8e/screenshot-waste-q7.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/d90d8e/screenshot-waste-q7.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/d90d8e/screenshot-waste-q7.jpg 2x"></a><figcaption>GPT-5.6 Luna now provides detailed waste disposal information left. Apertus 1.5 asks for clarification right where 1.0 gave a direct answer.</figcaption></figure>
<h3>"Who is the mayor?" — the honest refusal in practice</h3>
<p>This question illustrates why acceptable answers dropped from 100% to 85%. GPT-5.6 Luna correctly answered "Raphael Golta". Apertus 1.5 refused: "The provided information does not contain the name of the current mayor of the city." Rather than guessing like 1.0 did (which returned the outdated name "Corine Mauch"), 1.5 admits the gap. This is a retrieval issue, likely amplified by the smaller OSS embedding model.</p>
<figure><a href="https://liip.rokka.io/dynamic/5006d9/screenshot-mayor-q1.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/5006d9/screenshot-mayor-q1.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/5006d9/screenshot-mayor-q1.jpg 2x"></a><figcaption>GPT-5.6 Luna correctly names Raphael Golta left. Apertus 1.5 refuses — it cannot find the name in the retrieved documents right.</figcaption></figure>
<h3>"was gibts neues im zoo?" — Apertus finds its voice in German</h3>
<p>Apertus 1.0 scored 3/6 — a vague, generic answer. Apertus 1.5 now delivers a detailed German response covering the Lewa Savanne, the Kaeng Krachan Elefantenpark, and the Zooseilbahn controversy. It scores 5/6, matching GPT-5.6 Luna.</p>
<p>This is notable because the knowledge base is predominantly German, and zoo news is the kind of practical, frequently-asked city question where a chatbot needs to perform. Apertus 1.0 struggled to synthesize multiple retrieved documents into a coherent answer; 1.5 does this naturally. The improvement is not about finding the right documents — the RAG pipeline retrieved them before, too — but about what the model does with them once retrieved.</p>
<figure><a href="https://liip.rokka.io/dynamic/963092/screenshot-zoo-q4.jpg"><img alt="" src="https://liip.rokka.io/www_inarticle_5/963092/screenshot-zoo-q4.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/963092/screenshot-zoo-q4.jpg 2x"></a><figcaption>Both systems now give detailed zoo news — GPT-5.6 Luna left, Apertus 1.5 right. Both score 5/6.</figcaption></figure>
<h2>What we learned</h2>
<p><strong>The quality gap is closing, from both sides.</strong> Apertus 1.5 narrowed the gap substantially — but both models got better at the same time. On matched real-user questions, the average score difference is just 0.16 points. On the controlled test, the gap went from 0.50 (4.40 vs 4.90) to 0.45 (4.70 vs 5.15).</p>
<p><strong>Instruction following improved — with a tradeoff.</strong> Apertus 1.0 had a clear weakness in instruction following (IFEval 44%). In 1.5, the French language question works, the identity answer is clean, and the English responses are more natural. But the same improvement created a new pattern: when retrieved documents do not clearly contain the answer, the model now refuses rather than attempting to synthesize. This dropped the controlled-test Match Rate from 100% to 85%.</p>
<p><strong>The English/German gap persists — but it is not the model.</strong> We asked "wie alt ist die stadt zürich?" in German and "How old is the city of Zurich?" in English. Apertus 1.5 scored 6/6 on the German version and 2/6 on the English version. The gap most likely comes from the OSS embedding model struggling with cross-lingual retrieval against the predominantly German knowledge base.</p>
<p><strong>Faithfulness requires careful measurement.</strong> The faithfulness numbers initially included refusal answers, which led to low scores because the refusal obviously cannot be grounded in facts. On that basis, GPT-5.6 Luna scores 0.84 — essentially identical to GPT-4o-mini's 0.83. Apertus improved slightly (0.53 to 0.56 in production traffic, 0.60 to 0.61 in the controlled test). "Faithfulness" is our platform's metric for how well the answer sticks to the retrieved sources — it is not a term the Apertus team uses internally, but they confirmed that general accuracy improvement and alignment work are ongoing goals. The gap between Apertus and the production system (0.56 vs 0.84) depends as much on how the RAG pipeline surfaces and frames source material as on the model itself.</p>
<p><strong>Both systems benefit equally from knowledge base updates.</strong> The knowledge base now correctly reflects that Raphael Golta replaced Corine Mauch as Stadtpräsident in May 2026. Both models handle this correctly — confirming that the LiipGPT platform's RAG pipeline works as designed: model-agnostic, with the knowledge base as the single source of truth.</p>
<h2>Looking ahead</h2>
<p>Compared to our recent test of Apertus 1.0, the picture has shifted meaningfully. Back then, Apertus was an experiment with many limitations. Apertus 1.5 seems to handle many questions at the same level as GPT-5.6 Luna. The cases where it still falls short (faithfulness, cross-lingual retrieval) are increasingly about other open-source components involved, less on the model itself. But in our test field of RAG application, the cost ratio is important. If you compare the token cost of GPT-5.6 Luna on Azure with the token cost of Apertus 1.5 70B on Infomaniak, the Apertus model will cost you roughly 4 times as much as the GPT model. Obviously there are other advantages like enhanced data sovereignty and higher ethical standards in training the model but still, being able to run Apertus 1.5 in sizes between 8B and 70B would help achieve a better cost to value ratio in our case.</p>
<p>We are sharing these results with the Apertus team and the wider community for review. As before, our aim is not to provide a scientific benchmark but a practical report from a production deployment. Consider that these are just our first impressions, and we are looking forward to further test Apertus with other RAG-deployments and in more use case scenarios. If you would like to test how Apertus 1.5 works when refining brand text, our latest <a href="https://liip-textmate.liipgpt.ch/">TextMate</a> has the model available as well.</p>
<p>The question from our <a href="https://www.liip.ch/en/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model">last post</a> — "how much quality gap are you willing to accept for full sovereignty?" — now has a different answer. On most questions, the answer quality is equivalent. The remaining gap is in faithfulness and source attribution — Apertus is improving, and GPT-5.6 Luna maintains the same level as its predecessor once measurement artifacts are accounted for. Closing that gap will require improvements to the open-source RAG stack (embedding, reranking) as well as finding a good mix between model size and speed / price and might be less focused on the language model itself.</p>
<p>Please do not hesitate to <a href="https://www.liip.ch/en/team/josef-kruckenberg">contact me</a> if you have any questions about Apertus or AI solutions in general; I’d be delighted to discuss this with you. </p>
<p><strong>Acknowledgements</strong></p>
<p>Thank you to the <a href="https://ai.ethz.ch/news-and-events/ai-center-news/2026/07/apertus-15-building-the-next-generation-of-open-ai-infrastructure.html">Swiss AI Initiative</a> — EPFL, ETH Zurich, and CSCS — for continuing to develop Apertus as a public good. Thank you Oleg Lavrovsky and Martin Renou for reviewing a draft of this post and providing feedback from the Apertus team's perspective.</p>
<p>Thank you <a href="https://www.liip.ch/de/team/chregu">Christian Stocker</a> and the <a href="https://liipgpt.ch">LiipGPT</a> team for deploying the update within 24 hours of release.</p>
<p>Thank you <a href="https://publicai.ch/">Public AI</a> and <a href="https://www.infomaniak.com/en/hosting/ai-services/open-source-models">Infomaniak</a> for hosting Apertus inference for us.</p>
<p>Parts of this analysis were prepared with the help of Claude. The data was collected and scored automatically by the LiipGPT platform.</p>]]></description>
    </item>
        <item>
      <title>From circle to circle without going in circles: My first year at Liip</title>
      <link>https://www.liip.ch/en/blog/from-circle-to-circle-without-going-in-circles-my-first-year-at-liip</link>
      <guid>https://www.liip.ch/en/blog/from-circle-to-circle-without-going-in-circles-my-first-year-at-liip</guid>
      <pubDate>Tue, 11 Aug 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>That was no coincidence. My training manager Petra planned it that way. She wanted me to get to know as many Circles and Liipers as possible, and to check off as many training objectives as I could along the way. In the end, what mattered was where there was work and support for me, not a fixed plan on paper. Still, looking back, a clear order emerged, and that order made the difference. Each Circle gave me something I needed in the next one.</p>
<h3>From August 1 to November 1, I was in the Finance Circle. This is where it all started</h3>
<p>I supported the move of the Finance area away from our Atlassian wiki. The new solution was not yet decided. So I put everything from it onto Google Drive for the time being. That sounds like a simple cleanup job. In fact, it was a good starting point to see how much knowledge actually comes together at Liip, and where it lives.</p>
<p>My tasks in the Circle:</p>
<ul>
<li>Responsibility for our Finance email, where all invoices arrive. I cleared them and entered them into RMA, our finance system.</li>
<li>The monthly credit card reconciliation, where I always looked for automation potential too.</li>
<li>Refreshing the NDA archive. I took over the entire history and built a few automations for it in Google Sheets, so nobody has to check by hand anymore where a contract sits.</li>
</ul>
<p>I had the most fun whenever I could freely look for automation potential and research it. The big data transfers were less exciting. A good tip for that: put on a podcast, then it works out fine. The most typical Finance task for me was the monthly credit card reconciliation. Exactly the kind of work that keeps a company running in the background.</p>
<p><strong>In the Finance Circle, I did not learn numbers first, I learned how Liip works as a company.</strong></p>
<h3>From November 1 to February 1, I was in the <a href="https://www.liip.ch/en/services/development/cms/drupal">Drupal</a> Zürich Circle. This is where things got more concrete</h3>
<p>Here, for the first time, I got to take on a piece of the PO role. Together with Petra, I supported one project. On other projects, I first watched and took on smaller tasks to understand the business behind them. That was a different pace than the Finance Circle. Instead of taking over existing processes, I had to understand how a client project comes together in the first place, from the first requirement to implementation.</p>
<p>Later, bigger tasks were added:</p>
<ul>
<li>PO testing after the developers' first implementation</li>
<li>A handbook for the Drupal backend, which I wrote from scratch</li>
</ul>
<p>For that handbook, the explanations had to be simple enough that even someone without a coding background could work with it. That was the biggest exercise for me.</p>
<figure><img alt="" src="https://liip.rokka.io/www_inarticle_5/bc8c6d/liipgpt-manual-en.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/bc8c6d/liipgpt-manual-en.jpg 2x"></figure>
<p>Even though this is a production Circle at Liip, I never coded myself there. In vocational school, I did work with Python. It was not really for me, though. What I do appreciate: Petra keeps pushing me toward code in our syncs, explaining or showing me things. In the Circle itself, I dealt a lot with the backend and frontend, but never in the code directly. The coolest moment for me was finishing the handbook. Afterward, a lot of positive, grateful reactions came in.</p>
<p><strong>In the Drupal Zürich Circle, I learned what Liip as a company actually stands for.</strong></p>
<h3>From February 1 to August 1, I was in the Design and Content Circle. This is where I got to show what I had learned</h3>
<p>In this Circle, a lot revolved around AI with a focus on content, whether creation, editing, or guidelines. For client projects, I got to:</p>
<ul>
<li>Write prompt sheets for <a href="https://liip-textmate.liipgpt.ch/">Textmates</a></li>
<li>Try out process optimizations</li>
<li><a href="https://www.liip.ch/en/blog/who-still-needs-an-apprenticeship-when-ai-exists">Write my own blog post</a></li>
<li>Build my own AI tools</li>
<li>Help with trainings and workshops, and shape them myself in the end</li>
</ul>
<p>That ranges from preparing the materials to actively supporting the workshop itself, when participants have questions or get stuck on an exercise.</p>
<p>The workshop I mentioned at the start was with Caritas St. Gallen und Appenzell. At the same time, it was our very first Responsible AI Workshop. In the very year I grew at Liip myself, our expertise on this topic grew a lot too.</p>
<figure><img alt="" src="https://liip.rokka.io/www_inarticle_5/5a4eb5/responsible-ai-workshop.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/5a4eb5/responsible-ai-workshop.jpg 2x"></figure>
<p>I was in no other Circle this long. That made a difference. I was much more integrated into the Circle's work. Especially in the second half, I noticed how much trust and responsibility I was given to get things done on my own. Content-wise, the work here was especially exciting: it revolved a lot around Liip's internal content, combined with workshops for clients where we could pass on our knowledge. That was something different again from the two Circles before.</p>
<p><strong>In the Design and Content Circle, I no longer just got to learn, I got to pass something on myself.</strong></p>
<h3>What built up over the year</h3>
<p>When I put the three Circles side by side, I mostly see a curve in responsibility. In the Finance Circle, I took over processes that already existed, and got to know people, tools, and workflows at Liip along the way. In the Drupal Zürich Circle, it was more about Liip's actual business, web development, and I already got to make my own decisions in PO testing and even got to know clients. In the Design and Content Circle, I could use that knowledge to work on strategic tasks, build my own tools, and help shape workshops.</p>
<p>Each Circle prepared me for the next. Not because I planned it myself, but because that is exactly the system behind the Digital Business Developer apprenticeship at Liip. I see that most clearly with automation. In the Finance Circle, I learned through the credit card reconciliation how to break down a process and look for automation potential. I needed exactly that mindset again in the Design and Content Circle, when I built my own AI tools. Without the first step, I could not have approached the third the way I did.</p>
<p>One thing ran through all three Circles, and it has nothing to do with expertise. I learned that I can go to others and ask for help. Not because I am an apprentice and that is allowed, but because at Liip that is simply normal for everyone.</p>
<p><strong>Trust did not come all at once for me, it came Circle by Circle, and that is what has changed me the most from last August until today.</strong></p>
<p>What does your own learning curve look like? Does it build up step by step for you too, or more in leaps?</p>]]></description>
    </item>
        <item>
      <title>Your Content Strategy as System Prompt</title>
      <link>https://www.liip.ch/en/blog/your-content-strategy-as-system-prompt</link>
      <guid>https://www.liip.ch/en/blog/your-content-strategy-as-system-prompt</guid>
      <pubDate>Tue, 28 Jul 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>The cost of producing content is trending toward zero.</p>
<p>But anyone working in branding and corporate communications knows the dilemma:</p>
<ul>
<li>Faster and more consistent: yes, please!</li>
<li>Losing control over positioning: no, thanks.</li>
</ul>
<p>We revised our own content strategy — with the help of AI. And looked for a way to resolve that dilemma: an efficient process that keeps control in human hands.</p>
<h2>Where to start</h2>
<p>Liip sharpened its positioning goals, which meant our content strategy needed a revision too.</p>
<p>For this, I worked with Claude: we have Enterprise access at Liip, and I use the desktop app.</p>
<p>As a first step, I set up a new project. I give it a clear title and describe what I'm trying to achieve.</p>
<p>I can also feed the system <strong>context information</strong> that it takes into account across all the work within that project.</p>
<p>In this case, relevant context included:</p>
<ul>
<li>The organization's vision and strategy</li>
<li>Positioning goals</li>
<li>Existing personas</li>
<li>Approval processes and relevant governance</li>
</ul>
<p>Anything relevant to the content strategy goes into the project as context. This matters especially when several stakeholders or language regions have a say in the final result: the system proposes — but it knows the guardrails within which a proposal actually holds up.</p>
<p>This context provides a solid foundation for an approach that's both <strong>grounded</strong> and <strong>efficient</strong>.</p>
<p>From there, the actual work on the <a href="https://www.liip.ch/en/blog/why-do-you-need-a-content-strategy" rel="noreferrer" target="_blank">content strategy</a> itself can begin.</p>
<p>I wanted to sharpen our core messages and target groups — two building blocks we'd been developing further as part of our new positioning.</p>
<h2>Working with the system</h2>
<p>For each building block, I had two options:</p>
<ul>
<li>Have Claude generate a first proposal, derived from the context I'd provided.</li>
<li>Sketch out roughly what I had in mind, and let the system turn it into a full version.</li>
</ul>
<p>Either way gives me a starting point I can refine further — alone, with the system, or with the team. The AI doesn't write my strategy; it simply supports me through the process.</p>
<p>What it takes is the moment where I step back from what's been generated, reflect on whether it actually serves our goals, and bring in my own judgment.</p>
<p>To get a fresh perspective on generated proposals, I like to pull in colleagues. Through this process, I developed a first complete version of our core messages, which I then took to the team for feedback.</p>
<p>Depending on where you're starting from, you can work through the different building blocks this way. The system makes sure everything builds on what came before in a meaningful way.</p>
<h2>What's a system prompt?</h2>
<p>Once my revised strategy is in place, I take it one step further: I derive a system prompt from it.</p>
<p>A system prompt is the overarching instruction you give a model once, which then automatically applies to every following interaction in that context — unlike the actual prompt, which you write fresh for each individual request.</p>
<p>In effect, I've built myself an assistant that supports me — or others on the team — in creating new content, while automatically paying into our content strategy:</p>
<ul>
<li>The system asks me who the content is for, and surfaces the pain points and content needs that fit.</li>
<li>The system asks which core message should take the lead, and helps me align the content with it.</li>
<li>The system walks me through every other relevant dimension — step by step.</li>
</ul>
<p>From there, the system prompt can keep being refined as you work with it — for instance, once you realize that the channel you're writing for actually matters.</p>
<h2>More than a tool trick</h2>
<p>This is where, for me, the point that often gets missed becomes visible: <strong>automation only scales what's already structurally sound.</strong></p>
<p>The system prompt is only ever as good as the content strategy it's derived from. The real work wasn't the prompting — it was sharpening the strategy. The strategic decisions — what we stand for, who we want to reach, with which message — were made by the team.</p>
<p>If you're curious, try it on a single building block: bring in the context, pick a topic, let it generate a proposal or sketch, fine-tune it with a colleague.</p>
<p>If you're already working with us and your content strategy could use a reality check, reach out: together, we can gather and review what you already have, then set it up in whichever AI tool your team prefers.</p>
<p>Working in the public sector and wondering how a process like this fits with your approval and compliance requirements? Let's talk — we have experience setting up AI-supported processes within existing governance structures.</p>]]></description>
    </item>
        <item>
      <title>Reimagining Frontend Frameworks</title>
      <link>https://www.liip.ch/en/blog/reimagining-reactive-frontend-frameworks</link>
      <guid>https://www.liip.ch/en/blog/reimagining-reactive-frontend-frameworks</guid>
      <pubDate>Thu, 16 Jul 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>Lately React, Vue and Svelte have converged on similar concepts for building reactive interfaces. Their syntax differs, but every reactive frontend still uses some form of state, computed values, mutations and effects.</p>
<p>Nevertheless, there is a lot of knowledge involved in getting something basic working in any of these frameworks. In this blog post I will explore what the most stripped down version of such a framework could look like, while still keeping the ergonomics of a reactive framework.</p>
<p>Let's get right into it.</p>
<h1>Imagining the framework</h1>
<p>To make this concrete, I built a small framework called <a href="https://www.npmjs.com/package/effectlayer">effectlayer</a>. I will explain its building blocks in this blog post.</p>
<h1>Building blocks</h1>
<p>The framework is built around a single JavaScript class, which the framework enhances with reactive behavior. That reactivity is powered by Signals, a common primitive used in frameworks such as Vue, Svelte, and SolidJS.</p>
<h2>State</h2>
<p>All class properties are treated as state. The framework turns them into Signals, so no state annotations are needed here:</p>
<pre><code class="language-javascript">class MoodSwing {
  energy = 5;
  coffee = 0;
}</code></pre>
<h2>Computed Values</h2>
<p>Computed values use standard JavaScript getters. The framework treats them as derived Signals that update automatically when their dependencies change:</p>
<pre><code class="language-javascript">  get mood() {
    if (this.energy &gt; 8) return "🤪";
    if (this.energy &gt; 4) return "😀";
    if (this.energy &gt; 0) return "😑";
    return "😴";
  }</code></pre>
<h2>Mutations</h2>
<p>Methods are a natural fit for mutations:</p>
<pre><code class="language-javascript">  drinkCoffee() {
    this.coffee++;
    this.energy = Math.min(10, this.energy + 3);
  }

  work() {
    this.energy = Math.max(0, this.energy - 2);
  }</code></pre>
<h2>Effects</h2>
<p>The last concept we need is effects. Effects are a fancy way of saying "a thing that executes when dependent Signals change".</p>
<p>I chose methods starting with <code>$</code> for annotating them:</p>
<pre><code class="language-javascript">  $monitor() {
    if (this.coffee &gt; 10) console.warn("You may want to slow down.");
  }</code></pre>
<p>The framework sees that <code>$monitor()</code> uses <code>coffee</code>. After <code>coffee</code> changes, it calls the method again.</p>
<h2>HTML</h2>
<p>Rendering HTML is also an effect that just returns JSX.</p>
<pre><code class="language-javascript">  $ui() {
    return (
      &lt;main&gt;
        &lt;h1&gt;{this.mood}&lt;/h1&gt;
        &lt;button onClick={() =&gt; this.drinkCoffee()}&gt;☕ Coffee&lt;/button&gt;
        &lt;button onClick={() =&gt; this.work()}&gt;💻 Work&lt;/button&gt;
      &lt;/main&gt;
    );
  }</code></pre>
<p>All that is left is to make the class reactive by wrapping it in an <code>effectlayer</code> call:</p>
<pre><code class="language-javascript">const moodSwing = effectlayer(MoodSwing);
moodSwing.$monitor();
document.body.appendChild(moodSwing.$ui());</code></pre>
<p>Calling an effect once activates it. This means <code>$monitor()</code> will now run whenever <code>coffee</code> changes.</p>
<p>The <code>$ui()</code> call returns an HTML element and keeps it up to date.</p>
<h1>All the concepts we need</h1>
<p>So basically the framework only needs four concepts:</p>
<ul>
<li>properties for state</li>
<li>getters for computed values</li>
<li>methods for mutations</li>
<li>methods starting with <code>$</code> for effects</li>
</ul>
<p>If you want to try out this experimental framework use:</p>
<pre><code class="language-sh">npm create effectlayer</code></pre>
<p>Or check it out on <a href="https://www.npmjs.com/package/effectlayer">npm</a>.</p>
<h1>Deep Dive?</h1>
<p>Let me know if you want to see a deep dive into how I built this framework: <a href="mailto:falk.zwimpfer@liip.ch">falk.zwimpfer@liip.ch</a></p>]]></description>
    </item>
        <item>
      <title>AI Won&#039;t Save Bad Content. A Content Strategy Might.</title>
      <link>https://www.liip.ch/en/blog/ai-won-t-save-bad-content-a-content-strategy-might</link>
      <guid>https://www.liip.ch/en/blog/ai-won-t-save-bad-content-a-content-strategy-might</guid>
      <pubDate>Tue, 14 Jul 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>If you want generative AI to produce quality results, you need a solid content strategy and clear guidelines.</p>
<p>Let's be honest: the gen-AI hype is a threat to my content business. We're seeing companies hold back investment in their content. Why?</p>
<p>The capabilities of generative AI make it clear that our field is about to change significantly. But this field is broad — it brings together very different skill sets and areas of work.</p>
<p>So the interesting question becomes: how exactly will content work in organizations change?</p>
<h1>A shift in roles</h1>
<p>A study by AG CommTech and GK Personalberatung looks at how roles and skills are shifting in the communications profession. Their <a href="https://agcommtech.de/wp-portfolio/studie-kuenftige-rollen-und-kompetenzen-in-der-kommunikationsprofession-im-wandel-der-digitalisierung/" rel="noreferrer" target="_blank">meta-study</a> shows that what's needed today is a combination of technological efficiency and human authenticity — a growing need for experts who can interpret data, use AI to extract relevant insights from it, and translate those insights into effective communication strategies.</p>
<p><strong>In other words, strategic skills matter more than ever.</strong></p>
<h1>More quantity, less quality?</h1>
<p>Why is that?<br />
Let's look at one visible area: generated text.</p>
<p>A <a href="https://ai-on-the-internet.github.io/" rel="noreferrer" target="_blank">Stanford study</a> from early 2026 shows that around 35% of all newly published websites are now AI-generated or at least AI-assisted.</p>
<p>The volume of generated content is growing fast. But what about quality?</p>
<p>That's not a simple question, since quality has several dimensions.</p>
<p>Let's ask Claude about it. The bot points to a <a href="https://contentmarketinginstitute.com/b2b-research/b2b-content-marketing-trends-research-2025#AI%20use%20trends" rel="noreferrer" target="_blank">survey by the Content Marketing Institute</a>, in which only 17% of B2B marketers rate the quality of AI-generated content as excellent or very good. 44% rate it as good, 35% as "fair," and 4% as poor. At the same time, 67% say they trust AI output only moderately, and 28% say they trust it little.</p>
<p>That's not exactly a robust finding, but it matches my own experience. So let's dig into the question: how does this middling track record come about?</p>
<h1>Input quality equals output quality</h1>
<p>AI can do a lot, but it can't work miracles. <strong>LLMs need a solid foundation to produce good results.</strong></p>
<p>If I want to generate content for my company's channels, a solid foundation means the following:</p>
<ul>
<li><strong>Complete data</strong> — AI can't generate reliable content if it can't find the relevant information in your existing content.</li>
<li><strong>Target group needs and questions</strong> as the central point of reference for the content.</li>
<li><strong>A content playbook</strong> that personalizes the output and aligns it with the organization's communication rules and goals.</li>
</ul>
<p>That's a fairly sobering realization if you were hoping gen-AI would simply take the work off your hands. Depending on where you're starting from, meeting these requirements actually creates new work first.</p>
<p><strong>But it also shows exactly where you can start to raise the quality of your generated content.</strong></p>
<p>These requirements put <strong>user-centricity</strong> and <strong>content strategy &amp; guidelines</strong> squarely at the center — which brings us right back to strategic skills.</p>
<p>In an upcoming post, I'll describe what belongs in a content strategy, in my view, and which elements deserve priority.</p>]]></description>
    </item>
        <item>
      <title>Why Do You Need a Content Strategy?</title>
      <link>https://www.liip.ch/en/blog/why-do-you-need-a-content-strategy</link>
      <guid>https://www.liip.ch/en/blog/why-do-you-need-a-content-strategy</guid>
      <pubDate>Tue, 14 Jul 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>Generative AI means a massive disruption for the content business. The entire production process is being shaken up. Profiles, workflows, tools – everything is being redefined.</p>
<p>As the cost of content production trends toward zero, two things gain massively in importance:</p>
<ul>
<li>Quality of content</li>
<li>Visibility and findability of content</li>
</ul>
<h1>Generative Engine Optimization (GEO) for the benefit of users</h1>
<p>Visibility and findability of content is increasingly becoming a question of AI visibility: whether your own content and your own brand show up in the answers and results of AI chatbots and agents.</p>
<p>Here's some reassurance: LLMs prioritize content based on criteria that are also relevant to users.</p>
<p>Beyond the technical dimension – content must be readable and usable for AI systems – content also needs to meet the following dimensions:</p>
<ul>
<li>Built around the user</li>
<li>Trustworthy</li>
<li>Clear thematic positioning</li>
</ul>
<p>This means the two aspects – quality and findability of content – are closely linked.</p>
<p>For a team to reach the point of producing content at this level of quality, we first need to clarify the fundamentals: without a clean alignment, no content team in the world is able to produce content of this quality in the medium term.</p>
<h1>The Triple Content Line</h1>
<p>We define our alignment as a content team across the following elements:</p>
<ul>
<li>Content strategy</li>
<li>Content guidelines</li>
<li>Content governance</li>
</ul>
<p>As a team, this is where we agree on the common denominator for our content work. Only this way can we produce quality content that meets both internal and external requirements.</p>
<p>The line between content strategy and content guidelines isn't always easy to draw.</p>
<h1>What belongs in a content strategy?</h1>
<p>There's no definitive answer to what belongs in a content strategy. And beyond that, I'd describe a content strategy more as an ongoing area of work than as a finished document.</p>
<p>For me, the following elements belong in a content strategy:</p>
<ul>
<li>Content goals: What do I actually want to achieve with my content?</li>
<li>Target audiences and their content needs</li>
<li>Content journeys of the target audiences</li>
<li>Channel strategy: Which channels do we work with, and how do they play together?</li>
<li>Key messages</li>
<li>Success measurement</li>
<li>Interfaces to content governance and content lifecycle management</li>
</ul>
<h1>What belongs in content guidelines?</h1>
<p>Unlike content strategy, content guidelines need to be embedded in day-to-day work. Alongside fixed reference points (e.g. the targeted language level), they often contain principles for us:</p>
<ul>
<li>Language level</li>
<li>Language rules (e.g. consistent formatting of dates, currencies, and similar, but also topics like gender-neutral language or how to address target audiences)</li>
<li>Tone of voice</li>
<li>Page types</li>
<li>Tools</li>
<li>...</li>
</ul>
<h1>What belongs in content governance?</h1>
<p>Content governance defines who on the content team is responsible for what – and how we work together to make sure strategy and guidelines are actually put into practice. Without governance, strategy and guidelines remain well-intentioned documents that get lost in day-to-day business.</p>
<p>For me, the following elements belong in content governance:</p>
<ul>
<li>Roles and responsibilities: Who creates, who reviews, who approves?</li>
<li>Approval processes: How does content move from idea to publication?</li>
<li>Maintenance and update processes: Who is responsible for updates, and when?</li>
<li>Quality assurance: How do we ensure guidelines are being followed?</li>
<li>Escalation paths: What happens in case of disagreement or edge cases?</li>
<li>Interfaces to other teams (e.g. design, product, marketing)</li>
</ul>
<h1>The goal? Interplay</h1>
<p>Content strategy, content guidelines, and content governance work together: strategy sets the direction, guidelines translate it into daily practice, and governance ensures that both actually happen rather than just existing on paper. Only through the interplay of these three elements does content emerge that is consistent, trustworthy, and findable – both for users and for AI systems – while also meeting the positioning goals of your own organization.</p>
<p>Content production is getting cheaper. But without these fundamentals, it stays arbitrary – no matter how powerful the tools become. Whoever invests in strategy, guidelines, and governance now is laying the foundation for content that will still be found, understood, and trusted tomorrow.</p>
<p><em>How Generative Engine Optimization (GEO) works in practice will follow in upcoming posts.</em></p>]]></description>
    </item>
        <item>
      <title>Apertus after 8 months - what we learned and look forward to using Switzerland&#039;s AI Model</title>
      <link>https://www.liip.ch/en/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model</link>
      <guid>https://www.liip.ch/en/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model</guid>
      <pubDate>Thu, 09 Jul 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>Since September 2025, we have been running <a href="https://www.apertus-ai.org/">Apertus</a> — the Swiss open-source language model developed by <a href="https://www.epfl.ch/">EPFL</a>, <a href="https://ethz.ch/">ETH Zurich</a> and the <a href="https://www.cscs.ch/">Swiss National Supercomputing Centre (CSCS)</a> — on <a href="https://zuericitygpt.ch">ZüriCityGPT</a>, our reference implementation of a City AI assistant. Eight months later, I want to share what we have learned and what we are curious about for the upcoming Apertus 1.5 release.</p>
<!-- IMAGE: Screenshot of zuericitygpt.ch and oss.zuericitygpt.ch side by side -->
<h1>A brief history of LiipGPT and ZüriCityGPT</h1>
<p>2023, Chregu released the <a href="https://www.liip.ch/en/blog/ask-zuricitygpt-anything-about-the-government-of-the-city-of-zurich">first version of LiipGPT</a>. 2024, we were able to <a href="https://www.liip.ch/en/blog/zuricitygpt-oss-version-using-only-open-source-models">use only open-source models on ZüriCityGPT</a>. 2025, we switched the open-source version to the <a href="https://www.liip.ch/en/blog/apertus-4-ways-to-try-out-switzerland-s-new-ai-model">newly released Apertus model</a>. In this blog post, we talk about the insights gained since then.</p>
<h1>Setting up the experiment</h1>
<p><a href="https://liipgpt.ch">LiipGPT</a>, our <a href="https://www.liip.ch/en/work/projects/liipgpt">generative AI framework</a>, has a pluggable model layer. That means we can swap the underlying language model without changing anything else — same Retrieval-Augmented Generation (RAG) pipeline, same knowledge base of official content from stadt-zuerich.ch. This gave us a straightforward way to compare models in a real deployment.</p>
<p>The production system at <a href="https://zuericitygpt.ch">zuericitygpt.ch</a> runs GPT-4o-mini on Azure Europe. Alongside it, we run an open-source variant at <a href="https://oss.zuericitygpt.ch">oss.zuericitygpt.ch</a> where in the past we compared Llama and Mixtral models. We switched the open-source variant to <a href="https://www.swisscom.ch/en/about/news/2025/09/02-apertus.html">Apertus-70B</a> when it was released in September 2025, then moved to <a href="https://www.infomaniak.com/en/hosting/ai-services/open-source-models">Infomaniak-hosted</a> Apertus in April 2026. (To be clear: ZüriCityGPT itself and the LiipGPT platform are not open source — but the underlying language model on the OSS variant is.)</p>
<p>We run Apertus as the 70-billion-parameter model. It was trained from scratch on the Alps supercomputer using Swiss hydroelectricity, with 15 trillion tokens of training data spanning over 1,800 languages. It is fully open-source under an Apache 2.0 licence.</p>
<p>Over the last eight months, we collected over 39,000 conversations on the production side and 3,400 on the open-source side. Quality is measured using three metrics: how often an answer is acceptable (Match Rate), how often it is actually good (Match Rate +1), and how faithfully it reflects the source documents (Faithfulness). These are metrics our LiipGPT team has established as practical product metrics, not scientific benchmarks — the data is calculated real-time and asynchronously by the LiipGPT platform while users ask different questions over time, evolving website content, and model endpoint changes. Parts of the analysis were prepared with the help of Claude. Our aim is not to provide a scientific study but more a practical report. I share these results with the Apertus community because real-world deployment data of this open-source model is rare — and we think it's useful.</p>
<h1>What we observed</h1>
<p>Both models get the job done. On the basic question — does the user get an acceptable answer? — both models perform similarly. GPT-4o-mini scores 81%, Apertus 82% on historically matched questions. In a controlled test with 20 identical questions asked at the same moment, both hit 100%. Both models generally work as expected.</p>
<p>The gap shows up in answer quality. When we raise the bar to "is this answer actually good?", GPT-4o-mini scores 72% and Apertus 55%. That is a noticeable difference, and it matters for users who expect precise, well-structured responses.</p>
<p>Faithfulness is more nuanced than we expected. GPT-4o-mini averages 0.79, Apertus 0.50 on our faithfulness metric. But these numbers need context. We noticed something we started calling the "faithfulness paradox": when a model says "I cannot answer this," you might expect high faithfulness — no hallucination, after all. In practice, these evasive answers score low because the model is failing to use information that is available. A model that engages with its sources and cites them scores higher, even though it is making more verifiable claims. Both behaviours have tradeoffs, and both showed up across the two systems.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/ac2f708a50-1783608445/chart_comparison_2x3.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/b851b8/chart-comparison-2x3.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/b851b8/chart-comparison-2x3.jpg 2x"></a><figcaption>Three quality metrics compared across a controlled test (20 identical questions) and historically matched real-user questions</figcaption></figure>
<p>Sometimes Apertus gave the better answer. The most striking example was the waste dump question: "What are the rules for using the Zurich waste dump?" GPT-4o-mini responded cautiously, saying it could not provide specific rules. Apertus gave a detailed, structured answer with recycling centre details, phone numbers, and cited sources — scoring 6/6 on quality where GPT-4o-mini scored 3/6. When the knowledge base contains a clear, structured answer, Apertus can be surprisingly good at extracting and presenting it.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/9436173ed7-1783609912/apertus_gpt4omini_waste_dump.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/3b465f/apertus-gpt4omini-waste-dump.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/3b465f/apertus-gpt4omini-waste-dump.jpg 2x"></a><figcaption>GPT-4o-mini and Apertus respond to the same question</figcaption></figure>
<p>That said, this willingness to commit cuts both ways. In cases where the source material is ambiguous, Apertus can feel more helpful while being less strictly grounded — and for public-sector chatbots, traceability matters as much as helpfulness.</p>
<p>GPT-4o-mini is more concise and better at synthesis. Apertus tends to produce longer, more verbose answers. In a public-service chatbot, that is a real UX issue — users want a direct answer with clear next steps, not three paragraphs of context.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/b6516e51a6-1783610106/apertus_gpt4omini_verbose.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/677113/apertus-gpt4omini-verbose.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/677113/apertus-gpt4omini-verbose.jpg 2x"></a><figcaption>GPT-4o-mini responds concise, Apertus more verbose</figcaption></figure>
<p>GPT-4o-mini also handles factual freshness better: it returned Zurich's current population (452,421), while Apertus fell back to a 2013 figure. When information has changed or the answer requires connecting multiple sources, GPT-4o-mini felt more reliable.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/5ed0fada3b-1783610421/apertus_gpt4omini_population.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/997ce3/apertus-gpt4omini-population.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/997ce3/apertus-gpt4omini-population.jpg 2x"></a><figcaption>GPT-4o-mini answers with more recent population data compared to Apertus</figcaption></figure>
<p>Language switching is a weak spot. When we asked "Est-ce que tu parles français?", GPT-4o-mini responded fluently in French. Apertus declined, saying it could not answer questions about its own linguistic capabilities. In more recent tests we saw that Apertus followed the language instructions in better ways, so we are looking forward to see this further improve.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/0bbc6670a2-1783610288/apertus_gpt4omini_language.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/0387e4/apertus-gpt4omini-language.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/0387e4/apertus-gpt4omini-language.jpg 2x"></a><figcaption>GPT-4o-mini follows the language instruction, Apertus did not</figcaption></figure>
<p>The Apertus-70B IFEval score of 44% (vs 58% for comparable models) confirms that instruction following is an area where the model has room to grow.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/38a7a3a17b-1783609312/chart_monthly_cleaned.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/c6a834/chart-monthly-cleaned.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/c6a834/chart-monthly-cleaned.jpg 2x"></a><figcaption>Monthly quality trend from October 2025 to June 2026</figcaption></figure>
<p>The trend is positive. In October 2025, Apertus achieved a Match Rate +1 of 59%. By June 2026, it had climbed to 63% — the best month on record. That is not a dramatic leap, but the direction is consistent and it came without a major model update. Meanwhile, GPT-4o-mini has been stable at 63–83% throughout. The gap is narrowing.</p>
<h1>What we are looking forward to</h1>
<p>The Apertus team is preparing version 1.5, with improvements expected in multimodal support, agentic capabilities, tool calling, enhanced reasoning, and better training for regional Swiss languages. We plan to update ZüriCityGPT's open-source instance as soon as it becomes available and continue our quality monitoring.</p>
<p>What encourages us most is that the collaboration is flowing in both directions. After our <a href="https://www.ailights.ch/">aiLights talk</a>, the Apertus team shared our findings with their staff. This close feedback loop between research and practice is exactly what makes the Swiss AI ecosystem worth investing in.</p>
<figure><img alt="" src="https://liip.rokka.io/www_inarticle_5/3719ab/04.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/3719ab/04.jpg 2x"><figcaption>Christian Stocker presenting ZüriCityGPT. Photo: Oleg Lavrovsky (CC BY 4.0), source: <a href="https://log.alets.ch/115/">https://log.alets.ch/115/</a></figcaption></figure>
<p>My practical advice, for anyone considering sovereign AI: start with the use case, then choose the model. If your priority is maximum answer quality today, more popular models are usually the stronger choice. If your priority is data sovereignty, transparency, and independence — and your knowledge base is well-curated — Apertus already delivers. The question is not "sovereign AI or quality" but "how much quality gap are you willing to accept for full sovereignty?" And that gap is closing.</p>
<p>Check the <a href="https://docs.google.com/presentation/d/1Q792ccRiiiRk6zIlmCu7GkkjjZ6kiZJfbRk_CSBhxJ8/edit?usp=sharing">Slides</a> and <a href="https://www.youtube.com/watch?v=Fk0g--aWi1M">Recording</a> for further details.</p>
<h1>Acknowledgements</h1>
<p>I would like to thank the ETH Zurich, EPFL, and the wider <a href="https://www.swisscom.ch/en/about/news/2025/09/02-apertus.html">Swiss AI Initiative</a> community for making Apertus available as a public good. As Martin Jaggi from EPFL put it: "We aim to provide a blueprint for how a trustworthy, sovereign, and inclusive AI model can be developed." (<a href="https://ethz.ch/en/news-and-events/eth-news/news/2025/09/press-release-apertus-a-fully-open-transparent-multilingual-language-model.html">source</a>) Eight months in, we can see that blueprint taking shape and are looking forward to test the 1.5 model in practice as well.</p>
<ul>
<li>
<p>Thank you <a href="https://www.liip.ch/de/team/chregu">Christian Stocker</a> and the <a href="https://liipgpt.ch">LiipGPT</a> team for your dedication to build a practical, experiment-driven and scalable solution for AI chat and search.</p>
</li>
<li>
<p>Thank you <a href="https://www.linkedin.com/in/sabine-wildemann/">Sabine Wildemann</a> and the <a href="https://www.ailights.ch/">aiLights</a> team for hosting our talk.</p>
</li>
<li>
<p>Thank you <a href="https://log.alets.ch/">Oleg Lavrovsky</a> and the Apertus community for your feedback and support.</p>
</li>
<li>
<p>Thank you <a href="https://publicai.ch/">Public AI</a> and our partner <a href="https://www.infomaniak.com/en/hosting/ai-services/open-source-models">Infomaniak</a> for providing the infrastructure.</p>
</li>
</ul>
<h1>Build with Apertus: join Hack Apertus</h1>
<p>Want to get hands-on with sovereign Swiss AI? <a href="https://hackapertus.ch/">Hack Apertus</a> is a two-stage open-source hackathon series where teams build on Apertus to develop blueprints for sovereign infrastructure across the public and private sector. Liip is a partner — we are excited to see what the community builds.</p>
<p>Sign up at <a href="https://hackapertus.ch/">hackapertus.ch</a>.</p>
<figure><a href="https://hackapertus.ch"><img alt="" src="https://liip.rokka.io/www_inarticle_5/afc775/hackapertus-partner-liip.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/afc775/hackapertus-partner-liip.jpg 2x"></a><figcaption>Hackapertus Liip Promo Image</figcaption></figure>]]></description>
    </item>
        <item>
      <title>A Sovereign AI Chatbot for the Canton of Fribourg</title>
      <link>https://www.liip.ch/en/blog/a-sovereign-ai-chatbot-for-the-canton-of-fribourg</link>
      <guid>https://www.liip.ch/en/blog/a-sovereign-ai-chatbot-for-the-canton-of-fribourg</guid>
      <pubDate>Mon, 15 Jun 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<h2>Making Public Information More Accessible</h2>
<p>The fr.ch portal brings together a vast amount of administrative information: procedures, legislation, forms, cantonal services, and municipal information. Finding the right answer within such a large website is not always straightforward.</p>
<p>Users simply ask their question in natural language, just as they would ask another person. Although <a href="https://www.fr.ch/de">fr.ch</a> is available in French and German, as befits a bilingual canton, questions can be asked in any language, allowing people who do not speak either official language to access the information they need.</p>
<p>The AI chatbot identifies relevant content on fr.ch and within Fribourg’s legal database, then generates a written response while citing the official sources used.</p>
<p>This transparency is essential. AI does not replace official information; it makes it easier to access.</p>
<h2>AI Designed for Digital Sovereignty</h2>
<p>Data sovereignty was a central requirement of the project. The State Chancellery wanted to retain full control over both the infrastructure and data processing.</p>
<figure><img alt="" src="https://liip.rokka.io/www_inarticle_5/860740/chatbot-digital-sov-en.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/860740/chatbot-digital-sov-en.jpg 2x"></figure>
<p>The chatbot is powered by <a href="https://www.liip.ch/en/work/projects/liipgpt">LiipGPT</a>, our generative AI platform. Our Retrieval-Augmented Generation (RAG) engine selects the official content most relevant to each question. The solution is hosted in Switzerland by Exoscale.</p>
<p>For the Large Language Model (LLM), we use Mistral AI, a leading European provider. The model is also hosted in Switzerland by <a href="https://www.infomaniak.com/en/hosting/our-cloud-computing-offers">Infomaniak</a>, a pioneer in sustainable and environmentally responsible web hosting. The LLM servers run exclusively on renewable energy and combine natural cooling, heat recovery, optimised and recycled hardware, and local carbon offsetting.</p>
<p>This architecture reduces dependence on major US-based platforms and promotes a Swiss and European approach to generative AI. Requests are anonymised, and no personal data is shared with third parties. The entire solution remains under Swiss jurisdiction and complies with applicable data protection legislation.</p>
<h2>A Collaboration Rooted in Western Switzerland</h2>
<p>The State Chancellery of Fribourg led the project with a clear understanding of the administrative and political challenges involved. Our team, including colleagues based in Fribourg, developed the solution in close collaboration with the Chancellery, ensuring it addressed real-world needs as effectively as possible.</p>
<p>This close partnership enabled fast feedback loops and a strong focus on user experience. Beyond the technology itself, the goal was to create a tool that is useful, reliable, and easy for the people of Fribourg to understand and use.</p>
<h2>A First Step Towards a More Accessible Administration</h2>
<p>Since the initial launch in March, we have refined several aspects of the solution to further improve response quality. To support this process, our client benefits from our automated evaluation tools, which continuously monitor and assess the quality of generated responses.</p>
<p>This first version covers public information available on fr.ch as well as Fribourg’s legal database. However, the scope is not limited to the cantonal portal alone: it is gradually being extended to include information published by other cantonal institutions and selected municipalities. As new sources are added, maintaining response quality remains a key priority. The Canton of Fribourg also maintains <a href="https://www.fr.ch/le-chatbot-ia-de-frch">a dedicated page for the chatbot</a>, which sets out, amongst other things, the data sources used.</p>
<p>One conviction guides our work: AI in the public sector can be sovereign, transparent, and useful. Achieving this requires maintaining control over the infrastructure and always providing clear source references.</p>
<p>Interested in discussing AI for your institution? Don't hesitate to <a href="https://www.liip.ch/en/team/thomas-denervaud">contact me</a></p>]]></description>
    </item>
      </channel>
</rss>