openvibers/openvibe.exchange README.md

README.md

main 7.3 KB · 105 lines · markdown

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
12OpenVibe.Exchange is the network's AI front: every model OpenVibe can run, with the live price, speed and uptime
13of every offer that serves it, one chat that puts up to three models side by side, and one OpenAI- and
14Anthropic-compatible endpoint. It reads OpenVibe.AI — the catalog, the aggregate usage and the runs a chat makes
15for 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
36The 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
38Every page is server-rendered with openvibe-shared/kit and complete without JavaScript. A page rendered for a
39signed-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
62AI unreachable is said, not papered over: the catalog read keeps the last good copy for five minutes and the
63pages carry an honest notice; no number is invented.
64
65## Money and free use
66
67A small daily message allowance comes with an account (`EXCHANGE_CHAT_PER_DAY`), and AI's own free allowance
68applies per person because the run is `on_behalf_of` them. Paid use and seller payouts arrive when the owner turns
69money on; this site shows cost, never charges.
70
71## Exchange v1, retired
72
73v1 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,
75templates → Space and Report, themes → Design), the v1 JSON API answers 410 `exchange.retired`, and its tables
76stay in place, read-only. v1's tests are kept, unrun, in `test/retired/`.
77
78## Run
79
80```sh
81npm ci
82npm start # development: embedded PGlite in data/pglite
83npm 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
87client-credentials token work. See [.env.example](.env.example).
88
89## License
90
91AGPL-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
101Automatic for a rental; Most private and On my machine explain when a Link/OpenVibe machine
102is required. The preview uses AI's cached public GPU quote API and never takes a Balance hold.
103Provider keys, monthly caps, provisioning and the journal remain in AI; desktop/browser pools
104and their operator view remain in Run. The Exchange keeps no provider credentials.
105