{"id":79883,"date":"2026-08-05T21:30:41","date_gmt":"2026-08-05T21:30:41","guid":{"rendered":"https:\/\/owncloud.com\/?p=79883"},"modified":"2026-08-05T21:30:41","modified_gmt":"2026-08-05T21:30:41","slug":"summarise-any-file-in-your-language-on-your-model-this-ocis-extension-does-all-three-and-your-documents-never-leave-the-infrastructure-you-choose","status":"publish","type":"post","link":"https:\/\/owncloud.com\/de\/blogs\/summarise-any-file-in-your-language-on-your-model-this-ocis-extension-does-all-three-and-your-documents-never-leave-the-infrastructure-you-choose\/","title":{"rendered":"Your Documents. Summarised. By Your Model. In Your Language."},"content":{"rendered":"<p>web-app-ai-doc-summary is the first AI extension to ship into the ownCloud web-extensions repository since we relicensed it to Apache-2.0 on June 15th. Lukas Hirt wrote it in a week.<\/p>\n<h3>What It Does<\/h3>\n<p>Open a PDF, TXT, or Markdown file in oCIS. A Summary tab appears in the sidebar. Click it. You get a 2\u20133 sentence overview and 3\u20134 key points, generated by whichever LLM you&#8217;ve configured. The summary appears in your preferred interface language \u2014 the extension detects it via BCP 47 and tells the model to respond accordingly.<\/p>\n<p>That last detail is not a footnote. It&#8217;s the feature. A Bavarian school teacher opens a PDF report in German. The summary is in German. A Dutch researcher opens an English-language paper. The summary is in Dutch. No configuration required. The extension reads the user&#8217;s browser language preference and instructs the model automatically.<\/p>\n<p>There&#8217;s also a context menu action. Right-click any supported file in the file list. &#8222;Summarise.&#8220; Same result, without opening the full file viewer first.<\/p>\n<h3>Bring Your Own Model<\/h3>\n<p>The extension accepts an endpoint, a model name, and an optional API key via application config. The endpoint is any OpenAI-compatible API. That means OpenAI if you&#8217;re using it. It also means Ollama running on a server in your data centre. Or any of the dozens of LLM serving frameworks that implement the OpenAI API format \u2014 vLLM, LM Studio, Llama.cpp server, LocalAI.<\/p>\n<p>This is the architectural decision that makes the sovereign story real. Not &#8222;we chose not to build in a cloud AI dependency.&#8220; Simply: the extension takes an endpoint. You choose what&#8217;s behind that endpoint. If it&#8217;s a self-hosted model on European infrastructure, your documents never leave European infrastructure.<\/p>\n<p>For developers getting started locally, Lukas wired an Ollama service directly into the dev docker-compose stack with a Traefik config. Clone the repo, run docker-compose up, and have a local LLM available for testing without any external API key or cloud account.<\/p>\n<h3>The Engineering Details That Matter<\/h3>\n<ul>\n<li><strong>LLM capability probing.<\/strong> On first use, the extension probes the configured endpoint to discover what the model supports: structured output, tool use, streaming, context window size. It caches the result. The extension adapts to the model rather than assuming capabilities.<\/li>\n<li><strong>PDF text extraction via pdf.js.<\/strong> The extension uses pdf.js in fake-worker mode \u2014 running PDF parsing in the main thread without triggering CSP violations. Works cleanly across oCIS deployments with strict security headers, including hardened public sector configurations.<\/li>\n<li><strong>Test coverage.<\/strong> Unit tests cover the composables. E2E tests cover the full summarise flow.<\/li>\n<li><strong>DCO sign-off.<\/strong>Signed-off-by: Lukas Hirt &lt;info@hirt.cz&gt;. No CLA. His copyright.<\/li>\n<\/ul>\n<h3>What This Week Looks Like<\/h3>\n<p>Three PRs in three days from the same developer on the same repository:<\/p>\n<ul>\n<li><strong>June 15 \u2014 <\/strong><a href=\"https:\/\/github.com\/owncloud\/web-extensions\/pull\/443\" target=\"_blank\" rel=\"noopener\"><strong>PR #443<\/strong><\/a><strong>:<\/strong> web-extensions relicensed from AGPL-3.0 to Apache-2.0. REUSE 3.x compliance. Automated licence checks in CI.<\/li>\n<li><strong>June 17 \u2014 <\/strong><a href=\"https:\/\/github.com\/owncloud\/web-extensions\/pull\/452\" target=\"_blank\" rel=\"noopener\"><strong>PR #452<\/strong><\/a><strong> (this one):<\/strong> AI document summary extension. Merged.<\/li>\n<li><strong>June 17 \u2014 <\/strong><a href=\"https:\/\/github.com\/owncloud\/web-extensions\/pull\/454\" target=\"_blank\" rel=\"noopener\"><strong>PR #454<\/strong><\/a><strong>:<\/strong> AI chat sidebar \u2014 back-and-forth conversation with file content, with in-place editing. Pending.<\/li>\n<\/ul>\n<p>The relicensing was the precondition. The AI extensions are the payoff.<\/p>\n<h3>For Administrators<\/h3>\n<p>Configuration is via application config, not per-user settings. An oCIS administrator configures the LLM endpoint and model once. Users get the Summary tab without any setup on their end. If you&#8217;re running a self-hosted Ollama instance, point the extension at it.<\/p>\n<p><a href=\"https:\/\/github.com\/owncloud\/web-extensions\" target=\"_blank\" rel=\"noopener\">github.com\/owncloud\/web-extensions<\/a><\/p>\n<h3>For Developers<\/h3>\n<p>The Ollama dev stack is ready to use. Clone the repo, check the docker-compose config, run it, and you have a local LLM and a local oCIS instance for testing. The E2E test suite runs against this stack.<\/p>\n<p>The AI development guide is at <a href=\"https:\/\/owncloud.dev\" target=\"_blank\" rel=\"noopener\">owncloud.dev<\/a>. The<a href=\"https:\/\/owncloud.com\/opensource\/ai-contribution-policy\/\"> AI-Assisted Contribution Policy<\/a> is published at <a href=\"https:\/\/kiteworks.com\/opensource\" target=\"_blank\" rel=\"noopener\">kiteworks.com\/opensource<\/a>.<\/p>\n<p>Build something.<\/p>\n<hr \/>\n<p><a href=\"https:\/\/github.com\/owncloud\/web-extensions\/pull\/452\" target=\"_blank\" rel=\"noopener\">github.com\/owncloud\/web-extensions\/pull\/452<\/a><\/p>\n<p><em>Lukas Hirt is a Collaborator on ownCloud web-extensions. PR #452 opened June 15, merged June 17, 2026.<br \/>\n<\/em><em>ownCloud OSPO:<\/em> ospo@kiteworks.com \u00b7 <a href=\"https:\/\/kiteworks.com\/opensource\" target=\"_blank\" rel=\"noopener\">kiteworks.com\/opensource<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>web-app-ai-doc-summary is the first AI extension to ship into the ownCloud web-extensions repository since we relicensed it to Apache-2.0 on June 15th. Lukas Hirt wrote it in a week. What It Does Open a PDF, TXT, or Markdown file in oCIS. A Summary tab appears in the sidebar. Click it. You get a 2\u20133 sentence [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":79884,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[603,342,333,337,509,401,344,621,339,55,354],"tags":[],"class_list":["post-79883","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-apps","category-cloud","category-community","category-foss","category-infinite-scale","category-marketplace","category-opensource","category-ospo","category-owncloud","category-owncloud-product","category-release"],"acf":[],"_links":{"self":[{"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/posts\/79883","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/comments?post=79883"}],"version-history":[{"count":1,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/posts\/79883\/revisions"}],"predecessor-version":[{"id":79885,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/posts\/79883\/revisions\/79885"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/media\/79884"}],"wp:attachment":[{"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/media?parent=79883"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/categories?post=79883"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/tags?post=79883"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}