openvibers/openvibe.exchange Commits
Pin released model directory contracts (#210)
Changes
@@@ -16,7 +16,7 @@"helmet": "^8.1.0","iovalkey": "^0.4.0","multer": "^2.5.0",-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.403.0",++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.406.0","openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.7.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0","openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.206.0",@@@ -1268,9 +1268,9 @@}},"node_modules/openvibe-contracts": {-- "version": "0.403.0",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.403.0",-- "integrity": "sha512-1dek3RyBl+nho5nbm1YVqjVdHzhbIsS8kpz1HfHlbahvdOLpvHe8bl9zs73U4iKE6sspSjXy2c3HwW52pDVUAQ==",++ "version": "0.406.0",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.406.0",++ "integrity": "sha512-V/Tjss2UWvzI551bw3ACb/RqWg0lChxGITxfCVZ8qou2Docg0pBMvIjkeQoib56yq3r6UZGB6DGl+pA+qfjOiA==","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -25,7 +25,7 @@"helmet": "^8.1.0","iovalkey": "^0.4.0","multer": "^2.5.0",-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.403.0",++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.406.0","openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.7.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0","openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.206.0",@@@ -7,6 +7,7 @@const assert = require('assert');const { boot, check, done } = require('./helpers/boot');const { createFakeAi, downAi } = require('./helpers/ai');++const contracts = require('openvibe-contracts');(async () => {const ai = createFakeAi();@@@ -60,11 +61,17 @@ const { createFakeAi, downAi } = require('./helpers/ai');assert.ok(twin.text.includes('Gemini Old'));});await check('public directory JSON and model structured data match the catalog', async () => {++ const all = await t.get('/api/v1/models');++ assert.strictEqual(all.status, 200, all.text);++ const directory = contracts.validate('ai.model-directory-list@1', all.json());++ assert.strictEqual(directory.valid, true, JSON.stringify(directory.errors));const list = await t.get('/api/v1/models?q=deepseek');assert.strictEqual(list.status, 200, list.text);assert.ok(list.json().models.some(m => m.slug === 'deepseek/deepseek-chat'));const one = await t.get('/api/v1/models/deepseek/deepseek-chat');assert.strictEqual(one.status, 200, one.text);++ const entry = contracts.validate('ai.model-directory-entry@1', one.json().model);++ assert.strictEqual(entry.valid, true, JSON.stringify(entry.errors));assert.strictEqual(one.json().model.slug, 'deepseek/deepseek-chat');assert.strictEqual((await t.get('/api/v1/models/deepseek%2Fdeepseek-chat')).json().model.slug, 'deepseek/deepseek-chat');const liveOnly = await t.get('/api/v1/models/meta-llama/llama-3-8b-abliterated');
@@ -16,7 +16,7 @@
@@ -16,7 +16,7 @@
"helmet": "^8.1.0",
"helmet": "^8.1.0",
"iovalkey": "^0.4.0",
"iovalkey": "^0.4.0",
"multer": "^2.5.0",
"multer": "^2.5.0",
- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.403.0",
+ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.406.0",
"openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.7.0",
"openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.7.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.206.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.206.0",
@@ -1268,9 +1268,9 @@
@@ -1268,9 +1268,9 @@
}
}
},
},
"node_modules/openvibe-contracts": {
"node_modules/openvibe-contracts": {
- "version": "0.403.0",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.403.0",
- "integrity": "sha512-1dek3RyBl+nho5nbm1YVqjVdHzhbIsS8kpz1HfHlbahvdOLpvHe8bl9zs73U4iKE6sspSjXy2c3HwW52pDVUAQ==",
+ "version": "0.406.0",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.406.0",
+ "integrity": "sha512-V/Tjss2UWvzI551bw3ACb/RqWg0lChxGITxfCVZ8qou2Docg0pBMvIjkeQoib56yq3r6UZGB6DGl+pA+qfjOiA==",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -25,7 +25,7 @@
@@ -25,7 +25,7 @@
"helmet": "^8.1.0",
"helmet": "^8.1.0",
"iovalkey": "^0.4.0",
"iovalkey": "^0.4.0",
"multer": "^2.5.0",
"multer": "^2.5.0",
- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.403.0",
+ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.406.0",
"openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.7.0",
"openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.7.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.206.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.206.0",
@@ -7,6 +7,7 @@
@@ -7,6 +7,7 @@
const assert = require('assert');
const assert = require('assert');
const { boot, check, done } = require('./helpers/boot');
const { boot, check, done } = require('./helpers/boot');
const { createFakeAi, downAi } = require('./helpers/ai');
const { createFakeAi, downAi } = require('./helpers/ai');
+const contracts = require('openvibe-contracts');
(async () => {
(async () => {
const ai = createFakeAi();
const ai = createFakeAi();
@@ -60,11 +61,17 @@ const { createFakeAi, downAi } = require('./helpers/ai');
@@ -60,11 +61,17 @@ const { createFakeAi, downAi } = require('./helpers/ai');
assert.ok(twin.text.includes('Gemini Old'));
assert.ok(twin.text.includes('Gemini Old'));
});
});
await check('public directory JSON and model structured data match the catalog', async () => {
await check('public directory JSON and model structured data match the catalog', async () => {
+ const all = await t.get('/api/v1/models');
+ assert.strictEqual(all.status, 200, all.text);
+ const directory = contracts.validate('ai.model-directory-list@1', all.json());
+ assert.strictEqual(directory.valid, true, JSON.stringify(directory.errors));
const list = await t.get('/api/v1/models?q=deepseek');
const list = await t.get('/api/v1/models?q=deepseek');
assert.strictEqual(list.status, 200, list.text);
assert.strictEqual(list.status, 200, list.text);
assert.ok(list.json().models.some(m => m.slug === 'deepseek/deepseek-chat'));
assert.ok(list.json().models.some(m => m.slug === 'deepseek/deepseek-chat'));
const one = await t.get('/api/v1/models/deepseek/deepseek-chat');
const one = await t.get('/api/v1/models/deepseek/deepseek-chat');
assert.strictEqual(one.status, 200, one.text);
assert.strictEqual(one.status, 200, one.text);
+ const entry = contracts.validate('ai.model-directory-entry@1', one.json().model);
+ assert.strictEqual(entry.valid, true, JSON.stringify(entry.errors));
assert.strictEqual(one.json().model.slug, 'deepseek/deepseek-chat');
assert.strictEqual(one.json().model.slug, 'deepseek/deepseek-chat');
assert.strictEqual((await t.get('/api/v1/models/deepseek%2Fdeepseek-chat')).json().model.slug, 'deepseek/deepseek-chat');
assert.strictEqual((await t.get('/api/v1/models/deepseek%2Fdeepseek-chat')).json().model.slug, 'deepseek/deepseek-chat');
const liveOnly = await t.get('/api/v1/models/meta-llama/llama-3-8b-abliterated');
const liveOnly = await t.get('/api/v1/models/meta-llama/llama-3-8b-abliterated');