openvibers/openvibe.exchange README.md
README.md
| 1 | # OpenVibe.Exchange |
| 2 | |
| 3 | > Every AI model, one account. |
| 4 | |
| 5 | **Live site:** https://openvibe.exchange · **API docs:** https://openvibe.services · **For AI:** https://openvibe.exchange/llms.txt |
| 6 | **Run it:** `npm ci && npm run dev` (Node 22 or newer) · **Tests:** `npm test` |
| 7 | |
| 8 | **Status:** the remake (2026-11-06) — see [STATUS.json](STATUS.json). |
| 9 | **Domain:** `openvibe.exchange` · **Port:** 5150 · **Service id:** `exchange` · **Env prefix:** `EXCHANGE` |
| 10 | **License:** AGPL-3.0-only (same as every OpenVibe service). |
| 11 | |
| 12 | OpenVibe.Exchange is the network's AI front: every model OpenVibe can run, with the live price, speed and uptime |
| 13 | of every offer that serves it, one chat that puts up to three models side by side, and one OpenAI- and |
| 14 | Anthropic-compatible endpoint. It reads OpenVibe.AI — the catalog, the aggregate usage and the runs a chat makes |
| 15 | for a person — and keeps only two things of its own: a person's chats and their 18+ confirmation. |
| 16 | |
| 17 | ## Pages |
| 18 | |
| 19 | | Path | What | |
| 20 | |---|---| |
| 21 | | `/` | "Every AI model, one account": search, popular now, cheapest per million, uncensored, community machines, the endpoint, AI in OpenVibe. Every number is live. | |
| 22 | | `/models`, `/m/<org>/<model>` | Every model and every offer that serves it: price in, out and cached per million, measured p50/p95, uptime, data policy, a **Try it** box, curl and the SDK line. | |
| 23 | | `/chat` and `/chat/*` | 301 to `https://openvibe.chat/vibe`, carrying `?models=` and mapping old `@vN` model ids. Model pages' Try it links go there directly. | |
| 24 | |
| 25 | | `/api` | The endpoint, model ids (`deepseek/deepseek-chat`, `openvibe/auto`), keys from Network, aggregate usage, and the link to AI's own provider-keys page (`/you`, a session page). | |
| 26 | | `/start` | Start building: one key, one endpoint, the OpenAI/Anthropic samples, four steps, AI's six operations, and the sandbox and production limits. | |
| 27 | | `/why` | Why this model: the routing rule and a signed-in demo that shows a real run's explain — the objective, the selected offer, and every candidate with its cost, latency and reason. | |
| 28 | | `/faq` | The merged questions: the endpoint, SDKs, models, prices, privacy, keys, selling compute, the uncensored tier and the move from ai.openvibe.services. | |
| 29 | | `/sell` | OpenVibe Link's "Offer to the network", "Pool your machines" for a signed-in person (the four steps: choose the machines, what fits, approve on each, offer it), the dashboard, and what is **not** sold here (personal plans, personal API keys), said plainly. | |
| 30 | | `/uncensored` | The 18+ gate on the account, the abliterated models and the hard floor. | |
| 31 | | `/ai` | Which OpenVibe products run which models through the same router, and what each costs a day, with the product's own mark. | |
| 32 | | `/status` | Uptime per offer, the model changelog and incidents. | |
| 33 | | `/code` | GitHub repositories through OpenVibe.Sources: a deep repository search, Trending today / This week / Hot / New / Top, twelve language chips and one card per repository (stars, the week's gain, forks, language, topics, updated). `/api/v1/code/repos` and `/api/v1/code/search` are its public JSON. | |
| 34 | | `/decisions` | OpenVibe.AI's Decisions API: yes/no (`noul`), one-of-a-list (`choice`) and rubric (`score`) questions about one input, a full request and answer, and who answers — Google's `gemini-decision-1` when a Gemini key is set, otherwise the router's cheapest structured model with `calibrated: false`. | |
| 35 | |
| 36 | The old chat rows remain for a person's one-time import into Chat. `GET /internal/exchange/chat/export` requires Chat's service token with `exchange.chat.export` and the authenticated person's `x-ov-subject`; it returns only that person's unsealed chats. |
| 37 | |
| 38 | Every page is server-rendered with openvibe-shared/kit and complete without JavaScript. A page rendered for a |
| 39 | signed-in person is `private, no-store`; a public page is `public, max-age=60`. |
| 40 | |
| 41 | ## What it reads |
| 42 | |
| 43 | - `GET https://ai.openvibe.services/api/v1/exchange/catalog` — the models, grouped, with every live offer: price |
| 44 | (rate cards), measured speed and uptime (`provider_stats_daily`), and `metadata.data_policy` on the provider |
| 45 | when somebody recorded it. Prepaid capacity carries no price (`free: true`); BYOK and restricted capacity is |
| 46 | never an offer. |
| 47 | - `GET .../api/v1/exchange/usage?days=30` — aggregate requests, tokens and spend by day, model and product |
| 48 | (`usage_daily`; never a prompt, an answer or a person). |
| 49 | - `POST .../api/v1/runs` with `workflow: ai.complete` and `on_behalf_of` — one chat |
| 50 | turn or Try it, on the person's allowance, with this service's token (`ai.run.create`, namespace `ai.complete`). |
| 51 | - `GET .../api/v1/community/offers` — the live community offers; a pool says how many machines serve it (never |
| 52 | which ones), so the offer card can say "Community pool (N machines)" without naming a machine. |
| 53 | - `GET http://127.0.0.1:4720/api/v1/code/repos` and `/api/v1/code/search` — the GitHub repositories |
| 54 | OpenVibe.Sources keeps (the `github` source, category `code`) and its live GitHub search, with this |
| 55 | service's `sources.item.read` grant. Exchange never calls GitHub itself. |
| 56 | - `GET https://openvibe.network/api/v1/machines` and `/api/v1/machine-pools` — the person's own machines, their |
| 57 | pools and the machines they can pool, with the person's Network token: names, free VRAM and RAM, the local |
| 58 | network key, and each member's approval and readiness. `POST /api/v1/machine-pools` proposes a pool and |
| 59 | `POST /api/v1/machine-pools/:id/revoke` stops it. Link measures the links and the fit; Exchange shows what |
| 60 | Network carries and says "not measured yet" when it carries nothing. |
| 61 | |
| 62 | AI unreachable is said, not papered over: the catalog read keeps the last good copy for five minutes and the |
| 63 | pages carry an honest notice; no number is invented. |
| 64 | |
| 65 | ## Money and free use |
| 66 | |
| 67 | A small daily message allowance comes with an account (`EXCHANGE_CHAT_PER_DAY`), and AI's own free allowance |
| 68 | applies per person because the run is `on_behalf_of` them. Paid use and seller payouts arrive when the owner turns |
| 69 | money on; this site shows cost, never charges. |
| 70 | |
| 71 | ## Exchange v1, retired |
| 72 | |
| 73 | v1 was a free and swap marketplace for agents, MCP tools, templates, themes and game assets. It is retired |
| 74 | (design 2026-11-06): every v1 path answers **410** with a pointer (agents and MCP tools → Codes and Connect, |
| 75 | templates → Space and Report, themes → Design), the v1 JSON API answers 410 `exchange.retired`, and its tables |
| 76 | stay in place, read-only. v1's tests are kept, unrun, in `test/retired/`. |
| 77 | |
| 78 | ## Run |
| 79 | |
| 80 | ```sh |
| 81 | npm ci |
| 82 | npm start # development: embedded PGlite in data/pglite |
| 83 | npm test -- <file|word> # e.g. npm test -- pages chat retirement |
| 84 | ``` |
| 85 | |
| 86 | `DATABASE_URL` serves, `DATABASE_DIRECT_URL` migrates; `OV_OAUTH_CLIENT_SECRET` makes the sign-in and the AI |
| 87 | client-credentials token work. See [.env.example](.env.example). |
| 88 | |
| 89 | ## License |
| 90 | |
| 91 | AGPL-3.0-only. See [LICENSE](LICENSE). |
| 92 | |
| 93 | <!-- versions:start --> |
| 94 | - openvibe-contracts: v0.419.0 |
| 95 | - openvibe-sdk: v0.166.0 |
| 96 | - openvibe-shared: v4.241.0 |
| 97 | - openvibe-publishing: v1.7.0 |
| 98 | <!-- versions:end --> |
| 99 | |
| 100 | `/own` also previews GPU quotes without sign-in or a rental. Choose Cheapest, Fastest or |
| 101 | Automatic for a rental; Most private and On my machine explain when a Link/OpenVibe machine |
| 102 | is required. The preview uses AI's cached public GPU quote API and never takes a Balance hold. |
| 103 | Provider keys, monthly caps, provisioning and the journal remain in AI; desktop/browser pools |
| 104 | and their operator view remain in Run. The Exchange keeps no provider credentials. |
| 105 |