From 070dec3d2937014f0531f2222b36546a5ba95c94 Mon Sep 17 00:00:00 2001 From: Nathan Schneider Date: Sun, 18 Oct 2026 20:26:40 -0600 Subject: [PATCH] Sustainable LibreChat setup: official manifest, config layer, brand overlay - CloudronManifest.json: byte-identical copy of the OFFICIAL appstore manifest (the hand-edited one stripped addons and crash-looped the app on 2026-10-18) - Dockerfile: pinned base (202610150224320000), brand assets only + title sed - librechat.yaml: schema 1.3.17; chat models only in picker (qwen-image moved to the agent image tool); speech via gateway with capped key refs; SearXNG web search; inference-docs MCP server; forward-compatible interface.theme - mcp/server.py: docs MCP server (stdio, stdlib-only, tool search_docs) - assets/: co-op logo + favicons/PWA icons --- .dockerignore | 2 + CloudronManifest.json | 62 +++++-- Dockerfile | 37 +++- README.md | 155 ++++++++++++++--- assets/apple-touch-icon-180x180.png | Bin 0 -> 6756 bytes assets/favicon-16x16.png | Bin 0 -> 6756 bytes assets/favicon-32x32.png | Bin 0 -> 6756 bytes assets/icon-192x192.png | Bin 0 -> 6756 bytes assets/logo.png | Bin 0 -> 6756 bytes assets/logo.svg | 3 + assets/maskable-icon.png | Bin 0 -> 6756 bytes librechat.yaml | 129 +++++++------- mcp/server.py | 256 ++++++++++++++++++++++++++++ 13 files changed, 538 insertions(+), 106 deletions(-) create mode 100644 .dockerignore create mode 100644 assets/apple-touch-icon-180x180.png create mode 100644 assets/favicon-16x16.png create mode 100644 assets/favicon-32x32.png create mode 100644 assets/icon-192x192.png create mode 100644 assets/logo.png create mode 100644 assets/logo.svg create mode 100644 assets/maskable-icon.png create mode 100644 mcp/server.py diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..fac5ce7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.git +*.md diff --git a/CloudronManifest.json b/CloudronManifest.json index 4cda0fd..c75d841 100644 --- a/CloudronManifest.json +++ b/CloudronManifest.json @@ -1,11 +1,53 @@ { - "manifestVersion": 2, - "id": "io.inference.librechat.custom", - "title": "LibreChat (Co‑op custom)", - "description": "LibreChat sandbox with Inference‑Co‑op branding and image‑generation support.", - "version": "1.3.1", - "author": "Inference Co‑op", - "healthCheckPath": "/", - "httpPort": 3080, - "icon": "logo-coop.png" -} + "id": "ai.librechat.cloudronapp", + "version": "1.4.1", + "title": "LibreChat", + "upstreamVersion": "0.8.8", + "author": "Danny Avila", + "description": "LibreChat is an open-source chatbot client that supports multiple AI providers and models including:\n\n- OpenAI GPT Models\n- Anthropic Claude Models\n- Google PaLM Models\n- Various open-source local models\n\nFeatures:\n- Switch between various AI models\n- Conversation history\n- Plugins support\n- File upload and processing\n- Custom instructions\n- Multiple conversation modes\n\n", + "changelog": "* Update uv to 0.13.1\n", + "tagline": "ChatGPT-like interface with model switching", + "website": "https://github.com/danny-avila/LibreChat", + "documentationUrl": "https://docs.cloudron.io/packages/librechat/", + "forumUrl": "https://forum.cloudron.io/category/210/librechat", + "contactEmail": "support@cloudron.io", + "healthCheckPath": "/health", + "httpPort": 3080, + "addons": { + "postgresql": {}, + "mongodb": {}, + "localstorage": {}, + "oidc": { + "loginRedirectUri": "/oauth/openid/callback" + }, + "sendmail": { + "supportsDisplayName": true + } + }, + "checklist": { + "register-admin": { + "message": "On the first visit, register yourself as an admin user" + }, + "disable-registration": { + "message": "Disable registration, if required, to prevent misuse" + }, + "set-api-keys": { + "message": "Set API keys in /app/data/env file and restart the app" + } + }, + "optionalSso": true, + "manifestVersion": 2, + "memoryLimit": 1073741824, + "minBoxVersion": "8.1.0", + "tags": [ + "ai", + "chat", + "gpt" + ], + "mediaLinks": [ + "https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-00.png", + "https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-01.png" + ], + "icon": "file://logo.png", + "dockerImage": "cloudron/ai.librechat.cloudronapp:202610150224320000" +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 6877688..c65d2fc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,34 @@ +# Inference Co-op LibreChat — brand overlay on the official Cloudron package +# +# Build: cloudron builder build --repository registry.inference.coop/co-op/librechat-custom --tag - +# Deploy: cloudron update --app --image registry.inference.coop/co-op/librechat-custom: +# (run from THIS directory — the CLI reads CloudronManifest.json here) +# +# Rules that keep this image safe: +# 1. The base tag is PINNED to the exact appstore image the app runs +# (manifest.dockerImage). Never a floating tag: a rebuild must never +# silently pull a newer LibreChat than the one we validated. +# 2. NEVER edit CloudronManifest.json — the copy in this repo must stay +# byte-identical to the OFFICIAL appstore manifest. `cloudron update` +# reads it from the deploy directory and applies it to the app; a +# hand-edited manifest that omits addons (postgresql, mongodb, oidc, +# sendmail, localstorage) strips them from the app and crash-loops it +# (mkdir: Read-only file system). That is what broke the sandbox on +# 2026-10-18 — the manifest, not the overlay, was the bug. +# 3. This image changes ONLY static brand assets. All behavior lives on the +# persistent volume (/app/data/librechat.yaml, /app/data/env, +# /app/data/mcp/) and survives image updates unchanged. FROM cloudron/ai.librechat.cloudronapp:202610150224320000 -# Overwrite LibreChat config with our custom version (includes icons, models, themes, API keys settings) -COPY librechat.yaml /app/code/librechat/librechat.yaml +# Login-page + header logo (the client bundle references assets/logo.svg) +COPY assets/logo.svg /app/code/librechat/client/dist/assets/logo.svg +# Browser favicons + PWA icons (referenced by dist/index.html + manifest.webmanifest) +COPY assets/favicon-32x32.png /app/code/librechat/client/dist/assets/favicon-32x32.png +COPY assets/favicon-16x16.png /app/code/librechat/client/dist/assets/favicon-16x16.png +COPY assets/apple-touch-icon-180x180.png /app/code/librechat/client/dist/assets/apple-touch-icon-180x180.png +COPY assets/icon-192x192.png /app/code/librechat/client/dist/assets/icon-192x192.png +COPY assets/maskable-icon.png /app/code/librechat/client/dist/assets/maskable-icon.png -COPY CloudronManifest.json /app/CloudronManifest.json -RUN mkdir -p /app/data/public/assets -COPY logo.svg /app/code/librechat/client/dist/assets/logo.svg -COPY logo.png /app/code/librechat/client/dist/assets/logo-coop.png +# Browser-tab title (index.html is baked at build; sed no-ops harmlessly if +# the upstream markup ever changes) +RUN sed -i 's|LibreChat|Inference Co-op|' /app/code/librechat/client/dist/index.html diff --git a/README.md b/README.md index 6704f5a..cff29a5 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,133 @@ -# LibreChat sandbox maintenance +# LibreChat sandbox — Inference Co-op customization -**Current image** -- Docker image: `cloudron/ai.librechat.cloudronapp:202610150224320000` -- Deployed as app **0752e430‑aa36‑436e‑8668‑ef18da474f47** (LibreChat sandbox at `https://librechat-test.inference.coop`). +Source of truth for the LibreChat evaluation instance at +**librechat-test.inference.coop** (Cloudron app `4023ccbf-d57a-4500-97df-14de9cf3516e`, +appstore package `ai.librechat.cloudronapp@1.4.1`, which bundles **LibreChat +v0.8.8** on image `cloudron/ai.librechat.cloudronapp:202610150224320000`). -**Automatic updates** -- The "Automatic updates" toggle in the Cloudron UI has been turned **off** (as of 2026‑10‑18). This prevents the sandbox from pulling newer Docker images automatically. +This repo exists so the sandbox never drifts from what is deployed: the config +file here is byte-identical to `/app/data/librechat.yaml`, the MCP server here +is byte-identical to `/app/data/mcp/server.py`, and the Docker image is built +from this directory. -**Image‑generation button** -- Added the `regolo/qwen-image` model to `modelSpecs.list` in `librechat.yaml`. This makes LibreChat display a permanent **📷 Image generation** button for users, allowing easy prompt‑based image creation via the gateway. +## Architecture: what lives where -**Version‑pinning workflow** -1. **Create a version tag** when a new LibreChat release is approved (e.g. `cloudron/ai.librechat.cloudronapp:202610250100000000`). -2. **Push the tagged image** to the co‑op registry (e.g. `registry.inference.coop/librechat:sandbox‑2026‑10‑25`). - ```bash - docker pull cloudron/ai.librechat.cloudronapp: - docker tag cloudron/ai.librechat.cloudronapp: registry.inference.coop/librechat:sandbox‑ - docker login registry.inference.coop # use registry‑bot credentials - docker push registry.inference.coop/librechat:sandbox‑ - ``` -3. **Redeploy** the sandbox with the pinned tag: - ```bash - cloudron update --app 0752e430-aa36-436e-8668-ef18da474f47 \ - --image registry.inference.coop/librechat:sandbox‑ - ``` -4. **Verify** the app is running (`cloudron status --app `) and that the image field reflects the new tag. -5. **Record** the change in this document (date, tag, reason) and optionally open a GitHub/Gitea issue linking to the upstream LibreChat release. +| Layer | Location | Survives image update? | Repo mirror | +|---|---|---|---| +| App config | `/app/data/librechat.yaml` (volume) | yes | `librechat.yaml` | +| Env vars (env-file wins!) | `/app/data/env` (volume, sourced LAST by start.sh) | yes | changed lines documented below | +| Env vars (Cloudron-managed) | `cloudron env` (process env) | yes | documented below | +| MCP docs server | `/app/data/mcp/server.py` (volume) | yes | `mcp/server.py` | +| Brand assets (logo, favicons) | baked into image overlay | no — rebuilt per image | `assets/` | +| CloudronManifest.json | repo only (used by `cloudron update`) | n/a | byte-identical copy of the OFFICIAL appstore manifest | -**Rollback** -- To roll back, repeat step 3 with the previous image tag. +**Precedence gotcha:** `start.sh` does `source /run/librechat/env` AFTER the +process env, and `/app/data/env` is appended into it — so a value defined in +`/app/data/env` **overrides** the same `cloudron env` variable. That is why +`ALLOW_EMAIL_LOGIN=false` must be set in `/app/data/env`, not (only) via +`cloudron env`. -**Future maintainers** -- All steps are captured in this doc and in the corresponding issue in `co‑op/support` (Issue #24). The `co‑op/docs` repository should contain this file; keep it up‑to‑date whenever the sandbox image changes or the automatic‑update flag is toggled. +## Deploy a config change (no image rebuild needed) + +```bash +B64=$(base64 -w0 librechat.yaml) +cloudron --server my.inference.coop --token "$CLOUDRON_TOKEN" exec \ + --app 4023ccbf-d57a-4500-97df-14de9cf3516e \ + -- bash -c "echo '$B64' | base64 -d > /app/data/librechat.yaml" +cloudron --server my.inference.coop --token "$CLOUDRON_TOKEN" restart \ + --app 4023ccbf-d57a-4500-97df-14de9cf3516e +``` + +Always `diff` the repo file against the live one after deploying. Always +deploy via base64 — heredocs and `sed` inserts have corrupted this file twice +(literal `$(...)` / bad indentation → LibreChat silently falls back to +defaults with only one log line). + +Verify after every change: + +```bash +cloudron logs --app --lines 60 | grep -iE 'custom config|error|invalid|MCP' +curl -s https://librechat-test.inference.coop/api/config # appTitle, emailLoginEnabled, socialLogins +``` + +## Build + deploy the image (brand assets only) + +```bash +cd /tmp/librechat-custom # THIS dir: cloudron update reads CloudronManifest.json here +git add -A && git commit -m "..." && git push +SHA=$(git rev-parse --short HEAD) +cloudron builder build --repository registry.inference.coop/co-op/librechat-custom \ + --tag 20261019-$SHA +cloudron --server my.inference.coop --token "$CLOUDRON_TOKEN" update \ + --app 4023ccbf-d57a-4500-97df-14de9cf3516e \ + --image registry.inference.coop/co-op/librechat-custom:20261019-$SHA +``` + +Rollback: rerun the `update` with the previous tag (or the appstore image +`cloudron/ai.librechat.cloudronapp:`). + +**NEVER edit `CloudronManifest.json`.** `cloudron update` reads it from this +directory and applies it to the app. A hand-edited manifest that omits the +addons (`postgresql`, `mongodb`, `oidc`, `sendmail`, `localstorage`) strips +them from the running app and crash-loops it (`mkdir: Read-only file system`). +That is what broke the sandbox on 2026-10-18 — the manifest, not the overlay. +When the appstore package updates, refresh this file with a new copy pulled +from the Cloudron API (`GET /api/v1/apps/ → .manifest`) and bump the +`FROM` tag in the Dockerfile to the new `manifest.dockerImage`. + +## Env vars (live state) + +Set in `/app/data/env` (volume — these WIN over cloudron env): + +- `APP_TITLE="Inference Co-op"` (was `"LibreChat"`) +- `ALLOW_EMAIL_LOGIN=false` (was `true`) — password login removed; Cloudron + SSO (OIDC) is the only login path +- `SCHEDULES_SINGLE_PROCESS=true` — sandbox runs a single replica; silences + the scheduler's Redis guard error + +Set via `cloudron env set` (process env): + +- `TTS_API_KEY` / `STT_API_KEY` — **dedicated LiteLLM virtual key** (alias + `librechat-speech`, $5 / 30d budget, restricted to `tinfoil/voxtral-tts` + + `tinfoil/whisper-large-v3-turbo`). Regenerate with the gateway master key: + `POST /key/generate {"key_alias":"librechat-speech","models":[...],"max_budget":5,"budget_duration":"30d"}` + — never put the master key here. +- `IMAGE_GEN_OAI_BASEURL=https://gateway.inference.coop/v1` and + `IMAGE_GEN_OAI_MODEL=regolo/qwen-image` — the agent "OpenAI Image Tools" + points at the co-op gateway. No `IMAGE_GEN_OAI_API_KEY`: members enter their + own co-op key in the tool UI (per-member billing, same pattern as the chat + endpoint's `apiKey: user_provided`). +- `SEARXNG_INSTANCE_URL=https://search.inference.coop` — referenced from the + YAML as `${SEARXNG_INSTANCE_URL}` (self-hosted search; keyless JSON API). + +## Feature notes (LibreChat v0.8.8) + +- **Chat models**: custom endpoint "Inference Co-op" → gateway, per-member + keys, 8 chat modelSpecs (emoji convention shared with models.md). + `regolo/qwen-image` is deliberately NOT in the chat picker (image models + are not chat models; chat-calling it was the source of the old 500s). +- **Image generation**: LibreChat exposes image gen through an **Agent with + the "OpenAI Image Tools" tool**, not a chat-picker button. Members create + an agent, add the tool, and paste their co-op key on first use. +- **MCP**: `inference-docs` (stdio, `/app/data/mcp/server.py`, tool + `search_docs`) is admin-configured; members may add their own via the MCP + Settings panel (the "bring your own tools" pattern). Permissions seeded via + `interface.mcpServers` (use/create true, share false). +- **Speech**: TTS `tinfoil/voxtral-tts` (voice `casual_female`), STT + `tinfoil/whisper-large-v3-turbo`, both via the gateway with the capped key. +- **Web search**: SearXNG (self-hosted) + keyless Keenable scraper, no reranker. +- **Colors**: `interface.theme` in the YAML is **forward-compatible only** — + the theme engine ships in LibreChat releases AFTER 0.8.8 (merged to dev, + not tagged). The block is silently ignored today and activates by itself + when the appstore package bundles a newer LibreChat. No other runtime + theming exists in 0.8.8. + +## Known state / limitations + +- `patches/`, `logo.png`, `logo-coop.png`, `logo.svg` (repo root) are legacy + leftovers from the abandoned 2026-10-18 hand-built-image attempt — unused, + pending cleanup. +- The `[schedules]` Redis guard error is resolved by + `SCHEDULES_SINGLE_PROCESS=true` (above). +- The `RAG API not reachable` warning is expected (no rag_api addon); it only + affects LibreChat's own file-RAG, which we do not use. diff --git a/assets/apple-touch-icon-180x180.png b/assets/apple-touch-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..63278129959f29921b57decddc30575f504e3550 GIT binary patch literal 6756 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 literal 0 HcmV?d00001 diff --git a/assets/favicon-16x16.png b/assets/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..63278129959f29921b57decddc30575f504e3550 GIT binary patch literal 6756 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 literal 0 HcmV?d00001 diff --git a/assets/favicon-32x32.png b/assets/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..63278129959f29921b57decddc30575f504e3550 GIT binary patch literal 6756 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 literal 0 HcmV?d00001 diff --git a/assets/icon-192x192.png b/assets/icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..63278129959f29921b57decddc30575f504e3550 GIT binary patch literal 6756 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 literal 0 HcmV?d00001 diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..63278129959f29921b57decddc30575f504e3550 GIT binary patch literal 6756 zcmb7Jc|4SB-~ZkB3^9_WvE>|V3MERkGfyEI9b>B#i8fnAr4li>6WNaz*|U|1G>E7y zlbmu|RhCj&+K9?jgNZToUbmjl^PJ~>-uHPwuYcxu-E+-#U%&PH{r$wVepxR|n?nNt z*$uW- zwXdVmUlL&uDrKKwm=LYPzcKP>^Qp@rj~-e0aFhDt@8$-dj5G5O&DWM|i``$5GJk~Dtf6IIzM*bl9tnzcU_oo3P4wWiHF&pYOewtZ6wm7<3^YxL*cdwp{#h<3SY)*rF z$3$zN;W9&^_V3IBcES?a*RGHK5yTR#W7i%R8QcZ_=IhkZ*;@7&LIhpcH|BE+CAc3n zCrZ`Y?SSvPa%W=s>}X5=)0H_MibSNH2Ti{Uy}r#M<@B{c;5!>0XqW+@*zEy1qJq5K z`TN{qu-IzsvmsJoB3_=W;7wc_^R8fmNxtn(bw6dV8`(0%Q%m62%ufs=H^GiNv(p|p zanow+we>mD%SVRrKE51OzC8879N-23B>ittztM3X9w0Qx*So`CQmO~pi{aDh- zBa^o8@t$6)Our#%H}lZ+(uZ8Od_~si(aoVBF>f7oIzIgc%7M8dRq(5LoxQ^5PYOQx zL!WE1=ox*LF=g)+n-$Hz%gQ`n(U$O}$INOp&j9Mn0^8p#Q>K*3u zy%Ydx12C!6n7^->t=e1mM%- zwo&3Tz!}PW-v2|Lf89XtJr<-bPoPXk_x$fd!{;@yYfLcp<{jtAw}P8<8Rix< zU{1H9KqY9MHqcm*AEkIxd?(Nl=gy*mi;J#6TqkD@bx}AdRZEF1KRYYH<-S_Tuh8i4 z{T3Ou*Z^3p5&6#%V(xM}=+Cti*kn@T9)v?a5m&IPIUN6-r}2xZ>Cxf5IltiF^`XMK zh39F#5F1!4rtgNk&fpc>+TWDmgzuFW?M#5wH|L0`Qah^nOP~Q>k+%$MPPSP-Wz6hd z!931Rd=X<$hx~+Y?Q$yDf(9?WQlE-TN9)U*w@4E&{;uohIiL7V{$_`Vov#_eOB)Ol zJ}BL`gRKr25Ycp~Yc3fUcMN``yweAULPHm?VMNpB+`m}*A142cz-k$|;c#(!D_2RQ z_vql7=0)co$)*1Nmn?gZS^cObdI_;0`MOOIdcBFVC|F$rWs4K^NuCSD+#bCca{0`c zt91s#&_DJHFE#?*=CQszk$a$%=GQMbNxH_Q*6h+qo<_ne<%-_2AJvqa^zqB&9Wt8t zG50YQ>mE<8n2s(GFri!fB?{(Rvq>9w+l+FD(BTwK+Dw){t}GggNS^c6z6 zGdq1O=N!fLAA%e>!DBBLPh`$X3l**!R`pVnp+l{j%A<}{hu=a zFEzmA#GPfDVJX2*!_O^xBmBeIj-S=-96`0GcHA>Og>~OPMIvtFk33PeZ@C8z-b0lM zwIUy78kkh4MJ*I&#^YSNcikb2TRY))0dNT&56L(aX5#5lE|o0W+yb8*a7=3&n=(%m8p&uIGA%Hr-WZ_jLWmu@tIhS zxl)ZC*SB9TXFw62CLA@$e;;7>8>+oW10Z8t^+v|{ZJ!v?7> zb5$9Sl1s89O;s-~Pv-c4Opk)Dh8e^GR0+)^UZHS936YWLfX_`Wk7CEKh2UJAAyxF7 zI70_`OC*TP{u1KF*3h>?f>`ACL$r*PA>N0@utz2(<60yM@4}c7-xox!XHVe7^`Mca zO}SL$e8%j@&1|IxYJlvNb1K$Hmmr2v_#5t!ex^=lSYHOtaD9A>tyDx!okf<~3MVM> zPUU%yF2ZVVvCZtHLxrL*U%TqRw|OaMoKC@ygIkO^%+ry{O+(o*dKb3dkt7UlR!woj z0x-AZ;sRT}zV1HDaQ6fVczpo$_qOvq)5flh)5JaF5hc3>U3F_R&M={ELo|FovLfG` z#i{*ypL+1+U1O1&v}<)#hNEttNUkGN`*(R!tXn#fR?L^u>r2a%*-dnB#fjU6G2*J~ zvlmAb8VB^EP<&)FzvQxI-1UKO`ZTe_J|)J&E<*16w)4soFef2&!m}o$yvwhCbSiCD zpdK-Y4hb1wB>ZpRX?GquJWzXG?AE)iQPW@}M%d`&i8kxrSKadI#3o#S0|uqT5fh%) znG_us0L}N{%36thWV~12k$*EBeP-iUp0ad7@G1!?G3@ScxV^fZ$-7^aeTWWVYx^Tr z{uiM%?C7_Gaj8e`83W&56~C@k`yk3VjdS;!HmRNo3qUDgw11UR(vP$AiA~m_@0&Ne z(}3lXdJi1m6H;{W-4)$2A!TZ_X)@$9-(dp{tnUk&m%iCKbaDK{jgG0ViN-Hewth5N zO8*}HYRA=WdikXGd-@$v@&4mJU&rj}&Vm%D-gS*C7p*bkw$5J6?P2@G(w=WmZlNe# zHbX$#vwmXq+nte~btdV^#yz?ppA1=#qtdev_OpGh=Jj4T$7E}u(1E3c} zK-Ueb)iaxReO%#~X5l_*;=)G93Ge{L|LeL4uNGft6r2zwozFH$Mb(9#^Cs|T2KFtsQ;>^K=BbaLJqrw>( zvAuZTc_;R%P1+E*9_!0|!j2VXECKmrIJauy=rJ;L+tTq9TZj8BFGvBuzZMjSe-=4< zLu;#~)3|q;F zT{((v6VVz)QZFYCoSSK)BjL67N{qO)Gcf=;wq_C5(D|)_$?eI@RpfaCd2xbqqV*#{A^v2ds>kZ|yaAy_*a|^l`3=-&9knnRANlsd6Pp1e3FU z_pPm!$VkLZ;_Zu*8d46vRjEAbGh>G%XjR4yqdPtiOMBZr{;EpVu;3di7XJq|Qk* zIXt4RUpCOYhI6qq(VyQG)H7i%5Pc~4FjXF=bmEDnu|l)>SxxVo-z;Mhgu$Sn?8gRc ztsOj0C!@)QN@XuHhtpYsGOVf7?Z55C!Wy({dvL2dVa38)@k^^&?B&*2Mk*fM;H#(A z?04yqLY$(|_!{4IE??~|Zc@3$j&V<=TVGFWt$^cyhG^}VQxg~w@ehL6W_~#4Vw2U+ zA{(Z*JXr>QZZCdaq;ar#Bcqzf{<9q6zg(rj2tseZ$(DP-9weba>D97qhW6MB@vfqqN`5qDh$FAx-iG~Qll;8qwo_h)jB3? zc}=_apaU37X^b6?cHEMFIg=$LnC-%~Jev$mOIIDzcKbCUDgY4%u-f^ClvE_4N{3$z zT_vL}7^`WJ9cV~oen!EMrEGP(&6*B2K z@r@2^^`|K@k!}DXt_uVy1~@!I;!{K6=5y)5PQ(ysncYo8IBI@c$ap?CwJx6^_r0=8iu9u)L z3Ls$C6Ie9FHtJ}T0qiiCz|>!t`ZdWx86g%)U4E^w#H*V#Qjlm~2&AP}lcIK*KL@%13HLd>3Ht`M_$Q zY3yRU`gmLz=e7GQcKL{AZ+hwlVCbGiLu7iCm~#-nl+YsqQQeE=s$nni9Ovrm3bK^aMM6{in($azFz?dGSpS8&w-O&5-mMR#`-SqG}Si3inw=Zq1FQQKZ) z(VTR$W0p_gg&`^O0s+(}VN7R~~JgtX@^ed?}ez2&_NijNOcUes{sc?msb1)!jPYG&rmGt&8Bd7Z&GCX39@gp9j_% zJa`L7QC?fPS&zwh%Zs(8LuukRTqox`@~mw?+t&dBZ1B$##Js{Z0_CQ^D~_0Gr4fSa zTWGRELbnbAi$l_?dcvp)^Z>R0I*3p{A)C=VXg%yfVtYXYxkerjd3s$ci7qsL?uJsW zA_iw{F1O+9?jzd1z5 zGEP0hw34^=_r7Ul#;`xUz+YFOJ~+3ZT{1Q=|In`~^|E#Bu;r6tOVqq0`I-;Fl-C8W}kTU)Kyf+Iy ze?P(&MeL@)v4mhe1r5s3utRlQ;_T~2Kz4!;ZOcYadP}@7B%8$Y9^D6cKrz6&J=d}h zs}Y$b<7)G~_qCTp;cHN#B{K5MfIvD*>P*j%RAwn~`dF+C>S|2cVz27YMP@wi#Dbv;Iy+NoeS<*fD{z4!b*)il9Ssj820|)8N!hMWa7lxos0tYSlNnQI!vs`Ga9tJw<+Jepf%OKV! zYzNl5yEL({E==)vh^V~R2%tGwo&V>lCSULum7au?}n;_+ff65EXmdf!_tHP~% zOPg9}pvl*^2Cd>tH=FFH`ce!iaNwTCMC@t>AAKt9oGmCmvg2~TJhaT?)qb=3be;}; p?T_PM-nyRu2|nt+9saKA|4=bVnwK$&{(A%)tbeh(yw>Zt{{k;cUjP6A literal 0 HcmV?d00001 diff --git a/assets/logo.svg b/assets/logo.svg new file mode 100644 index 0000000..f810cd9 --- /dev/null +++ b/assets/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/maskable-icon.png b/assets/maskable-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..63278129959f29921b57decddc30575f504e3550 GIT binary patch literal 6756 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 literal 0 HcmV?d00001 diff --git a/librechat.yaml b/librechat.yaml index 8619be5..f10cf05 100644 --- a/librechat.yaml +++ b/librechat.yaml @@ -1,28 +1,12 @@ -version: 1.3.1 +version: 1.3.17 -# Voice: server-side STT/TTS via the co-op gateway (Tinfoil TEE). -# Server STT works in every browser (Firefox has no Web Speech API). -speech: - stt: - openai: - url: "https://gateway.inference.coop/v1/audio/transcriptions" - apiKey: "${GATEWAY_KEY}" - model: "tinfoil/whisper-large-v3-turbo" - tts: - openai: - url: "https://gateway.inference.coop/v1/audio/speech" - apiKey: "${GATEWAY_KEY}" - model: "tinfoil/voxtral-tts" - voices: ["neutral_female", "neutral_male", "casual_female", "casual_male", "cheerful_female"] -cache: true - -# Inference Co-op gateway — PER-USER keys (production pattern): no server-side -# apiKey here, so each user pastes their own dashboard key once. Usage then -# bills to that member's own LiteLLM team/budget, exactly like the API path. +# Inference Co-op gateway — PER-USER keys: each member pastes their own +# dashboard key once (apiKey: user_provided). Usage bills to that member's +# own LiteLLM team/budget. endpoints: custom: - name: "Inference Co-op" - iconURL: "/assets/logo-coop.png" + iconURL: "data:image/png;base64,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" apiKey: "user_provided" baseURL: "https://gateway.inference.coop/v1" models: @@ -40,95 +24,72 @@ endpoints: titleModel: "greenpt/glm-5.3-flash" titleMethod: "completion" -# Web search via the co-op's self-hosted SearXNG (public URL, JSON enabled for OWUI already). -# scraperProvider keenable = keyless page-fetch, so members get one-click search -# with no Firecrawl prompt. (Production note: keenable is an external keyless -# service — if that offends self-host values, swap in a self-hosted Firecrawl.) -webSearch: - searchProvider: "searxng" - scraperProvider: "keenable" - searxngInstanceUrl: "${SEARXNG_INSTANCE_URL}" - searxngSearchOptions: - engines: "google,bing,duckduckgo" - language: "en" - timeout: 15000 - -# MCP: the co-op docs, opt-in per conversation (stdlib stdio server in /app/data). -mcpServers: - inference-docs: - type: stdio - command: python3 - args: - - /app/data/inference-docs-mcp/server.py - -# Emoji-ified model picker (same feature-tier convention as models.md / OWUI): -# 🌱 = renewable-powered (GreenPT + Regolo), 🔒 = TEE-architected private (Tinfoil). -# Utility models (audio STT/TTS, image generation) are excluded from chat. +# Emoji-ified model picker (same convention as models.md / OWUI): +# 🌱 = renewable (GreenPT + Regolo), 🔒 = TEE-private (Tinfoil). modelSpecs: enforce: true prioritize: true list: - name: tinfoil-deepseek-v4-1-flash - iconURL: "/assets/logo-coop.png" + iconURL: "data:image/png;base64,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" label: "🔒 tinfoil/deepseek-v4-1-flash" softDefault: true preset: endpoint: "Inference Co-op" model: "tinfoil/deepseek-v4-1-flash" - name: tinfoil-gpt-oss-120b - iconURL: "/assets/logo-coop.png" + iconURL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAaK0lEQVR4nO3dPXJTWbQG0EsX1dVVPSmG4CkQkJE4cULihISEhIyAKXgITIoqioQX9LvvycKSrnTPzz5nrxV2G2lLZev7zr6y/Gqhml8/f/zuPQPAyP7+599XvWeYlSd2JyEP0IdysI8n7wrCHiA2pWA7T9QZAh9gbArBaZ6YAwIfYG4Kwf9L/0QIfYCcspeBtA9e8AOwLHmLQKoHLfQBOCdTGUjxQAU/ANfIUASmfoCCH4A9Zi4CUz4wwQ9ASTMWgakekOAHoKaZisAUD0TwA9DSDEVg6Acg+AHoaeQi8FfvAW4l/AHobeQsGq65jPxkAzCv0bYBQ20AhD8AUY2WUUO0ldGeVAByG2EbEH4DIPwBGM0I2RW6AIzwBALAS6JnWMgVRfQnDQCuEfGSQLgNgPAHYDYRsy1UAYj4BAFACdEyLkwBiPbEAEBpkbKu+zWJSE8GALTS+30BXTcAwh+ArHpnYLcC0PuBA0BvPbOwSwEQ/gDwn16Z2LwACH8AeK5HNjYtAMIfAF7WOiObFQDhDwDntczKJgVA+APANq0ys3oBEP4AcJ0W2RnmkwABgHaqFgCnfwC4Te0MrfYxhMIf4nn75d3Z///t/ddGkwBb1frI4Co3Kvwhjkuhf4oyAHHUKAHFb1D4Q3+3hv4pygD0V7oEeBMgTKZ0+Ne6TaCvogXA6R/6qhnUSgD0VTpji60ThD/00zqcXRKAfkpdCiiyARD+0E+Pk7ltAPRTKnO9BwAAEtpdAJz+oZ+eJ3FbAOinRPbuKgDCH/qJEMARZoCs9mawSwAwoEjBG2kWYLubC4DTPwD0tSeLbyoAwh8AYrg1k10CgMFEXLlHnAk47+oC4PQPALHcks02AACQ0FUFwOkf+oq8ao88G2RwbUbbAABAQpsLgNM/AMR2TVbbAABAQpsKgNM/AIxha2bbAABAQhcLgNM/AIxlS3bbAABAQmcLgNM/xPLt/dfeI5wUeTbI6FKG2wAAQEIKAAAkdLIAWP9DTBFX7RFnAs5nuQ0AACT0YgFw+geAOZzKdBsAGFCklXukWYDtFAAYVITgjTADcJs/CoD1P4yjZwALfxjHS9luAwAACSkAMLgeJ3Gnfxjfq+P/4BIAjOvtl3dVb1/ww7j+/uffZ5n/bAMg/GFsNQNa+MPYjjPeJQCYTI2gFv4wn2frABsAmM+tlwWEPszn8DKAAgCJXCoDQh/m9mIBEP4AML+1BHgPAAAkpAAAQEIKAAAkpAAAQEJ/LYs3AAJAFmvm2wAAQEIKAAAkpAAAQEIKAAAkpAAAQEIKAAAk9MqvAAJAPjYAAJCQAgAACSkAAJCQAgAACSkAAJCQAgAACb3uPQBk9vj94+WvefOhwSRANj4HABraEvgXb0MhAApQAKCBEsH/x20qAsAOCgBUVCP4/7gPRQC4gQIAFbQI/j/uUxEAruC3AKCwHuHf836BMSkAUFDvEO59/8A4FAAoJEr4RpkDiM17AKCAiKE7wnsC7p8eTv6/z3efGk4C+SgAsFPE8F9FLAHnQv8UZQDKUwBgh8jhv4pSAm4J/mOKAJTjo4CBqkoE//FtKQKwnzcBwo1GOP0vS985S4Z/i9uFTBQAoIraIa0EwD4KANxglNP/qvW8rcJZCYDbKQAAkJACAFca7fS/ajV361O5LQDcRgEAiukVxkoAXE8BAICEFAC4wqjr/9Xo8wPlKABAEb3X8L3vH0ajAABAQgoAACSkAABAQgoAACSkAABAQgoAACSkAABAQgoAUMTnu0+p7x9GowDAFR7ffOg9wi6jzw+UowAAQEIKAFBMrzW89T9cTwGAK426Rm81d+swFv5wGwUAABJSAOAGo20BWs/b6lTu9A+3UwCAKmqHs/CHfRQAuNEoW4Cec9YKaeEP+73uPQAwtzWs758eit0WsN+rXz9//O49BIzs8fvH3iOcFHFLcUsREPxQngIABUQsARHD/9i5MiD0oS4FAAqJVAJGCH+gL28ChEKihG6UOYDYFAAoqHf49r5/YBwKABTWK4SFP3AN7wGAilq8L0DwA7dQAKCBGkVA8AN7KADQUIkiIPiBEhQA6GhLIRD4QA0KAAAk5LcAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAEnrdewCI6O2Xd5u+7tv7r5UnAajDXwOEZXvgX6IQAKNQAEitVPAfUwSA6BQAUqoV/McUASAqbwIknVbh3/q+AK5hA0AavcPYNgCIRAEghd7hv+pdAh6/fzz//998aDQJ0JsCwPSihP+qdQm4FPon/50yAFNTAJhatPBf1S4Bt4b+ydtTBmA63gTItKKG/7LUna10+Ne6TaAvGwCmFDn8D5XeBNQO6pE3AfdPD2f//+e7T40mgRh8FDBMoNUJfb2fUYrApdA/9bXKABm4BMB0Rjn9L0uZWXus50e4JHBN+Jf8tzAKGwCmMlL4r95+edf91wNnUiq819uxDWBWNgAwsJ4n8YhbgBond9sAZqUAMI0RT/+rW2aPEMARZljVDGolgBkpADCgSMEbYZYWAa0EMBsFgCmMfPpfzfAYgHEoAMDQWp7MbQGYiQIAg4mwcj/Wa6YegawEMAsFAAASUgAY3kzXzmd6LEBsCgAMJOL6f9V6tp6reJcBmIECAAAJKQAAkJACAAAJKQAAkJACAAAJKQAAkJACAAAJKQAwkMc3H3qPcFLr2T7ffWp6f1HuG0pRABjet/dfe49QzEyPBYhNAQCAhBQAGEzEywC9Zuqxirf+ZxYKADC0loEs/JmJAsAUZrh2PsNjAMahAMCAIl0GiDBLi5O50z+zUQCYxsgn6FtmjxC8EWZY1Qxo4c+MFAAYWM8AjhT+qxpBLfyZ1eveA0BJ395/Xd5+edd7jKuMvLmIaA3s+6eHIrcDs7IBYDojBWqJWXucxCOe/o/tCXDhTwY2ADCBNZAfv39scj+jOAzySxsBoU82r379/PG79xBQQ/RLAbU2FbVKwGjhD5znEgDTinwpoOZsNYJa+MN8bACYXrRNQOticutGQOjD3BQAUohSAnpvJS6VAaEPeSgApNG7BPQOf4BDCgDptC4Cgh+IyJsASadlIAt/ICobAFKrtQ0Q/EB0CgAs5YqA4AdGoQDAC7YWAoEPjEoBAICEvAkQABJSAAAgIQUAABJSAAAgIQUAABJSAAAgIQUAABJSAAAgode9B4Bz7p8eNn3d57tPlScBmItPAiSUrYF/iUIAcJ4CQAilgv+YIgDwMgWArmoF/zFFAOA5BYAuWgX/MUUA4D9+C4DmeoV/7/sGiMQGgGaihe9o24C3X95t+rpv779WngSYgQJAE9HCfxW9BGwN/VOUAeAUBYDqoob/KmIJ2Bv8xxQB4JgCQFXRw38VpQSUDv5jigCwUgCoZpTwX/UuAbXDfzVKCXj8/vHy17z50GASmJOPAoYAWoX/el9RS8CW0D/19coAXMcGgCpGO/2vemwBWob/oUgl4NrgP3tbigBs4nMAKG7U8F+W9rP3Cv/e932oZPjXuD2YlUsA0EmEAO55OaBmUK+3HXEbcK5k9n4fCrm4BEBRI5/+D9V+IY4Q/odal4CWp/QIJeCWnwtlgNpcAoDGooX/srSdqfWKvuclgfunh5tL8Z5/C1soABQz04vVTI+FPkp9D/lepBYFABqKePpftZit12m89f2WDm0lgBoUAIqY8QVqxsfUU+9357e6/1rfN74fKU0BgEYin/5XI8wYWe2QVgIoSQEAqut9+l9FmQMiUAAACmh1OrcFoBQFgN1mfkEq9dhGWq2PNCtwOwUAqCra2r3GPK1L8Mylm3YUAABISAEAgIQUAABISAEAgIQUAABISAEAgIQUAABISAEAqnp886H3CM/UmOfz3afitxnp/piTAsBuM78YlXps395/LXI7LYw0K3A7BQCggFZFeObCTVsKAFBdlMsAUeaACBQAaGSE1foIM0ZW+3Tu9E9JCgBFzPjCNONj6qn36bvV/df6vvH9SGkKADQU+YTdYrZeJaD1/ZYOa+FPDQoAxcz0IjXTY6GPUt9DvhepRQGAxiJuAVrO1Po03vPSw+e7TzcH+J5/C1u8+vXzx+/eQzCX+6eH3iPs0upF9+2Xd03u55JeheTx+8f69xHwXf/nfj4EPi0pABSnAGzXuwRE2EbUKAIRgx+icQmA4kY+xbSevWcARwj/ZSkf1sIftrEBoJrRNgE9i0vrTUCU8D+2Zxsg+OE6r3sPAPwXyK1KQNTwX5bnIb6lDAh9uJ0NAFWNsgWIctmidgmIHP5AWwoA1UUvAVHC/1DpIiD4gWMKAE1ELQERw//Q3iIg+IFTFACaiVYCoof/sa1lQOgDWygANNe7CIwW/AA1+BwAmusZwMIf4D82AHTVahsg+AGeUwAIoVYREPwAL1MACKVUERD8AOcpAIS2tRAIfIDrKAAAkJDfAgCAhBQAAEhIAQCAhBQAAEjode8BGIfPogeYh98C4KRSf5JWIQCIRwHgmdJ/h/6YMgAQgwLAsiz1g/+YIgDQlwKQXOvgP6YIAPThtwAS6x3+UWYAyMgGIKlowTvqJuDx+8dtX/fmQ+VJAK6jACQTLfiPjVAEtob+yX+vDAABKACJRA//VcQSsDf0T96uMgB04j0ASYwS/ssSb9Za4V/7tgHOsQFIIFqgbtV7E9A6nEfcBtw/PZz9/5/vPjWaBLiWjwKGF/Q4mT9+/zhECbgU+qe+VhmAWGwAJjfq6X/VYwvQey0fsQRcE/pbKAPQn/cATGz08F+W9o+hd/hHmeFQ6fCvdZvAdWwAJjVD+B9qsQmIFrwRNgG1gzryJuDSz1Dv96jAXgrApBSA60QL/1WvEtD6hB6lCNz6c6MMMCIFYEKzhf+q1ots1PBftS4BvdbzvUvA3p+bEUrApe/1CFsn2vFbAEBqpQrzejsRi8Dmj6z+369TBHKwAZjMrKf/VekX1+in/1WrF+Teb85rvQWo9fMSpQT42GrO8VsApDVK+C9Lm1l7h3/rGWqW5QhFvMT3zEg/I1xPAQBChP+qxSwtArpnCSgZ3ErAvBSAiUQ4ddSW4THCHjUCWwmYkwJASiO+oI04c0QtS+RMH2Tl+28+CgAkF2n9v6o1U48Nkq0VUSkAABNocUK3BZiLAjCJTKeMvY915BexkWcHYlEAILGI6/9V6dl6luTa992yGCqh81AAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAS+3z3qfcIJ5We7dv7r0VvL9J9P775UPX2e90XdSkAk+j54tba3sc68gvYyLMDsSgAABNoUQ4V0LkoAJBcxMsAtWbqsSnLtJ1jLAoAKY14khlx5ohaBnLr8K/5PeL7bz4KwEQynDQyPEbYo0ZQC/85KQBAqMsALWZpUSR7ltWSgS3856UAkNZIL2wtZo1QAlrOUDOgI2yqSnzPjPQzwvVe/fr543fvISir5989r6nWi2r0v2/e+kX4/umh6f2tehWQ0j8vEcL/2LXf44I/h9e9BwDoaQ3svUUgYvCv1kC/VAQEfy42AJOabQtQ/ZPUgm4Ber0gt94CRLj8sCy3/9xEDn84RQGYlAJwvWglIMJprHYRiBL8L7n0MyT0GZ0CMLFZSkDLF9ooJSBC+K9qlYDI4Q8Z+C2Aic1wQpnpg1RGmuFQjaAW/tCfDUACo24Cuv4edadNQLTwf8mtGwGhD7H4LQB4weObD81LwAjhvyzPg/xSGRD6EJcNQBKjbQEiXb6oXQRGCX5gLt4DkESkQL0k2qz+wAowIxuAZKJvAqKF/0v2bgSEPhCBApBUtCIwQvC/ZGsZEPpANApAYlFKwKjhDzAy7wFILELwRpgBICMbAJZlab8NEPwAfSkAPFO7CAh+gBgUAE4qVQaEPkA8CgCbbS0EAh8gPgUAABLyWwAAkJACAAAJKQAAkJACAAAJKQAAkJACAAAJve49AJxz//Sw6es+332qPAnAXHwOAKFsDfxLFAKA8xQAQigV/McUAYCXKQB0VSv4jykCAM8pAHTTKvxXo5cAf4sBKEkBoLnWwX9spCKw9y8yKgPAKQoATfUO/1X0ElDqTzGvFAHgmAJAM1HCfxWxBJQO/mOKALBSAGgiWvivIpWA2uG/GqUEPH7/ePlr3nxoMAnMSQGguqjhv4pQAlqF/ypqCdgS+if/rTIAV1EAqCp6+K96loDW4b+KVAL2BP8ft6UIwCb+FgB01Cv8e9/3oZLhX+P2YFY2AFQzyul/1XoLECWAe20CWgR1xG3AuZ+LCJejyEMBoIrRwn/V6gU4SvivWpeAlqf0CCXglp8HZYDaXAKAxqKF/7K0nan1ir73JYFby/CoJZpxKAAUN/IL18izE8v908Pu76cStwGnKADQUMTT/6rFbL1O463vt3RoKwHUoABQ1AwvVDM8hoh6r+Jb3X+t7x/fl5SmAEAjkU//qxFmBMpQAIDqep/+V7XnqH1KtwWgJAUAoIBW4awEUIoCQDEzvTCVfiwjrdZHmhW4nQIAVBVl/b+KNg/0ogAA7NR6+zXTto1+FAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFACgqsc3H3qP8EyNeT7ffSp+m5HujzkpABQz04tS6cfy7f3XordX00izArdTAAAgIQUAqC7KZYCac7TagM20aaMvBQAaGWG1PsKMkdUOZ+FPSQoARc3wAjXDY4io9xag9/1DNAoANBT5hN1itl4h3PJ+axVIxZTSFACKG/mFauTZiaP095HvS2pQAKCxiFuAljO13gL02jp8vvu0O7hL3AacogBQxYgvWi1njlQCeszSKpQjXPe/9ftqxJ8hxvLq188fv3sPwbzunx56j7BJrxfbt1/edbnfVYQi8vj9Y/nbDBD8p5z7mRD6tKQAUJUCcFmvEhAh/FclS0Dk8IdIFACqi14CIpy6WpeASOF/aE8REPxwHQWAJqKWgAjhv2pVAqKG/7EtZUDow+0UAJqJVgIihf+qdgkYJfyB+hQAmopSAiKG/6HSRUDwA8cUAJrrXQKih/+hvUVA8AOnKAB007oIjBT8L9laBoQ+sIUCQFetSsDo4Q9QmgJACLWKgOAHeJkCQCilioDgBzhPASC0rYVA4ANcRwEAgIT8NUAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEXvceACJ6++Xdpq/79v5r5UkA6nj16+eP372HgAi2hv4pygAwEgWA9PYG/zFFABiBAkBapYP/mCIARKYAkFLt8F9FKwGP3z+e//9vPjSaBOhNASCdVuG/6l0CLoX+yX+nDMDUFABSaR3+qx4l4Nbg/+N2FAGYks8BII1e4d/jvkuFf+nbAuKwASCFnuF/qPYmoHZYj7wNuH96OPv/P999ajQJxKAAML0o4b+qVQJandRHKwGXgv+YIkAWCgBTixb+q9IloPWafoQScG3wH1MEmJ33AADT2Rv+pW4DIlMAmFbU0/+ylJ2tx5v0Ir8xsGRwKwHMTAGAgfUM4ogloEZgKwHM6q+///n3Ve8hoLTIp//VCDOOpGZQKwHM5u9//n1lAwCDinACjzADcBsFABheixO6LQCzUQCYzkir9ZFmBeaiAMCAIq3eI80CbKcAAENruZp3GYCZKAAAkNBfy/LfrwP0HgQAqG/NfBsAAEhIAQCAhBQAAEhIAQCAhP6vAHgjIIzj8c2H3iP8n96zfL77NOV9QQ2HWW8DwHS+vf/ae4TNRpoVmIsCAAAJKQAwqN6r9ygzLEub1bz1P7N5VgC8D4BZjLBaH2FGYB7HGW8DAAPreQKPcvpf1TyhO/0zIwWAaUU+YZecrUcQRwv/VY2gFv7MSgEAplIysIU/M/ujAHgfADOJuAWoMVPLE3nU0/+hEsEt/JnJS9n+Ytj/+vnjd/1xoJ23X971HmFZlvqF5PH7x7q3P0D4H7t/erjq6wU/M1IASK13CWi5jShdBEYM/mOXioDgZ2abC8CyKAHMqVcJ6HEpolQJmCH8IbNTl/YVANJpXQJ6vw/h1iIg+GEOVxeAZVECmFerEtA7/I9dKgNCH+Zy7o39CgBp1S4B0cIfyEcBgDNKFwHBD0RxcwFYFiWAPPYWAcEPRHLpc30UAHjB1jIg9IGodheAZVECAGAkWz7V198CAICENhUAfx8AAMawNbNtAAAgoc0FwBYAAGK7JqttAAAgoasKgC0AAMR0bUbbAABAQlcXAFsAAIjllmy2AQCAhG4qALYAABDDrZl88wZACQCAvvZksUsAAJDQrgJgCwAAfezN4N0bACUAANoqkb0uAQBAQkUKgC0AALRRKnOLbQCUAACoq2TWFr0EoAQAQB2lM9Z7AAAgoeIFwBYAAMqqka1VNgBKAACUUStTq10CUAIAYJ+aWVr1PQBKAADcpnaGehMgACRUvQDYAgDAdVpkZ5MNgBIAANu0ysxmlwCUAAA4r2VWNn0PgBIAAC9rnZHN3wSoBADAcz2ysctvASgBAPCfXpnY7dcAlQAAsuuZhV0/B0AJACCr3hkYJoB//fzxu/cMAFBb7+BfhfkkwChPCADUEinrwhSAZYn1xABASdEyLlQBWJZ4TxAA7BUx28INdMj7AgAYWcTgX4XbAByK/MQBwDnRMyx0AViW+E8gABwbIbvCD3jIJQEAIhsh+FfhNwCHRnpiAchltIwaathDtgEARDBa8K+G2gAcGvUJB2AeI2fRsIMfsg0AoKWRg381/AM4pAgAUNMMwb+a5oEcUgQAKGmm4F9N94AOKQIA7DFj8K+mfWCHFAEArjFz8K+mf4CHFAEAzskQ/Ks0D/SYMgDAsuQK/UMpH/QhRQAgp6zBv0r94I8pAwBzyx76hzwRZygEAGMT+Kd5Yq6gEADEJvC380TtpBQA9CHs9/HkVaQcAOwj5Ov5H2rOEm8J8Jj7AAAAAElFTkSuQmCC" label: "🔒 tinfoil/gpt-oss-120b" preset: endpoint: "Inference Co-op" model: "tinfoil/gpt-oss-120b" - name: tinfoil-glm-5-3 - iconURL: "/assets/logo-coop.png" + iconURL: "data:image/png;base64,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" label: "🔒 tinfoil/glm-5.3" preset: endpoint: "Inference Co-op" model: "tinfoil/glm-5.3" - name: greenpt-deepseek-v4-1-flash - iconURL: "/assets/logo-coop.png" + iconURL: "data:image/png;base64,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" label: "🌱 greenpt/deepseek-v4.1-flash" preset: endpoint: "Inference Co-op" model: "greenpt/deepseek-v4.1-flash" - name: greenpt-glm-5-3-flash - iconURL: "/assets/logo-coop.png" + iconURL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAaK0lEQVR4nO3dPXJTWbQG0EsX1dVVPSmG4CkQkJE4cULihISEhIyAKXgITIoqioQX9LvvycKSrnTPzz5nrxV2G2lLZev7zr6y/Gqhml8/f/zuPQPAyP7+599XvWeYlSd2JyEP0IdysI8n7wrCHiA2pWA7T9QZAh9gbArBaZ6YAwIfYG4Kwf9L/0QIfYCcspeBtA9e8AOwLHmLQKoHLfQBOCdTGUjxQAU/ANfIUASmfoCCH4A9Zi4CUz4wwQ9ASTMWgakekOAHoKaZisAUD0TwA9DSDEVg6Acg+AHoaeQi8FfvAW4l/AHobeQsGq65jPxkAzCv0bYBQ20AhD8AUY2WUUO0ldGeVAByG2EbEH4DIPwBGM0I2RW6AIzwBALAS6JnWMgVRfQnDQCuEfGSQLgNgPAHYDYRsy1UAYj4BAFACdEyLkwBiPbEAEBpkbKu+zWJSE8GALTS+30BXTcAwh+ArHpnYLcC0PuBA0BvPbOwSwEQ/gDwn16Z2LwACH8AeK5HNjYtAMIfAF7WOiObFQDhDwDntczKJgVA+APANq0ys3oBEP4AcJ0W2RnmkwABgHaqFgCnfwC4Te0MrfYxhMIf4nn75d3Z///t/ddGkwBb1frI4Co3Kvwhjkuhf4oyAHHUKAHFb1D4Q3+3hv4pygD0V7oEeBMgTKZ0+Ne6TaCvogXA6R/6qhnUSgD0VTpji60ThD/00zqcXRKAfkpdCiiyARD+0E+Pk7ltAPRTKnO9BwAAEtpdAJz+oZ+eJ3FbAOinRPbuKgDCH/qJEMARZoCs9mawSwAwoEjBG2kWYLubC4DTPwD0tSeLbyoAwh8AYrg1k10CgMFEXLlHnAk47+oC4PQPALHcks02AACQ0FUFwOkf+oq8ao88G2RwbUbbAABAQpsLgNM/AMR2TVbbAABAQpsKgNM/AIxha2bbAABAQhcLgNM/AIxlS3bbAABAQmcLgNM/xPLt/dfeI5wUeTbI6FKG2wAAQEIKAAAkdLIAWP9DTBFX7RFnAs5nuQ0AACT0YgFw+geAOZzKdBsAGFCklXukWYDtFAAYVITgjTADcJs/CoD1P4yjZwALfxjHS9luAwAACSkAMLgeJ3Gnfxjfq+P/4BIAjOvtl3dVb1/ww7j+/uffZ5n/bAMg/GFsNQNa+MPYjjPeJQCYTI2gFv4wn2frABsAmM+tlwWEPszn8DKAAgCJXCoDQh/m9mIBEP4AML+1BHgPAAAkpAAAQEIKAAAkpAAAQEJ/LYs3AAJAFmvm2wAAQEIKAAAkpAAAQEIKAAAkpAAAQEIKAAAk9MqvAAJAPjYAAJCQAgAACSkAAJCQAgAACSkAAJCQAgAACb3uPQBk9vj94+WvefOhwSRANj4HABraEvgXb0MhAApQAKCBEsH/x20qAsAOCgBUVCP4/7gPRQC4gQIAFbQI/j/uUxEAruC3AKCwHuHf836BMSkAUFDvEO59/8A4FAAoJEr4RpkDiM17AKCAiKE7wnsC7p8eTv6/z3efGk4C+SgAsFPE8F9FLAHnQv8UZQDKUwBgh8jhv4pSAm4J/mOKAJTjo4CBqkoE//FtKQKwnzcBwo1GOP0vS985S4Z/i9uFTBQAoIraIa0EwD4KANxglNP/qvW8rcJZCYDbKQAAkJACAFca7fS/ajV361O5LQDcRgEAiukVxkoAXE8BAICEFAC4wqjr/9Xo8wPlKABAEb3X8L3vH0ajAABAQgoAACSkAABAQgoAACSkAABAQgoAACSkAABAQgoAUMTnu0+p7x9GowDAFR7ffOg9wi6jzw+UowAAQEIKAFBMrzW89T9cTwGAK426Rm81d+swFv5wGwUAABJSAOAGo20BWs/b6lTu9A+3UwCAKmqHs/CHfRQAuNEoW4Cec9YKaeEP+73uPQAwtzWs758eit0WsN+rXz9//O49BIzs8fvH3iOcFHFLcUsREPxQngIABUQsARHD/9i5MiD0oS4FAAqJVAJGCH+gL28ChEKihG6UOYDYFAAoqHf49r5/YBwKABTWK4SFP3AN7wGAilq8L0DwA7dQAKCBGkVA8AN7KADQUIkiIPiBEhQA6GhLIRD4QA0KAAAk5LcAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAEnrdewCI6O2Xd5u+7tv7r5UnAajDXwOEZXvgX6IQAKNQAEitVPAfUwSA6BQAUqoV/McUASAqbwIknVbh3/q+AK5hA0AavcPYNgCIRAEghd7hv+pdAh6/fzz//998aDQJ0JsCwPSihP+qdQm4FPon/50yAFNTAJhatPBf1S4Bt4b+ydtTBmA63gTItKKG/7LUna10+Ne6TaAvGwCmFDn8D5XeBNQO6pE3AfdPD2f//+e7T40mgRh8FDBMoNUJfb2fUYrApdA/9bXKABm4BMB0Rjn9L0uZWXus50e4JHBN+Jf8tzAKGwCmMlL4r95+edf91wNnUiq819uxDWBWNgAwsJ4n8YhbgBond9sAZqUAMI0RT/+rW2aPEMARZljVDGolgBkpADCgSMEbYZYWAa0EMBsFgCmMfPpfzfAYgHEoAMDQWp7MbQGYiQIAg4mwcj/Wa6YegawEMAsFAAASUgAY3kzXzmd6LEBsCgAMJOL6f9V6tp6reJcBmIECAAAJKQAAkJACAAAJKQAAkJACAAAJKQAAkJACAAAJKQAwkMc3H3qPcFLr2T7ffWp6f1HuG0pRABjet/dfe49QzEyPBYhNAQCAhBQAGEzEywC9Zuqxirf+ZxYKADC0loEs/JmJAsAUZrh2PsNjAMahAMCAIl0GiDBLi5O50z+zUQCYxsgn6FtmjxC8EWZY1Qxo4c+MFAAYWM8AjhT+qxpBLfyZ1eveA0BJ395/Xd5+edd7jKuMvLmIaA3s+6eHIrcDs7IBYDojBWqJWXucxCOe/o/tCXDhTwY2ADCBNZAfv39scj+jOAzySxsBoU82r379/PG79xBQQ/RLAbU2FbVKwGjhD5znEgDTinwpoOZsNYJa+MN8bACYXrRNQOticutGQOjD3BQAUohSAnpvJS6VAaEPeSgApNG7BPQOf4BDCgDptC4Cgh+IyJsASadlIAt/ICobAFKrtQ0Q/EB0CgAs5YqA4AdGoQDAC7YWAoEPjEoBAICEvAkQABJSAAAgIQUAABJSAAAgIQUAABJSAAAgIQUAABJSAAAgode9B4Bz7p8eNn3d57tPlScBmItPAiSUrYF/iUIAcJ4CQAilgv+YIgDwMgWArmoF/zFFAOA5BYAuWgX/MUUA4D9+C4DmeoV/7/sGiMQGgGaihe9o24C3X95t+rpv779WngSYgQJAE9HCfxW9BGwN/VOUAeAUBYDqoob/KmIJ2Bv8xxQB4JgCQFXRw38VpQSUDv5jigCwUgCoZpTwX/UuAbXDfzVKCXj8/vHy17z50GASmJOPAoYAWoX/el9RS8CW0D/19coAXMcGgCpGO/2vemwBWob/oUgl4NrgP3tbigBs4nMAKG7U8F+W9rP3Cv/e932oZPjXuD2YlUsA0EmEAO55OaBmUK+3HXEbcK5k9n4fCrm4BEBRI5/+D9V+IY4Q/odal4CWp/QIJeCWnwtlgNpcAoDGooX/srSdqfWKvuclgfunh5tL8Z5/C1soABQz04vVTI+FPkp9D/lepBYFABqKePpftZit12m89f2WDm0lgBoUAIqY8QVqxsfUU+9357e6/1rfN74fKU0BgEYin/5XI8wYWe2QVgIoSQEAqut9+l9FmQMiUAAACmh1OrcFoBQFgN1mfkEq9dhGWq2PNCtwOwUAqCra2r3GPK1L8Mylm3YUAABISAEAgIQUAABISAEAgIQUAABISAEAgIQUAABISAEAqnp886H3CM/UmOfz3afitxnp/piTAsBuM78YlXps395/LXI7LYw0K3A7BQCggFZFeObCTVsKAFBdlMsAUeaACBQAaGSE1foIM0ZW+3Tu9E9JCgBFzPjCNONj6qn36bvV/df6vvH9SGkKADQU+YTdYrZeJaD1/ZYOa+FPDQoAxcz0IjXTY6GPUt9DvhepRQGAxiJuAVrO1Po03vPSw+e7TzcH+J5/C1u8+vXzx+/eQzCX+6eH3iPs0upF9+2Xd03u55JeheTx+8f69xHwXf/nfj4EPi0pABSnAGzXuwRE2EbUKAIRgx+icQmA4kY+xbSevWcARwj/ZSkf1sIftrEBoJrRNgE9i0vrTUCU8D+2Zxsg+OE6r3sPAPwXyK1KQNTwX5bnIb6lDAh9uJ0NAFWNsgWIctmidgmIHP5AWwoA1UUvAVHC/1DpIiD4gWMKAE1ELQERw//Q3iIg+IFTFACaiVYCoof/sa1lQOgDWygANNe7CIwW/AA1+BwAmusZwMIf4D82AHTVahsg+AGeUwAIoVYREPwAL1MACKVUERD8AOcpAIS2tRAIfIDrKAAAkJDfAgCAhBQAAEhIAQCAhBQAAEjode8BGIfPogeYh98C4KRSf5JWIQCIRwHgmdJ/h/6YMgAQgwLAsiz1g/+YIgDQlwKQXOvgP6YIAPThtwAS6x3+UWYAyMgGIKlowTvqJuDx+8dtX/fmQ+VJAK6jACQTLfiPjVAEtob+yX+vDAABKACJRA//VcQSsDf0T96uMgB04j0ASYwS/ssSb9Za4V/7tgHOsQFIIFqgbtV7E9A6nEfcBtw/PZz9/5/vPjWaBLiWjwKGF/Q4mT9+/zhECbgU+qe+VhmAWGwAJjfq6X/VYwvQey0fsQRcE/pbKAPQn/cATGz08F+W9o+hd/hHmeFQ6fCvdZvAdWwAJjVD+B9qsQmIFrwRNgG1gzryJuDSz1Dv96jAXgrApBSA60QL/1WvEtD6hB6lCNz6c6MMMCIFYEKzhf+q1ots1PBftS4BvdbzvUvA3p+bEUrApe/1CFsn2vFbAEBqpQrzejsRi8Dmj6z+369TBHKwAZjMrKf/VekX1+in/1WrF+Teb85rvQWo9fMSpQT42GrO8VsApDVK+C9Lm1l7h3/rGWqW5QhFvMT3zEg/I1xPAQBChP+qxSwtArpnCSgZ3ErAvBSAiUQ4ddSW4THCHjUCWwmYkwJASiO+oI04c0QtS+RMH2Tl+28+CgAkF2n9v6o1U48Nkq0VUSkAABNocUK3BZiLAjCJTKeMvY915BexkWcHYlEAILGI6/9V6dl6luTa992yGCqh81AAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAS+3z3qfcIJ5We7dv7r0VvL9J9P775UPX2e90XdSkAk+j54tba3sc68gvYyLMDsSgAABNoUQ4V0LkoAJBcxMsAtWbqsSnLtJ1jLAoAKY14khlx5ohaBnLr8K/5PeL7bz4KwEQynDQyPEbYo0ZQC/85KQBAqMsALWZpUSR7ltWSgS3856UAkNZIL2wtZo1QAlrOUDOgI2yqSnzPjPQzwvVe/fr543fvISir5989r6nWi2r0v2/e+kX4/umh6f2tehWQ0j8vEcL/2LXf44I/h9e9BwDoaQ3svUUgYvCv1kC/VAQEfy42AJOabQtQ/ZPUgm4Ber0gt94CRLj8sCy3/9xEDn84RQGYlAJwvWglIMJprHYRiBL8L7n0MyT0GZ0CMLFZSkDLF9ooJSBC+K9qlYDI4Q8Z+C2Aic1wQpnpg1RGmuFQjaAW/tCfDUACo24Cuv4edadNQLTwf8mtGwGhD7H4LQB4weObD81LwAjhvyzPg/xSGRD6EJcNQBKjbQEiXb6oXQRGCX5gLt4DkESkQL0k2qz+wAowIxuAZKJvAqKF/0v2bgSEPhCBApBUtCIwQvC/ZGsZEPpANApAYlFKwKjhDzAy7wFILELwRpgBICMbAJZlab8NEPwAfSkAPFO7CAh+gBgUAE4qVQaEPkA8CgCbbS0EAh8gPgUAABLyWwAAkJACAAAJKQAAkJACAAAJKQAAkJACAAAJve49AJxz//Sw6es+332qPAnAXHwOAKFsDfxLFAKA8xQAQigV/McUAYCXKQB0VSv4jykCAM8pAHTTKvxXo5cAf4sBKEkBoLnWwX9spCKw9y8yKgPAKQoATfUO/1X0ElDqTzGvFAHgmAJAM1HCfxWxBJQO/mOKALBSAGgiWvivIpWA2uG/GqUEPH7/ePlr3nxoMAnMSQGguqjhv4pQAlqF/ypqCdgS+if/rTIAV1EAqCp6+K96loDW4b+KVAL2BP8ft6UIwCb+FgB01Cv8e9/3oZLhX+P2YFY2AFQzyul/1XoLECWAe20CWgR1xG3AuZ+LCJejyEMBoIrRwn/V6gU4SvivWpeAlqf0CCXglp8HZYDaXAKAxqKF/7K0nan1ir73JYFby/CoJZpxKAAUN/IL18izE8v908Pu76cStwGnKADQUMTT/6rFbL1O463vt3RoKwHUoABQ1AwvVDM8hoh6r+Jb3X+t7x/fl5SmAEAjkU//qxFmBMpQAIDqep/+V7XnqH1KtwWgJAUAoIBW4awEUIoCQDEzvTCVfiwjrdZHmhW4nQIAVBVl/b+KNg/0ogAA7NR6+zXTto1+FAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFACgqsc3H3qP8EyNeT7ffSp+m5HujzkpABQz04tS6cfy7f3XordX00izArdTAAAgIQUAqC7KZYCac7TagM20aaMvBQAaGWG1PsKMkdUOZ+FPSQoARc3wAjXDY4io9xag9/1DNAoANBT5hN1itl4h3PJ+axVIxZTSFACKG/mFauTZiaP095HvS2pQAKCxiFuAljO13gL02jp8vvu0O7hL3AacogBQxYgvWi1njlQCeszSKpQjXPe/9ftqxJ8hxvLq188fv3sPwbzunx56j7BJrxfbt1/edbnfVYQi8vj9Y/nbDBD8p5z7mRD6tKQAUJUCcFmvEhAh/FclS0Dk8IdIFACqi14CIpy6WpeASOF/aE8REPxwHQWAJqKWgAjhv2pVAqKG/7EtZUDow+0UAJqJVgIihf+qdgkYJfyB+hQAmopSAiKG/6HSRUDwA8cUAJrrXQKih/+hvUVA8AOnKAB007oIjBT8L9laBoQ+sIUCQFetSsDo4Q9QmgJACLWKgOAHeJkCQCilioDgBzhPASC0rYVA4ANcRwEAgIT8NUAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEXvceACJ6++Xdpq/79v5r5UkA6nj16+eP372HgAi2hv4pygAwEgWA9PYG/zFFABiBAkBapYP/mCIARKYAkFLt8F9FKwGP3z+e//9vPjSaBOhNASCdVuG/6l0CLoX+yX+nDMDUFABSaR3+qx4l4Nbg/+N2FAGYks8BII1e4d/jvkuFf+nbAuKwASCFnuF/qPYmoHZYj7wNuH96OPv/P999ajQJxKAAML0o4b+qVQJandRHKwGXgv+YIkAWCgBTixb+q9IloPWafoQScG3wH1MEmJ33AADT2Rv+pW4DIlMAmFbU0/+ylJ2tx5v0Ir8xsGRwKwHMTAGAgfUM4ogloEZgKwHM6q+///n3Ve8hoLTIp//VCDOOpGZQKwHM5u9//n1lAwCDinACjzADcBsFABheixO6LQCzUQCYzkir9ZFmBeaiAMCAIq3eI80CbKcAAENruZp3GYCZKAAAkNBfy/LfrwP0HgQAqG/NfBsAAEhIAQCAhBQAAEhIAQCAhP6vAHgjIIzj8c2H3iP8n96zfL77NOV9QQ2HWW8DwHS+vf/ae4TNRpoVmIsCAAAJKQAwqN6r9ygzLEub1bz1P7N5VgC8D4BZjLBaH2FGYB7HGW8DAAPreQKPcvpf1TyhO/0zIwWAaUU+YZecrUcQRwv/VY2gFv7MSgEAplIysIU/M/ujAHgfADOJuAWoMVPLE3nU0/+hEsEt/JnJS9n+Ytj/+vnjd/1xoJ23X971HmFZlvqF5PH7x7q3P0D4H7t/erjq6wU/M1IASK13CWi5jShdBEYM/mOXioDgZ2abC8CyKAHMqVcJ6HEpolQJmCH8IbNTl/YVANJpXQJ6vw/h1iIg+GEOVxeAZVECmFerEtA7/I9dKgNCH+Zy7o39CgBp1S4B0cIfyEcBgDNKFwHBD0RxcwFYFiWAPPYWAcEPRHLpc30UAHjB1jIg9IGodheAZVECAGAkWz7V198CAICENhUAfx8AAMawNbNtAAAgoc0FwBYAAGK7JqttAAAgoasKgC0AAMR0bUbbAABAQlcXAFsAAIjllmy2AQCAhG4qALYAABDDrZl88wZACQCAvvZksUsAAJDQrgJgCwAAfezN4N0bACUAANoqkb0uAQBAQkUKgC0AALRRKnOLbQCUAACoq2TWFr0EoAQAQB2lM9Z7AAAgoeIFwBYAAMqqka1VNgBKAACUUStTq10CUAIAYJ+aWVr1PQBKAADcpnaGehMgACRUvQDYAgDAdVpkZ5MNgBIAANu0ysxmlwCUAAA4r2VWNn0PgBIAAC9rnZHN3wSoBADAcz2ysctvASgBAPCfXpnY7dcAlQAAsuuZhV0/B0AJACCr3hkYJoB//fzxu/cMAFBb7+BfhfkkwChPCADUEinrwhSAZYn1xABASdEyLlQBWJZ4TxAA7BUx28INdMj7AgAYWcTgX4XbAByK/MQBwDnRMyx0AViW+E8gABwbIbvCD3jIJQEAIhsh+FfhNwCHRnpiAchltIwaathDtgEARDBa8K+G2gAcGvUJB2AeI2fRsIMfsg0AoKWRg381/AM4pAgAUNMMwb+a5oEcUgQAKGmm4F9N94AOKQIA7DFj8K+mfWCHFAEArjFz8K+mf4CHFAEAzskQ/Ks0D/SYMgDAsuQK/UMpH/QhRQAgp6zBv0r94I8pAwBzyx76hzwRZygEAGMT+Kd5Yq6gEADEJvC380TtpBQA9CHs9/HkVaQcAOwj5Ov5H2rOEm8J8Jj7AAAAAElFTkSuQmCC" label: "🌱 greenpt/glm-5.3-flash" preset: endpoint: "Inference Co-op" model: "greenpt/glm-5.3-flash" - name: greenpt-glm-5-3 - iconURL: "/assets/logo-coop.png" + iconURL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAaK0lEQVR4nO3dPXJTWbQG0EsX1dVVPSmG4CkQkJE4cULihISEhIyAKXgITIoqioQX9LvvycKSrnTPzz5nrxV2G2lLZev7zr6y/Gqhml8/f/zuPQPAyP7+599XvWeYlSd2JyEP0IdysI8n7wrCHiA2pWA7T9QZAh9gbArBaZ6YAwIfYG4Kwf9L/0QIfYCcspeBtA9e8AOwLHmLQKoHLfQBOCdTGUjxQAU/ANfIUASmfoCCH4A9Zi4CUz4wwQ9ASTMWgakekOAHoKaZisAUD0TwA9DSDEVg6Acg+AHoaeQi8FfvAW4l/AHobeQsGq65jPxkAzCv0bYBQ20AhD8AUY2WUUO0ldGeVAByG2EbEH4DIPwBGM0I2RW6AIzwBALAS6JnWMgVRfQnDQCuEfGSQLgNgPAHYDYRsy1UAYj4BAFACdEyLkwBiPbEAEBpkbKu+zWJSE8GALTS+30BXTcAwh+ArHpnYLcC0PuBA0BvPbOwSwEQ/gDwn16Z2LwACH8AeK5HNjYtAMIfAF7WOiObFQDhDwDntczKJgVA+APANq0ys3oBEP4AcJ0W2RnmkwABgHaqFgCnfwC4Te0MrfYxhMIf4nn75d3Z///t/ddGkwBb1frI4Co3Kvwhjkuhf4oyAHHUKAHFb1D4Q3+3hv4pygD0V7oEeBMgTKZ0+Ne6TaCvogXA6R/6qhnUSgD0VTpji60ThD/00zqcXRKAfkpdCiiyARD+0E+Pk7ltAPRTKnO9BwAAEtpdAJz+oZ+eJ3FbAOinRPbuKgDCH/qJEMARZoCs9mawSwAwoEjBG2kWYLubC4DTPwD0tSeLbyoAwh8AYrg1k10CgMFEXLlHnAk47+oC4PQPALHcks02AACQ0FUFwOkf+oq8ao88G2RwbUbbAABAQpsLgNM/AMR2TVbbAABAQpsKgNM/AIxha2bbAABAQhcLgNM/AIxlS3bbAABAQmcLgNM/xPLt/dfeI5wUeTbI6FKG2wAAQEIKAAAkdLIAWP9DTBFX7RFnAs5nuQ0AACT0YgFw+geAOZzKdBsAGFCklXukWYDtFAAYVITgjTADcJs/CoD1P4yjZwALfxjHS9luAwAACSkAMLgeJ3Gnfxjfq+P/4BIAjOvtl3dVb1/ww7j+/uffZ5n/bAMg/GFsNQNa+MPYjjPeJQCYTI2gFv4wn2frABsAmM+tlwWEPszn8DKAAgCJXCoDQh/m9mIBEP4AML+1BHgPAAAkpAAAQEIKAAAkpAAAQEJ/LYs3AAJAFmvm2wAAQEIKAAAkpAAAQEIKAAAkpAAAQEIKAAAk9MqvAAJAPjYAAJCQAgAACSkAAJCQAgAACSkAAJCQAgAACb3uPQBk9vj94+WvefOhwSRANj4HABraEvgXb0MhAApQAKCBEsH/x20qAsAOCgBUVCP4/7gPRQC4gQIAFbQI/j/uUxEAruC3AKCwHuHf836BMSkAUFDvEO59/8A4FAAoJEr4RpkDiM17AKCAiKE7wnsC7p8eTv6/z3efGk4C+SgAsFPE8F9FLAHnQv8UZQDKUwBgh8jhv4pSAm4J/mOKAJTjo4CBqkoE//FtKQKwnzcBwo1GOP0vS985S4Z/i9uFTBQAoIraIa0EwD4KANxglNP/qvW8rcJZCYDbKQAAkJACAFca7fS/ajV361O5LQDcRgEAiukVxkoAXE8BAICEFAC4wqjr/9Xo8wPlKABAEb3X8L3vH0ajAABAQgoAACSkAABAQgoAACSkAABAQgoAACSkAABAQgoAUMTnu0+p7x9GowDAFR7ffOg9wi6jzw+UowAAQEIKAFBMrzW89T9cTwGAK426Rm81d+swFv5wGwUAABJSAOAGo20BWs/b6lTu9A+3UwCAKmqHs/CHfRQAuNEoW4Cec9YKaeEP+73uPQAwtzWs758eit0WsN+rXz9//O49BIzs8fvH3iOcFHFLcUsREPxQngIABUQsARHD/9i5MiD0oS4FAAqJVAJGCH+gL28ChEKihG6UOYDYFAAoqHf49r5/YBwKABTWK4SFP3AN7wGAilq8L0DwA7dQAKCBGkVA8AN7KADQUIkiIPiBEhQA6GhLIRD4QA0KAAAk5LcAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAAEnrdewCI6O2Xd5u+7tv7r5UnAajDXwOEZXvgX6IQAKNQAEitVPAfUwSA6BQAUqoV/McUASAqbwIknVbh3/q+AK5hA0AavcPYNgCIRAEghd7hv+pdAh6/fzz//998aDQJ0JsCwPSihP+qdQm4FPon/50yAFNTAJhatPBf1S4Bt4b+ydtTBmA63gTItKKG/7LUna10+Ne6TaAvGwCmFDn8D5XeBNQO6pE3AfdPD2f//+e7T40mgRh8FDBMoNUJfb2fUYrApdA/9bXKABm4BMB0Rjn9L0uZWXus50e4JHBN+Jf8tzAKGwCmMlL4r95+edf91wNnUiq819uxDWBWNgAwsJ4n8YhbgBond9sAZqUAMI0RT/+rW2aPEMARZljVDGolgBkpADCgSMEbYZYWAa0EMBsFgCmMfPpfzfAYgHEoAMDQWp7MbQGYiQIAg4mwcj/Wa6YegawEMAsFAAASUgAY3kzXzmd6LEBsCgAMJOL6f9V6tp6reJcBmIECAAAJKQAAkJACAAAJKQAAkJACAAAJKQAAkJACAAAJKQAwkMc3H3qPcFLr2T7ffWp6f1HuG0pRABjet/dfe49QzEyPBYhNAQCAhBQAGEzEywC9Zuqxirf+ZxYKADC0loEs/JmJAsAUZrh2PsNjAMahAMCAIl0GiDBLi5O50z+zUQCYxsgn6FtmjxC8EWZY1Qxo4c+MFAAYWM8AjhT+qxpBLfyZ1eveA0BJ395/Xd5+edd7jKuMvLmIaA3s+6eHIrcDs7IBYDojBWqJWXucxCOe/o/tCXDhTwY2ADCBNZAfv39scj+jOAzySxsBoU82r379/PG79xBQQ/RLAbU2FbVKwGjhD5znEgDTinwpoOZsNYJa+MN8bACYXrRNQOticutGQOjD3BQAUohSAnpvJS6VAaEPeSgApNG7BPQOf4BDCgDptC4Cgh+IyJsASadlIAt/ICobAFKrtQ0Q/EB0CgAs5YqA4AdGoQDAC7YWAoEPjEoBAICEvAkQABJSAAAgIQUAABJSAAAgIQUAABJSAAAgIQUAABJSAAAgode9B4Bz7p8eNn3d57tPlScBmItPAiSUrYF/iUIAcJ4CQAilgv+YIgDwMgWArmoF/zFFAOA5BYAuWgX/MUUA4D9+C4DmeoV/7/sGiMQGgGaihe9o24C3X95t+rpv779WngSYgQJAE9HCfxW9BGwN/VOUAeAUBYDqoob/KmIJ2Bv8xxQB4JgCQFXRw38VpQSUDv5jigCwUgCoZpTwX/UuAbXDfzVKCXj8/vHy17z50GASmJOPAoYAWoX/el9RS8CW0D/19coAXMcGgCpGO/2vemwBWob/oUgl4NrgP3tbigBs4nMAKG7U8F+W9rP3Cv/e932oZPjXuD2YlUsA0EmEAO55OaBmUK+3HXEbcK5k9n4fCrm4BEBRI5/+D9V+IY4Q/odal4CWp/QIJeCWnwtlgNpcAoDGooX/srSdqfWKvuclgfunh5tL8Z5/C1soABQz04vVTI+FPkp9D/lepBYFABqKePpftZit12m89f2WDm0lgBoUAIqY8QVqxsfUU+9357e6/1rfN74fKU0BgEYin/5XI8wYWe2QVgIoSQEAqut9+l9FmQMiUAAACmh1OrcFoBQFgN1mfkEq9dhGWq2PNCtwOwUAqCra2r3GPK1L8Mylm3YUAABISAEAgIQUAABISAEAgIQUAABISAEAgIQUAABISAEAqnp886H3CM/UmOfz3afitxnp/piTAsBuM78YlXps395/LXI7LYw0K3A7BQCggFZFeObCTVsKAFBdlMsAUeaACBQAaGSE1foIM0ZW+3Tu9E9JCgBFzPjCNONj6qn36bvV/df6vvH9SGkKADQU+YTdYrZeJaD1/ZYOa+FPDQoAxcz0IjXTY6GPUt9DvhepRQGAxiJuAVrO1Po03vPSw+e7TzcH+J5/C1u8+vXzx+/eQzCX+6eH3iPs0upF9+2Xd03u55JeheTx+8f69xHwXf/nfj4EPi0pABSnAGzXuwRE2EbUKAIRgx+icQmA4kY+xbSevWcARwj/ZSkf1sIftrEBoJrRNgE9i0vrTUCU8D+2Zxsg+OE6r3sPAPwXyK1KQNTwX5bnIb6lDAh9uJ0NAFWNsgWIctmidgmIHP5AWwoA1UUvAVHC/1DpIiD4gWMKAE1ELQERw//Q3iIg+IFTFACaiVYCoof/sa1lQOgDWygANNe7CIwW/AA1+BwAmusZwMIf4D82AHTVahsg+AGeUwAIoVYREPwAL1MACKVUERD8AOcpAIS2tRAIfIDrKAAAkJDfAgCAhBQAAEhIAQCAhBQAAEjode8BGIfPogeYh98C4KRSf5JWIQCIRwHgmdJ/h/6YMgAQgwLAsiz1g/+YIgDQlwKQXOvgP6YIAPThtwAS6x3+UWYAyMgGIKlowTvqJuDx+8dtX/fmQ+VJAK6jACQTLfiPjVAEtob+yX+vDAABKACJRA//VcQSsDf0T96uMgB04j0ASYwS/ssSb9Za4V/7tgHOsQFIIFqgbtV7E9A6nEfcBtw/PZz9/5/vPjWaBLiWjwKGF/Q4mT9+/zhECbgU+qe+VhmAWGwAJjfq6X/VYwvQey0fsQRcE/pbKAPQn/cATGz08F+W9o+hd/hHmeFQ6fCvdZvAdWwAJjVD+B9qsQmIFrwRNgG1gzryJuDSz1Dv96jAXgrApBSA60QL/1WvEtD6hB6lCNz6c6MMMCIFYEKzhf+q1ots1PBftS4BvdbzvUvA3p+bEUrApe/1CFsn2vFbAEBqpQrzejsRi8Dmj6z+369TBHKwAZjMrKf/VekX1+in/1WrF+Teb85rvQWo9fMSpQT42GrO8VsApDVK+C9Lm1l7h3/rGWqW5QhFvMT3zEg/I1xPAQBChP+qxSwtArpnCSgZ3ErAvBSAiUQ4ddSW4THCHjUCWwmYkwJASiO+oI04c0QtS+RMH2Tl+28+CgAkF2n9v6o1U48Nkq0VUSkAABNocUK3BZiLAjCJTKeMvY915BexkWcHYlEAILGI6/9V6dl6luTa992yGCqh81AAACAhBQAAElIAACAhBQAAElIAACAhBQAAElIAACAhBQAS+3z3qfcIJ5We7dv7r0VvL9J9P775UPX2e90XdSkAk+j54tba3sc68gvYyLMDsSgAABNoUQ4V0LkoAJBcxMsAtWbqsSnLtJ1jLAoAKY14khlx5ohaBnLr8K/5PeL7bz4KwEQynDQyPEbYo0ZQC/85KQBAqMsALWZpUSR7ltWSgS3856UAkNZIL2wtZo1QAlrOUDOgI2yqSnzPjPQzwvVe/fr543fvISir5989r6nWi2r0v2/e+kX4/umh6f2tehWQ0j8vEcL/2LXf44I/h9e9BwDoaQ3svUUgYvCv1kC/VAQEfy42AJOabQtQ/ZPUgm4Ber0gt94CRLj8sCy3/9xEDn84RQGYlAJwvWglIMJprHYRiBL8L7n0MyT0GZ0CMLFZSkDLF9ooJSBC+K9qlYDI4Q8Z+C2Aic1wQpnpg1RGmuFQjaAW/tCfDUACo24Cuv4edadNQLTwf8mtGwGhD7H4LQB4weObD81LwAjhvyzPg/xSGRD6EJcNQBKjbQEiXb6oXQRGCX5gLt4DkESkQL0k2qz+wAowIxuAZKJvAqKF/0v2bgSEPhCBApBUtCIwQvC/ZGsZEPpANApAYlFKwKjhDzAy7wFILELwRpgBICMbAJZlab8NEPwAfSkAPFO7CAh+gBgUAE4qVQaEPkA8CgCbbS0EAh8gPgUAABLyWwAAkJACAAAJKQAAkJACAAAJKQAAkJACAAAJve49AJxz//Sw6es+332qPAnAXHwOAKFsDfxLFAKA8xQAQigV/McUAYCXKQB0VSv4jykCAM8pAHTTKvxXo5cAf4sBKEkBoLnWwX9spCKw9y8yKgPAKQoATfUO/1X0ElDqTzGvFAHgmAJAM1HCfxWxBJQO/mOKALBSAGgiWvivIpWA2uG/GqUEPH7/ePlr3nxoMAnMSQGguqjhv4pQAlqF/ypqCdgS+if/rTIAV1EAqCp6+K96loDW4b+KVAL2BP8ft6UIwCb+FgB01Cv8e9/3oZLhX+P2YFY2AFQzyul/1XoLECWAe20CWgR1xG3AuZ+LCJejyEMBoIrRwn/V6gU4SvivWpeAlqf0CCXglp8HZYDaXAKAxqKF/7K0nan1ir73JYFby/CoJZpxKAAUN/IL18izE8v908Pu76cStwGnKADQUMTT/6rFbL1O463vt3RoKwHUoABQ1AwvVDM8hoh6r+Jb3X+t7x/fl5SmAEAjkU//qxFmBMpQAIDqep/+V7XnqH1KtwWgJAUAoIBW4awEUIoCQDEzvTCVfiwjrdZHmhW4nQIAVBVl/b+KNg/0ogAA7NR6+zXTto1+FAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFACgqsc3H3qP8EyNeT7ffSp+m5HujzkpABQz04tS6cfy7f3XordX00izArdTAAAgIQUAqC7KZYCac7TagM20aaMvBQAaGWG1PsKMkdUOZ+FPSQoARc3wAjXDY4io9xag9/1DNAoANBT5hN1itl4h3PJ+axVIxZTSFACKG/mFauTZiaP095HvS2pQAKCxiFuAljO13gL02jp8vvu0O7hL3AacogBQxYgvWi1njlQCeszSKpQjXPe/9ftqxJ8hxvLq188fv3sPwbzunx56j7BJrxfbt1/edbnfVYQi8vj9Y/nbDBD8p5z7mRD6tKQAUJUCcFmvEhAh/FclS0Dk8IdIFACqi14CIpy6WpeASOF/aE8REPxwHQWAJqKWgAjhv2pVAqKG/7EtZUDow+0UAJqJVgIihf+qdgkYJfyB+hQAmopSAiKG/6HSRUDwA8cUAJrrXQKih/+hvUVA8AOnKAB007oIjBT8L9laBoQ+sIUCQFetSsDo4Q9QmgJACLWKgOAHeJkCQCilioDgBzhPASC0rYVA4ANcRwEAgIT8NUAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEFAAASEgBAICEXvceACJ6++Xdpq/79v5r5UkA6nj16+eP372HgAi2hv4pygAwEgWA9PYG/zFFABiBAkBapYP/mCIARKYAkFLt8F9FKwGP3z+e//9vPjSaBOhNASCdVuG/6l0CLoX+yX+nDMDUFABSaR3+qx4l4Nbg/+N2FAGYks8BII1e4d/jvkuFf+nbAuKwASCFnuF/qPYmoHZYj7wNuH96OPv/P999ajQJxKAAML0o4b+qVQJandRHKwGXgv+YIkAWCgBTixb+q9IloPWafoQScG3wH1MEmJ33AADT2Rv+pW4DIlMAmFbU0/+ylJ2tx5v0Ir8xsGRwKwHMTAGAgfUM4ogloEZgKwHM6q+///n3Ve8hoLTIp//VCDOOpGZQKwHM5u9//n1lAwCDinACjzADcBsFABheixO6LQCzUQCYzkir9ZFmBeaiAMCAIq3eI80CbKcAAENruZp3GYCZKAAAkNBfy/LfrwP0HgQAqG/NfBsAAEhIAQCAhBQAAEhIAQCAhP6vAHgjIIzj8c2H3iP8n96zfL77NOV9QQ2HWW8DwHS+vf/ae4TNRpoVmIsCAAAJKQAwqN6r9ygzLEub1bz1P7N5VgC8D4BZjLBaH2FGYB7HGW8DAAPreQKPcvpf1TyhO/0zIwWAaUU+YZecrUcQRwv/VY2gFv7MSgEAplIysIU/M/ujAHgfADOJuAWoMVPLE3nU0/+hEsEt/JnJS9n+Ytj/+vnjd/1xoJ23X971HmFZlvqF5PH7x7q3P0D4H7t/erjq6wU/M1IASK13CWi5jShdBEYM/mOXioDgZ2abC8CyKAHMqVcJ6HEpolQJmCH8IbNTl/YVANJpXQJ6vw/h1iIg+GEOVxeAZVECmFerEtA7/I9dKgNCH+Zy7o39CgBp1S4B0cIfyEcBgDNKFwHBD0RxcwFYFiWAPPYWAcEPRHLpc30UAHjB1jIg9IGodheAZVECAGAkWz7V198CAICENhUAfx8AAMawNbNtAAAgoc0FwBYAAGK7JqttAAAgoasKgC0AAMR0bUbbAABAQlcXAFsAAIjllmy2AQCAhG4qALYAABDDrZl88wZACQCAvvZksUsAAJDQrgJgCwAAfezN4N0bACUAANoqkb0uAQBAQkUKgC0AALRRKnOLbQCUAACoq2TWFr0EoAQAQB2lM9Z7AAAgoeIFwBYAAMqqka1VNgBKAACUUStTq10CUAIAYJ+aWVr1PQBKAADcpnaGehMgACRUvQDYAgDAdVpkZ5MNgBIAANu0ysxmlwCUAAA4r2VWNn0PgBIAAC9rnZHN3wSoBADAcz2ysctvASgBAPCfXpnY7dcAlQAAsuuZhV0/B0AJACCr3hkYJoB//fzxu/cMAFBb7+BfhfkkwChPCADUEinrwhSAZYn1xABASdEyLlQBWJZ4TxAA7BUx28INdMj7AgAYWcTgX4XbAByK/MQBwDnRMyx0AViW+E8gABwbIbvCD3jIJQEAIhsh+FfhNwCHRnpiAchltIwaathDtgEARDBa8K+G2gAcGvUJB2AeI2fRsIMfsg0AoKWRg381/AM4pAgAUNMMwb+a5oEcUgQAKGmm4F9N94AOKQIA7DFj8K+mfWCHFAEArjFz8K+mf4CHFAEAzskQ/Ks0D/SYMgDAsuQK/UMpH/QhRQAgp6zBv0r94I8pAwBzyx76hzwRZygEAGMT+Kd5Yq6gEADEJvC380TtpBQA9CHs9/HkVaQcAOwj5Ov5H2rOEm8J8Jj7AAAAAElFTkSuQmCC" label: "🌱 greenpt/glm-5.3" preset: endpoint: "Inference Co-op" model: "greenpt/glm-5.3" - name: regolo-apertus-70b - iconURL: "/assets/logo-coop.png" + iconURL: "data:image/png;base64,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" label: "🌱 regolo/apertus-70b" preset: endpoint: "Inference Co-op" model: "regolo/apertus-70b" - name: regolo-qwen3-5-122b - iconURL: "/assets/logo-coop.png" + iconURL: "data:image/png;base64,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" label: "🌱 regolo/qwen3.5-122b" preset: endpoint: "Inference Co-op" model: "regolo/qwen3.5-122b" - - name: regolo-qwen-image - iconURL: "/assets/logo-coop.png" - label: "🖼️ regolo/qwen-image" - preset: - endpoint: "Inference Co-op" - model: "regolo/qwen-image" - - - # Inference Cooperative branding + interface: customWelcome: "Welcome to your co-op AI." + # Feature permissions (seeded for the USER role at startup; + # ongoing edits belong in the LibreChat Admin Panel) + webSearch: true + mcpServers: + use: true # members can use admin-configured MCP servers + create: true # members can add their own (bring-your-own-tools) + share: false theme: version: 1 name: inference @@ -163,3 +124,47 @@ interface: rgb-text-primary: '236 233 226' rgb-text-secondary: '168 173 158' rgb-border-light: '74 82 64' + + +# Speech (STT/TTS) via the co-op gateway. Uses a dedicated LiteLLM virtual key +# (alias: librechat-speech, $5/30d budget, restricted to the audio models) so +# speech never runs on the gateway master key. The gateway is a public +# endpoint, so no SSRF allowedAddresses exemption is needed. +speech: + tts: + openai: + url: "https://gateway.inference.coop/v1" + apiKey: "${TTS_API_KEY}" + model: "tinfoil/voxtral-tts" + voices: ["casual_female"] + stt: + openai: + url: "https://gateway.inference.coop/v1" + apiKey: "${STT_API_KEY}" + model: "tinfoil/whisper-large-v3-turbo" + speechTab: + conversationMode: false + advancedMode: false + speechToText: true + textToSpeech: true + +# Web search: self-hosted SearXNG (search.inference.coop, keyless JSON API) +# for search, keyless Keenable for page scraping, no reranker. The instance +# URL is an env-var reference (real values never live in the YAML). +webSearch: + searchProvider: "searxng" + searxngInstanceUrl: "${SEARXNG_INSTANCE_URL}" + searxngSearchOptions: + engines: "google,bing,startpage" + language: "en" + scraperProvider: "keenable" + rerankerType: "none" + +# MCP servers (admin-configured). The docs server is the same stdlib-only +# Python server Open WebUI uses; it lives on the persistent volume at +# /app/data/mcp/server.py so it survives image updates. +mcpServers: + inference-docs: + command: /app/code/venv/bin/python3 + args: ["/app/data/mcp/server.py"] + timeout: 60000 diff --git a/mcp/server.py b/mcp/server.py new file mode 100644 index 0000000..9f5d683 --- /dev/null +++ b/mcp/server.py @@ -0,0 +1,256 @@ +#!/usr/bin/env python3 +"""Inference Cooperative docs MCP server (stdio, stdlib-only). + +Exposes a `search_docs` tool over the co-op documentation (co-op/docs on +git.inference.coop). Members opt in per conversation via the tools palette. + +Design notes: +- stdio transport: newline-delimited JSON-RPC 2.0 on stdin/stdout (the MCP + stdio protocol). All logging goes to stderr — stdout is protocol-only. +- No third-party dependencies: the corpus is fetched from the public Gitea + raw API, chunked by heading, and ranked with a compact BM25. +- The index refreshes lazily if older than DOCS_TTL seconds (default 30 min). +""" + +import json +import math +import re +import sys +import time +import urllib.request +from concurrent.futures import ThreadPoolExecutor + +DOCS_REPO = "co-op/docs" +GITEA_API = "https://git.inference.coop/api/v1" +DOCS_TTL = 30 * 60 +MAX_CHUNKS_RETURNED = 5 + +SERVER_NAME = "inference-cooperative-docs" +SERVER_VERSION = "1.0.0" + +_index = {"chunks": [], "built_at": 0.0} +_lock_held = False + +TOKEN_RE = re.compile(r"[a-z0-9]+") + + +def log(msg): + sys.stderr.write(f"[inference-docs-mcp] {msg}\n") + sys.stderr.flush() + + +def fetch_json(url): + with urllib.request.urlopen(url, timeout=30) as r: + return json.loads(r.read().decode("utf-8")) + + +def fetch_text(url): + with urllib.request.urlopen(url, timeout=30) as r: + return r.read().decode("utf-8") + + +def list_doc_files(): + files = fetch_json(f"{GITEA_API}/repos/{DOCS_REPO}/contents") + return [ + {"path": f["path"], "name": f["name"]} + for f in files + if f["type"] == "file" and f["name"].endswith(".md") + ] + + +def chunk_markdown(path, text): + """Split a doc into section chunks keyed by its top title + heading.""" + lines = text.splitlines() + title = lines[0].lstrip("# ").strip() if lines and lines[0].startswith("#") else path + sections = [] + current_head = "Overview" + current = [] + + def flush(): + body = "\n".join(current).strip() + if len(body) < 40: + return + sections.append({"doc": title, "path": path, "section": current_head, "text": body}) + + for line in lines: + if line.startswith("## "): + flush() + current_head = line.lstrip("# ").strip() + current = [] + else: + current.append(line) + flush() + return sections + + +def tokenize(text): + return TOKEN_RE.findall(text.lower()) + + +def build_index(): + chunks = [] + docs = list_doc_files() + + def load(doc): + try: + raw = fetch_text(f"{GITEA_API}/repos/{DOCS_REPO}/raw/{doc['path']}") + return chunk_markdown(doc["path"], raw) + except Exception as exc: # noqa: BLE001 - one bad doc shouldn't kill the index + log(f"skipping {doc['path']}: {exc}") + return [] + + with ThreadPoolExecutor(max_workers=6) as pool: + for parts in pool.map(load, docs): + chunks.extend(parts) + + # BM25 statistics + doc_terms = [tokenize(c["text"]) for c in chunks] + n = len(chunks) + avg_len = sum(len(t) for t in doc_terms) / max(n, 1) + df = {} + for terms in doc_terms: + for term in set(terms): + df[term] = df.get(term, 0) + 1 + for c, terms in zip(chunks, doc_terms): + c["_tf"] = {} + for t in terms: + c["_tf"][t] = c["_tf"].get(t, 0) + 1 + c["_len"] = len(terms) + _index["chunks"] = chunks + _index["df"] = df + _index["n"] = n + _index["avg_len"] = avg_len + _index["built_at"] = time.time() + log(f"index built: {n} chunks from {len(docs)} docs") + + +def ensure_index(): + if not _index["chunks"] or time.time() - _index["built_at"] > DOCS_TTL: + build_index() + + +def search(query, limit=MAX_CHUNKS_RETURNED): + ensure_index() + k1, b = 1.5, 0.75 + q_terms = tokenize(query) + scored = [] + for c in _index["chunks"]: + score = 0.0 + for t in q_terms: + tf = c["_tf"].get(t, 0) + if not tf: + continue + idf = math.log(1 + (_index["n"] - _index["df"].get(t, 0) + 0.5) / (_index["df"].get(t, 0) + 0.5)) + score += idf * tf * (k1 + 1) / (tf + k1 * (1 - b + b * c["_len"] / _index["avg_len"])) + if score > 0: + scored.append((score, c)) + scored.sort(key=lambda pair: -pair[0]) + return scored[:limit] + + +def tool_search_docs(args): + query = str(args.get("query") or "").strip() + if not query: + return {"content": [{"type": "text", "text": "Provide a query."}]} + limit = min(int(args.get("limit") or MAX_CHUNKS_RETURNED), 10) + results = search(query, limit) + if not results: + return {"content": [{"type": "text", "text": "No matching documentation found."}]} + parts = [] + for score, c in results: + parts.append(f"[{c['doc']} — {c['section']}] (relevance {score:.2f})\n{c['text']}") + return {"content": [{"type": "text", "text": "\n\n---\n\n".join(parts)}]} + + +TOOLS = [ + { + "name": "search_docs", + "description": ( + "Search the Inference Cooperative documentation (getting started, models, " + "API access, charter, policies). Returns the most relevant doc sections." + ), + "inputSchema": { + "type": "object", + "properties": { + "query": {"type": "string", "description": "What to look for in the docs"}, + "limit": {"type": "integer", "description": "Max sections to return (default 5)"}, + }, + "required": ["query"], + }, + } +] + +TOOLS_HANDLERS = {"search_docs": tool_search_docs} + + +def handle(msg): + method = msg.get("method") + msg_id = msg.get("id") + + if method == "initialize": + return { + "jsonrpc": "2.0", + "id": msg_id, + "result": { + "protocolVersion": "2024-11-05", + "capabilities": {"tools": {}}, + "serverInfo": {"name": SERVER_NAME, "version": SERVER_VERSION}, + }, + } + if method == "ping": + return {"jsonrpc": "2.0", "id": msg_id, "result": {}} + if method == "tools/list": + return {"jsonrpc": "2.0", "id": msg_id, "result": {"tools": TOOLS}} + if method == "tools/call": + params = msg.get("params") or {} + name = params.get("name") + handler = TOOLS_HANDLERS.get(name) + if not handler: + return { + "jsonrpc": "2.0", + "id": msg_id, + "error": {"code": -32602, "message": f"Unknown tool: {name}"}, + } + try: + result = handler(params.get("arguments") or {}) + return {"jsonrpc": "2.0", "id": msg_id, "result": result} + except Exception as exc: # noqa: BLE001 - report tool errors in-band + log(f"tool error: {exc}") + return { + "jsonrpc": "2.0", + "id": msg_id, + "result": {"content": [{"type": "text", "text": f"Search failed: {exc}"}], "isError": True}, + } + if method and method.startswith("notifications/"): + return None + if msg_id is not None: + return {"jsonrpc": "2.0", "id": msg_id, "error": {"code": -32601, "message": "Method not found"}} + return None + + +def main(): + log("starting (stdio)") + for line in sys.stdin: + line = line.strip() + if not line: + continue + try: + msg = json.loads(line) + except json.JSONDecodeError as exc: + log(f"bad json: {exc}") + continue + try: + resp = handle(msg) + except Exception as exc: # noqa: BLE001 - never crash the protocol loop + log(f"handler crash: {exc}") + if msg.get("id") is not None: + resp = {"jsonrpc": "2.0", "id": msg["id"], "error": {"code": -32603, "message": "Internal error"}} + else: + resp = None + if resp is not None: + sys.stdout.write(json.dumps(resp) + "\n") + sys.stdout.flush() + + +if __name__ == "__main__": + main()