Commit Graph
100 Commits
Author SHA1 Message Date
inference-bot e0b9c0cd7e docs: clickable Key links, footer source link, move operator material to co-op/ops-docs
- README: render the Key links as real Markdown links (mailto: for the
  contact address); drop the 'lives in a public git repository' note now
  that the footer carries the source link.
- mkdocs.yml: add a theme override (custom_dir: overrides) that puts a
  'Documentation source' link in the footer of every page.
- Move the operator runbook, maintenance notes and incident write-up out
  of the published site into the git-only co-op/ops-docs repository;
  remove them from the nav and repoint cross-references at Gitea.
2026-11-03 23:30:58 +00:00
inference-bot c95bae161b charter: link agreements to site-relative paths, not Gitea raw URLs 2026-11-03 21:47:34 +00:00
inference-bot a81249eda2 publishing: deploy the docs to their own Surfer app at docs.inference.coop
The docs now have a dedicated Cloudron app (io.cloudron.surfer,
location docs.inference.coop, id 85b7ce06-e2af-49a4-bd4f-a9c2e692e3ab)
serving /app/data/public. deploy.sh writes there and nowhere else; the
two copies inside the marketing Surfer app (public-docs and
public/docs) have been deleted, so there is one canonical location.

SURFER_APP now defaults to docs.inference.coop and DOCS_DEST to
/app/data/public.
2026-11-03 21:39:41 +00:00
inference-bot 49ce027c5b ci: thin Woodpecker pipeline that runs the existing publishing scripts
Add .woodpecker.yml — install the pinned toolchain, run publishing/build.sh,
then publishing/deploy.sh. No build logic is duplicated; the publishing layer
stays the source of truth. Manual runs only for now: the push webhook is not
wired until the Woodpecker instance is restricted, connected to Gitea and
proven by a manual run.
2026-11-03 21:34:36 +00:00
inference-bot 4e44793aaf docs site: scale headings with the viewport so the title stops breaking mid-word
At 360px wide the h1 was still 52px, because Material keeps a 20px root on mobile, so
"Cooperative" (297px at that size) left only ~30px of slack before breaking mid-word.

Headings now use clamp() to track the viewport and reach the same desktop sizes, with
word-break: normal, hyphens: none and text-wrap: balance so wrapping happens at the
space and the two lines are balanced rather than one word sitting alone.
2026-11-03 20:50:27 +00:00
inference-bot bf356cd9a3 docs site: legible header in dark mode, typography in its own stylesheet
Dark mode: the slate scheme set the header to #3f6b3e, a dark green on a dark page, so
the bar disappeared into the background. It is now green-mid with near-black text.

Typography moves to publishing/typography.css, loaded after brand.css, and declares
Figtree on the elements themselves -- Material defines --md-text-font-family on <body>,
so a :root value loses to it by DOM proximity. Heading colours are scoped to the light
scheme, since ink is unreadable on the dark one.
2026-11-03 20:36:45 +00:00
inference-bot 9b66409343 docs site: make Figtree actually apply, and size headings like the website
Material emits its own font variables and defines --md-text-font-family on <body>,
so brand.css's :root value lost to it by DOM proximity -- the same failure mode as the
palette, and the reason the site rendered entirely in the system font stack with
Material's default 32px/300 headings.

theme.font: false stops Material supplying typography, and brand.css now declares the
font on body, the navigation, the header and every heading, with heading sizes closer to
the website. Figtree is still self-hosted from publishing/fonts.
2026-11-03 20:35:20 +00:00
inference-bot 4069ee12f6 docs site: use Material's custom palette so the co-op colours actually apply
The theme was configured with primary: teal and accent: deep orange, so every page
shipped data-md-color-primary="teal" / data-md-color-accent="deep-orange" and Material
set --md-primary-fg-color and friends on <body>. Those variables then beat brand.css,
which sets them on <html>, because a value on the nearer ancestor wins for descendants
regardless of specificity. The result: cream background and ink from brand.css applied,
but the header, links and accents stayed Material's defaults.

