openvibers/openvibe.ai Commits
openvibe-shared v4.107.0 (was v4.106.2) (#271)
Changes
@@@ -57,7 +57,7 @@ owns publication truth: Wiki, Blog, News, Live, … decide what to publish.- provider APIs configured by the operator (OpenAI-compatible, OpenAI Responses, Anthropic, the HTTP seam), whisper.cppand the local model server `openvibe-llm.service` on this host- `openvibe-contracts` v0.252.0, `openvibe-sdk` v0.82.0 (service tokens, events outbox, redact),-- `openvibe-shared` v4.106.2, pinned by release tarball++ `openvibe-shared` v4.107.0, pinned by release tarball## Capabilities@@@ -754,5 +754,5 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [<!-- versions:start -->- openvibe-contracts: v0.262.0- openvibe-sdk: v0.82.0--- openvibe-shared: v4.106.2++- openvibe-shared: v4.107.0<!-- versions:end -->@@@ -9,7 +9,7 @@"domain": "ai.openvibe.services (the old ai.openvibe.network address was retired on 2026-10-10); the service runs on openvibe-ovh (/opt/openvibe.ai, unit openvibe-ai) on 127.0.0.1:4700 behind nginx; OpenVibe.Live and OpenVibe.Network call it on loopback","contracts": "openvibe-contracts v0.262.0 (the ai.me.* schemas arrive in v0.257.0; the person routes also work without them until this pin moves)","sdk": "openvibe-sdk v0.82.0",-- "shared": "openvibe-shared v4.106.2",++ "shared": "openvibe-shared v4.107.0","capabilities": ["ai.run.create","ai.run.read",@@@ -61,5 +61,5 @@"owner/T5: Billing unitFits() to accept unit image (OpenVibe.Billing server/ops/rating.js) — until then Billing stores image readings unrated (billing.no_card / billing.unit_mismatch)","Contracts: list POST /api/v1/image under ai.run.create and ai.app.run implementedBy (manifests/capabilities); add image to provider.v1 and provider-manage-request.v1 capabilities, model.v1 and provider-manage-request.v1 model type, definition-version-request.v1 step kind (media_analysis lags the same way)"],-- "updated": "2026-11-02"++ "updated": "2026-11-03"}@@@ -15,7 +15,7 @@"iovalkey": "^0.4.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.262.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.106.2",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.0","pg": "^8.23.0"},"devDependencies": {@@@ -1584,9 +1584,9 @@}},"node_modules/openvibe-shared": {-- "version": "4.106.2",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.106.2",-- "integrity": "sha512-sKq3TnkO0IaaKdgR5sLfkEwRL9DGYdT6etxTw4/9NKrp2HECvaDrPtOQw/xsrS0vtYwIm5z5BSp2+EVRt5MLQg==",++ "version": "4.107.0",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.0",++ "integrity": "sha512-S0Um9G8a0jl/yL8Sox4e+xZtLHyMjiv1WcwUIlml6hgMKAPq9aGIzcUA9Cb/d6SppJaxCKIAKmsF5Slbz6UyZg==","license": "MIT","dependencies": {"jsonwebtoken": "^9.0.0",@@@ -27,7 +27,7 @@"iovalkey": "^0.4.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.262.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.106.2",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.0","pg": "^8.23.0"},"optionalDependencies": {@@@ -74,6 +74,22 @@ function createApp({ config, db, registry, pool, quotas, cache, runs, auth, keys// The product home's browser files (the OpenVibe Frame, openvibe-shared/serve) under content-addressed// /shared/* URLs from this repo's pinned openvibe-shared; each answer sets its own asset cache policy.app.use('/shared', ovServe.handler());++ // Terms, Privacy and DMCA in this site's own words (openvibe-shared/legal, profile 'service'; 11-03: the footer's++ // legal links answered 404 here). The facts must match the code: change both together.++ const legal = require('openvibe-shared/legal');++ app.get(legal.PATHS, legal.handler({++ "host": "ai.openvibe.services",++ "name": "AI.OpenVibe.Services",++ "id": "ai",++ "service": "ai",++ "profile": "service",++ "what": "One API for chat, generation, summaries, classification, extraction and embeddings across many models; every run says which model answered, why it was chosen and what it cost.",++ "makes": [++ "your runs: the model that answered, why it was chosen, its tokens and its cost",++ "the API keys you make, and the provider keys you bring, which are stored encrypted"++ ],++ "ai": true++ }));// Inline images arrive as data URLs; the per-run input cap is enforced again in runs.create.app.use(['/api', '/v1'], express.json({ limit: Math.ceil(config.runs.maxInputBytes * 1.5), type: ['application/json', 'application/*+json'] }));
@@ -57,7 +57,7 @@ owns publication truth: Wiki, Blog, News, Live, … decide what to publish.
@@ -57,7 +57,7 @@ owns publication truth: Wiki, Blog, News, Live, … decide what to publish.
- provider APIs configured by the operator (OpenAI-compatible, OpenAI Responses, Anthropic, the HTTP seam), whisper.cpp
- provider APIs configured by the operator (OpenAI-compatible, OpenAI Responses, Anthropic, the HTTP seam), whisper.cpp
and the local model server `openvibe-llm.service` on this host
and the local model server `openvibe-llm.service` on this host
- `openvibe-contracts` v0.252.0, `openvibe-sdk` v0.82.0 (service tokens, events outbox, redact),
- `openvibe-contracts` v0.252.0, `openvibe-sdk` v0.82.0 (service tokens, events outbox, redact),
- `openvibe-shared` v4.106.2, pinned by release tarball
+ `openvibe-shared` v4.107.0, pinned by release tarball
## Capabilities
## Capabilities
@@ -754,5 +754,5 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [
@@ -754,5 +754,5 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [
<!-- versions:start -->
<!-- versions:start -->
- openvibe-contracts: v0.262.0
- openvibe-contracts: v0.262.0
- openvibe-sdk: v0.82.0
- openvibe-sdk: v0.82.0
-- openvibe-shared: v4.106.2
+- openvibe-shared: v4.107.0
<!-- versions:end -->
<!-- versions:end -->
@@ -9,7 +9,7 @@
@@ -9,7 +9,7 @@
"domain": "ai.openvibe.services (the old ai.openvibe.network address was retired on 2026-10-10); the service runs on openvibe-ovh (/opt/openvibe.ai, unit openvibe-ai) on 127.0.0.1:4700 behind nginx; OpenVibe.Live and OpenVibe.Network call it on loopback",
"domain": "ai.openvibe.services (the old ai.openvibe.network address was retired on 2026-10-10); the service runs on openvibe-ovh (/opt/openvibe.ai, unit openvibe-ai) on 127.0.0.1:4700 behind nginx; OpenVibe.Live and OpenVibe.Network call it on loopback",
"contracts": "openvibe-contracts v0.262.0 (the ai.me.* schemas arrive in v0.257.0; the person routes also work without them until this pin moves)",
"contracts": "openvibe-contracts v0.262.0 (the ai.me.* schemas arrive in v0.257.0; the person routes also work without them until this pin moves)",
"sdk": "openvibe-sdk v0.82.0",
"sdk": "openvibe-sdk v0.82.0",
- "shared": "openvibe-shared v4.106.2",
+ "shared": "openvibe-shared v4.107.0",
"capabilities": [
"capabilities": [
"ai.run.create",
"ai.run.create",
"ai.run.read",
"ai.run.read",
@@ -61,5 +61,5 @@
@@ -61,5 +61,5 @@
"owner/T5: Billing unitFits() to accept unit image (OpenVibe.Billing server/ops/rating.js) — until then Billing stores image readings unrated (billing.no_card / billing.unit_mismatch)",
"owner/T5: Billing unitFits() to accept unit image (OpenVibe.Billing server/ops/rating.js) — until then Billing stores image readings unrated (billing.no_card / billing.unit_mismatch)",
"Contracts: list POST /api/v1/image under ai.run.create and ai.app.run implementedBy (manifests/capabilities); add image to provider.v1 and provider-manage-request.v1 capabilities, model.v1 and provider-manage-request.v1 model type, definition-version-request.v1 step kind (media_analysis lags the same way)"
"Contracts: list POST /api/v1/image under ai.run.create and ai.app.run implementedBy (manifests/capabilities); add image to provider.v1 and provider-manage-request.v1 capabilities, model.v1 and provider-manage-request.v1 model type, definition-version-request.v1 step kind (media_analysis lags the same way)"
],
],
- "updated": "2026-11-02"
+ "updated": "2026-11-03"
}
}
@@ -15,7 +15,7 @@
@@ -15,7 +15,7 @@
"iovalkey": "^0.4.0",
"iovalkey": "^0.4.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.262.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.262.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.106.2",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.0",
"pg": "^8.23.0"
"pg": "^8.23.0"
},
},
"devDependencies": {
"devDependencies": {
@@ -1584,9 +1584,9 @@
@@ -1584,9 +1584,9 @@
}
}
},
},
"node_modules/openvibe-shared": {
"node_modules/openvibe-shared": {
- "version": "4.106.2",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.106.2",
- "integrity": "sha512-sKq3TnkO0IaaKdgR5sLfkEwRL9DGYdT6etxTw4/9NKrp2HECvaDrPtOQw/xsrS0vtYwIm5z5BSp2+EVRt5MLQg==",
+ "version": "4.107.0",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.0",
+ "integrity": "sha512-S0Um9G8a0jl/yL8Sox4e+xZtLHyMjiv1WcwUIlml6hgMKAPq9aGIzcUA9Cb/d6SppJaxCKIAKmsF5Slbz6UyZg==",
"license": "MIT",
"license": "MIT",
"dependencies": {
"dependencies": {
"jsonwebtoken": "^9.0.0",
"jsonwebtoken": "^9.0.0",
@@ -27,7 +27,7 @@
@@ -27,7 +27,7 @@
"iovalkey": "^0.4.0",
"iovalkey": "^0.4.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.262.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.262.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.106.2",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.0",
"pg": "^8.23.0"
"pg": "^8.23.0"
},
},
"optionalDependencies": {
"optionalDependencies": {
@@ -74,6 +74,22 @@ function createApp({ config, db, registry, pool, quotas, cache, runs, auth, keys
@@ -74,6 +74,22 @@ function createApp({ config, db, registry, pool, quotas, cache, runs, auth, keys
// The product home's browser files (the OpenVibe Frame, openvibe-shared/serve) under content-addressed
// The product home's browser files (the OpenVibe Frame, openvibe-shared/serve) under content-addressed
// /shared/* URLs from this repo's pinned openvibe-shared; each answer sets its own asset cache policy.
// /shared/* URLs from this repo's pinned openvibe-shared; each answer sets its own asset cache policy.
app.use('/shared', ovServe.handler());
app.use('/shared', ovServe.handler());
+ // Terms, Privacy and DMCA in this site's own words (openvibe-shared/legal, profile 'service'; 11-03: the footer's
+ // legal links answered 404 here). The facts must match the code: change both together.
+ const legal = require('openvibe-shared/legal');
+ app.get(legal.PATHS, legal.handler({
+ "host": "ai.openvibe.services",
+ "name": "AI.OpenVibe.Services",
+ "id": "ai",
+ "service": "ai",
+ "profile": "service",
+ "what": "One API for chat, generation, summaries, classification, extraction and embeddings across many models; every run says which model answered, why it was chosen and what it cost.",
+ "makes": [
+ "your runs: the model that answered, why it was chosen, its tokens and its cost",
+ "the API keys you make, and the provider keys you bring, which are stored encrypted"
+ ],
+ "ai": true
+ }));
// Inline images arrive as data URLs; the per-run input cap is enforced again in runs.create.
// Inline images arrive as data URLs; the per-run input cap is enforced again in runs.create.
app.use(['/api', '/v1'], express.json({ limit: Math.ceil(config.runs.maxInputBytes * 1.5), type: ['application/json', 'application/*+json'] }));
app.use(['/api', '/v1'], express.json({ limit: Math.ceil(config.runs.maxInputBytes * 1.5), type: ['application/json', 'application/*+json'] }));