primary/accent are now "custom", Material emits no palette of its own, and the co-op
variables in publishing/brand.css take effect.
2026-11-03 20:22:45 +00:00
inference-bot 3cc32708d9 docs site: deploy from a dedicated clean clone; poll against last deployed commit
- docs-deploy-poll.service and the receiver now build from
  /home/ubuntu/.docs-publisher, so uncommitted edits in a working clone can
  never block a deploy
- the poller compares origin/main against the last DEPLOYED commit (state
  file), so a push made from the deploy clone itself also triggers a deploy
2026-11-03 19:48:34 +00:00
inference-bot f1be37a725 docs site: drop host names from a brand.css comment so the no-external-host grep reads clean 2026-11-03 19:43:00 +00:00
inference-bot 5b432079b7 docs site: ignore __pycache__ 2026-11-03 19:40:39 +00:00
inference-bot 8b1f6d4a65 docs site: release the deploy lock after each deploy
The receiver took the deploy lock but never released it, which starved the
poller (flock -n failed instantly on every cycle).
2026-11-03 19:40:36 +00:00
inference-bot 387269e245 docs site: rewrite directory-style links to their landing pages
A MkDocs hook turns links like [incidents/](incidents/) — which Gitea
renders as a directory listing but a static site would resolve against the
page URL — into links to the generated landing page for that directory.
2026-11-03 19:37:54 +00:00
inference-bot 2d3291d493 docs site: generate landing pages for documented directories
infrastructure.md links to incidents/ the way Gitea renders directories.
A static site has no directory listing, so the build now generates a small
landing page (with each document's own title) for any documented directory
that lacks an index. Build artifact only — no document is touched.
2026-11-03 19:35:45 +00:00
inference-bot fa1f38ced2 docs site: serve a robots.txt at the site root 2026-11-03 19:31:12 +00:00
inference-bot 44f040c27f docs site: add push-to-main polling deployer (agent host)
The agent host's cloud firewall only admits inbound SSH, so the registered
Gitea webhook cannot reach the receiver. docs-deploy-poll.service polls
Gitea every 60s over outbound HTTPS and deploys whenever main moves; the
webhook stays wired for the moment a port is opened in the Infomaniak panel.
Both serialise on the same deploy lock.
2026-11-03 19:29:39 +00:00
inference-bot 62158c16cc docs site: add MkDocs publishing layer (build, deploy, push-to-main webhook)
Renders the repository's Markdown (which stays where it is) into a
member-readable static site with Material for MkDocs: co-op brand colours
and logo, self-hosted OFL Figtree, offline search, no external hosts.

- publishing/build.sh   stage .site-src, render .site-build (mkdocs --strict)
- publishing/deploy.sh  write the build into the Surfer app container
- publishing/webhook-receiver.py + .service   Gitea push hook on main
                        triggers pull -> build -> deploy (agent host, no new
                        Cloudron app)
2026-11-03 19:26:21 +00:00
inference-bot cdb62fc247 docs: Metis decisions now count toward the allowance
Metering on /v1/systemone is live: each call is billed at $0.12 per 1M
input tokens, computed from the exact token count GreenPT returns and
attributed to the calling member key. Replace the "not yet metered"
warnings in models.md and api-access.md with the accurate position.

(metering verified 2026-11-03; code/litellm patch_passthrough_token_cost.py)
2026-11-03 19:03:27 +00:00
inference-bot 7c9c8ef578 docs: Metis is not yet metered; document the decisions endpoint in API access
models.md claimed decisions count toward the member allowance. Verified today that a
/v1/systemone call registers no spend against the calling key, so the claim was wrong.
States the gap plainly instead. api-access.md now names the decisions route, the fact
that it is not an OpenAI chat endpoint, and the metering caveat.
2026-11-03 18:47:26 +00:00
inference-bot 1fec2b16eb models: document Metis, the GreenPT decision model on /v1/systemone
Add a Decisions section: Metis returns probabilities/choices/scores rather than
text, is called at /v1/systemone with a member's normal gateway key, is
GreenPT-hosted (policy-based privacy, EU, renewable), and is metered
approximately (flat per-call estimate, not exact tokens).
2026-11-03 18:32:31 +00:00
inference-bot 6b41382bef models: Regolo's 2026-11-01 prices — apertus-70b $1.16/$3.94, qwen3.5-122b $0.70/$3.94 2026-11-01 00:44:07 +00:00
inference-bot deb53eabc8 Merge #9: incidents: add the 2026-10-02 gateway outage write-up
Reviewed by dckc (review 6, APPROVED) and cross-checked against the gateway upgrade
runbook. Merged by push: this repo's approval gate is restricted to the Owners team,
which currently holds only machine accounts, and Gitea will not accept their API
reviews as approvals — see the PR discussion.
2026-10-30 15:03:53 +00:00
inference-bot 27415161f9 Revert "Merge #9: add the 2026-10-02 gateway outage write-up"
This reverts commit ddbbe01801, reversing
changes made to 2fdda5a201.
2026-10-30 15:03:50 +00:00
inference-bot ddbbe01801 Merge #9: add the 2026-10-02 gateway outage write-up
Reviewed by dckc (review 6, APPROVED) and cross-checked against the gateway upgrade
runbook. Merged by push: this repo's approval gate is restricted to the Owners team,
which currently holds only machine accounts, and Gitea will not accept their API
reviews as approvals — see the PR discussion.
2026-10-30 15:03:23 +00:00
inference-bot 2fdda5a201 privacy: state what the API path actually stores (and add it where members read)
The policy described chat history and enclave models carefully but never addressed
the API path, and §2 read as though all content is retained — which is wrong for
members using their own keys.

Verified before writing, rather than restating policy language: a request with a
distinctive marker was sent through the gateway and searched for afterwards. It
appears nowhere in the gateway's logs, `litellm_settings` enables no content
logging, and the request records carry usage fields only (model, tokens, cost, key).

- privacy-policy.md §2: content retention now depends on the surface, with a pointer.
- privacy-policy.md §4: new subsection on API requests, including the two limits that
  stop it being read as more than it says — we can still link a request to a key and
  therefore a member, and "not stored by us" says nothing about the provider.
- api-access.md: a "what we store" section, since that is the page an API user reads
  before worrying about it.
- models.md: the privacy-limitations section now distinguishes chat from API.
2026-10-29 18:21:01 +00:00
inference-bot be2ebd1bc4 infrastructure: @inference-bot is retired, not 'being retired'
Records the completed state: room power and the portal's invite credential now both
belong to @inference-admin; the old account's admin flag is dropped, it is
deactivated, and its devices and tokens are deleted. Notes the two corrupt rooms it
cannot leave, so the next person does not re-investigate.
2026-10-29 18:10:38 +00:00
inference-bot fbfca9624e infrastructure: say which Matrix account is which, and start retiring @inference-bot
Four automated accounts touch the homeserver and two of them differed by one
character, which caused real confusion (a bot appearing to announce itself; the
steward unable to post in a room it had been asked to report to). This records
the distinction rather than leaving it to be rediscovered.

Power belongs to @inference-admin, voice belongs to @inferencebot, and
@inference-admin never speaks in a member room. @inference-bot is being retired:
its room power was transferred to @inference-admin, which is now administrator of
record for #general, #community, #design, #skillshare, #updates and
#infrastructure.

Also records the one live dependency that blocks finishing: the portal's member
invites still authenticate as the old account via MATRIX_BOT_TOKEN, so that has
to be repointed before its credentials are revoked. Without this written down the
next person would revoke the token and silently break member invites.

Verified while writing: the portal's token hashes to the old account's device
VYQDYBXULA, which is also the unexplained python-httpx client seen using that
account today.
2026-10-29 17:45:04 +00:00
inference-bot e0732af1fd models: apertus-70b is 262K context, not 65K — measured, not copied
The provider's published catalog says this model takes 30K input and has no
vision support. Both of those are wrong. Sent through our own gateway:

- an image returns the right answer ("Red" for a solid red PNG)
- prompts of 32K, 70K, 130K and 262K input tokens are all accepted, with
  Regolo's own usage accounting reporting prompt_tokens=262021

Our own description of the v1.5 generation — image understanding and a 262K
context window — matches what the model demonstrably does, which is why the
figure goes to 262K. The old 65K undersold the model by roughly 4x.

Regolo's meta-model for qwen3.5-122b says 120K; it processed 262,023 tokens and
still followed the instruction at the end, so that row's 262K is confirmed as
written and is left alone.

Adds a line under the table recording that context figures here are measured
through the gateway rather than copied from provider catalogs, because that
difference is exactly what caused a member to report this as an error.
2026-10-29 17:11:17 +00:00
inference-bot 6cf50e6a5d docs: link the energy and carbon page from the model list 2026-10-29 04:16:48 +00:00
inference-bot f6dcde3cbb docs: how the co-op estimates energy and carbon (method, factors, and limits) 2026-10-29 04:16:36 +00:00
inference-bot 95c6258594 runbook: how to confirm the webhook URL match, and what the watch job does and does not cover 2026-10-28 14:19:37 +00:00
inference-bot 682b5530be runbook: correct the WEBHOOK_TOKEN rotation state (rotated 2026-10-27; URL match unverified) 2026-10-28 14:03:56 +00:00
inference-bot f27621d4de runbook: admin/webhook token split, metrics_snapshot task, correct sweep auth 2026-10-28 13:55:28 +00:00
inference-bot e7c86b16ba models: fix incorrect 'biggest context' claim for qwen3.5-122b (issue #4 — GLM/DeepSeek have 1M) 2026-10-16 16:32:08 -06:00
inference-bot d3c3c8f8f7 models: normalize Green column to ✅ format; explain privacy column terms (architectural/policy/ZDR) 2026-10-16 11:05:11 -06:00
inference-bot 884340427f models: dedupe green emoji legend; fix image-gen instructions (Integrations button > Image) 2026-10-16 10:59:05 -06:00
inference-bot 9699ff08cc models: remove PublicAI provider; Regolo becomes the Apertus provider; emoji = feature tier; add Qwen-Image image-generation section 2026-10-16 10:50:46 -06:00
inference-bot 0d4a62a2da models: add Regolo provider (Apertus 70B, Qwen 3.5 122B) + image generation via regolo/qwen-image 2026-10-16 10:29:48 -06:00
inference-bot 7ea5e1a4a1 runbook: spaCy model in /app/data for EPUB parsing + restore caveat (issue #20) 2026-10-14 10:27:24 -06:00
inference-bot 1e57fd8f00 docs: correct tool-server howto — personal connections are OpenAPI-only; MCP is admin-added 2026-10-13 22:37:01 -06:00
inference-bot af2b6eacd0 MCP howto: document the Type selector (MCP vs OpenAPI) and auth field 2026-10-13 20:12:24 -06:00
inference-bot fd2cf4089a MCP section: restore HTTP-only and refresh gotchas (verified against UI) 2026-10-13 11:52:46 -06:00
inference-bot d047ced4c6 docs: correct MCP path to actual UI labels (Settings > Tools > External Tool Servers) 2026-10-13 11:43:47 -06:00
inference-bot d0ec489af7 docs: clarify Tools tab requires fresh session after capability change 2026-10-13 11:39:13 -06:00
inference-bot ccebba45af docs: move MCP howto under 'Use the chat' (was misfiled under governance) 2026-10-13 11:24:23 -06:00
inference-bot b9953ed086 docs: fix MCP howto — Tools tab requires the permission to reach the user session; clarify HTTP-only servers 2026-10-13 11:15:45 -06:00
inference-bot 4f995be9f1 docs: members can connect their own MCP tool servers in chat (direct tool servers enabled) 2026-10-13 08:49:24 -06:00
inference-bot fed58a3437 docs: scheduled tasks in portal/gateway (self-maintaining apps) + operator verification steps 2026-10-12 19:32:32 -06:00
inference-bot 0f657b7cf4 docs: add #design room to Matrix section 2026-10-11 17:02:45 -06:00
inference-bot a3defe1bed docs: add #inferencebot-updates room to Matrix section 2026-10-11 16:53:28 -06:00
inference-bot e175f07cb5 Matrix docs: note Element X apps are not currently supported (legacy SSO) 2026-10-07 22:30:10 -06:00
inference-bot a5e33b73dd Swap tinfoil/glm-5-3-flash (deprecated 10-09) for tinfoil/glm-5.3 flagship 2026-10-07 22:08:48 -06:00
inference-bot 21b31b3a0a ToS + privacy: make model/provider agnostic; user assesses per-model affordances 2026-10-07 07:18:32 -06:00
inference-bot 9d520130f4 Privacy policy: correct per-model privacy claims (TEE vs renewable vs open) 2026-10-07 07:15:53 -06:00
inference-bot 7b0b13a54a ToS: accurate privacy framing, expanded acceptable use, member indemnity clause 2026-10-07 07:13:58 -06:00
inference-bot bed53d6cbd Membership pricing: sliding scale from $5/mo (suggested $15) across docs 2026-10-05 10:09:15 -06:00
inference-bot 121afa101a infrastructure: big-picture diagram now shows all three providers with value tiers 2026-10-05 09:23:33 -06:00
inference-bot d865501fbf README: add Matrix/community chat entry to Start here 2026-10-05 08:49:35 -06:00
inference-bot adabc8bccd Merge pull request 'models: Correctly document greenpt/glm-5.3 cache read pricing' (#2) from slomo/docs:greenpt-glm-5.3-cache-pricing into main 2026-10-05 14:39:29 +00:00
inference-bot 7313f821e3 getting-started: document members-only unencrypted Matrix space + admin-only invites 2026-10-03 12:43:25 -06:00
inference-bot d8bd033f05 docs: Matrix chat on home page + self-serve federated MXID in getting-started 2026-10-03 11:29:53 -06:00
inference-bot c022a0b52e models: add cached-input pricing column (cache-read rates per model) 2026-10-03 09:34:32 -06:00
inference-bot a647284170 models: remove phantom tinfoil/glm-5-3 and kimi-k3 (not served); reconcile to gateway catalog 2026-10-02 22:36:28 -06:00
inference-bot 888ac8c299 models: value-tier emoji (🔒/🌱/📖) matching the chat picker 2026-10-02 22:31:51 -06:00
inference-bot dcdde204b0 models: greenpt/deepseek-v4.1-flash as default; Tinfoil deepseek as TEE twin 2026-10-02 22:15:47 -06:00
inference-bot 0a79c80483 docs: remove green-l/green-r from model list and API examples 2026-10-02 22:04:51 -06:00
inference-bot d2e90c6dc3 getting-started: Matrix — how to connect from any client (custom homeserver steps, separate identities) 2026-10-02 13:25:33 -06:00
inference-bot 7e2fa8c0a3 getting-started: Matrix chat for members 2026-10-02 12:35:52 -06:00
inference-bot 85a6045389 docs: Matrix (Synapse) — member chat, Space auto-invite via portal sync 2026-10-02 12:35:34 -06:00
inference-bot 8cff4871dd Document gateway v1.84.0 pin, CORS env rename, and 2026-10-02 outage incident 2026-10-01 23:35:39 -06:00
inference-bot 2509cd47df Document the Open Collective bot account: purpose, verified read-mostly scope, supervision 2026-10-01 17:22:13 -06:00
inference-bot 4966931a8c Privacy policy: note operational log retention (from security review) 2026-10-01 09:51:47 -06:00
inference-bot 5f0c7b4513 Models page: vision column (verified), context windows, provider education, how-to-pick guide, same-model-two-providers note 2026-09-29 12:16:31 -06:00
inference-bot 09f88f650f Document credit packs and per-member reset dates 2026-09-28 16:46:05 -06:00
inference-bot 34ce3b6753 Document audio models (STT/TTS) with API examples 2026-09-27 11:25:50 -06:00
inference-bot 40925b82b5 Add greenpt/glm-5.3 to model list 2026-09-26 16:52:24 -06:00
inference-bot b40552d57e Update tagline to 'AI, governed together' 2026-09-25 22:15:16 -06:00
inference-bot 4710df17ef Add PublicAI Apertus models + sovereignty/open-source notes 2026-09-25 15:56:12 -06:00
inference-bot 6a005947a9 Merge naming and provider comparison into one Providers table 2026-09-24 11:49:38 -06:00
inference-bot f3007e4c7b Add provider comparison chart with privacy and green-energy gradations 2026-09-24 10:56:10 -06:00
inference-bot 27d41a840e Add greenpt/glm-5.3-flash to model list 2026-09-24 10:43:18 -06:00
inference-bot 830aabb9b2 Harmonize tagline to 'Our AI, governed together' 2026-09-24 08:26:40 -06:00
inference-bot d1412c0993 Link to the new support/feature-request repo 2026-09-24 08:20:34 -06:00
inference-bot faeb958232 Update model names to tinfoil/* prefix 2026-09-24 08:16:19 -06:00
inference-bot a92251d80e Note models.md pricing mirrors LiteLLM config (kept in sync) 2026-09-23 21:08:30 -06:00
inference-bot 9fd074aaa7 Add per-model pricing (in/out per 1M tokens) to the model list 2026-09-23 21:07:04 -06:00
inference-bot 811da1617a Rename privacy caveat heading to 'Limitations on privacy' 2026-09-23 21:06:09 -06:00
inference-bot c6b659aeef Extract model catalog into a single models.md; point chat + API docs at it 2026-09-23 20:47:38 -06:00
inference-bot 5724b0ca2f Document multi-provider model choices (Tinfoil private + GreenPT green) 2026-09-23 20:34:33 -06:00
inference-bot 89152f0724 Remove completed Cloudron 10 follow-ups section 2026-09-23 14:17:09 -06:00
inference-bot 94d7971812 Mark proxyAuth->OIDC migration done; only SnappyMail remains 2026-09-23 14:16:04 -06:00
inference-bot 7f3dc0903e Move SSO migration plan out of public docs (tracked internally) 2026-09-23 08:09:58 -06:00
inference-bot c96de68f21 Track Cloudron 10 follow-ups and add SSO migration plan 2026-09-23 08:03:21 -06:00
inference-bot d6e697a0c3 Correct OC runbook: email null was a missing email scope, not a regression 2026-09-22 15:50:27 -06:00
inference-bot 16b4d6368c Document OC email-visibility regression and manual-provision workaround 2026-09-22 15:45:22 -06:00
inference-bot 290779494d Add operator token runbook (two-token split, configure/env gotcha) 2026-09-19 17:21:08 -06:00
inference-bot c8dd247b4f Document Git access and fork-and-PR contribution model 2026-09-18 17:09:18 -06:00
inference-bot 35b8eb1ef4 Remove landing-page pointer callout 2026-09-18 16:51:06 -06:00
inference-bot e8981be8b3 Point docs at the landing page for newcomers 2026-09-18 16:47:39 -06:00
inference-bot 4cccc521e8 Split docs into README TOC + getting-started, api-access, infrastructure guides 2026-09-18 16:44:32 -06:00