{ "info": { "name": "Scalable Graph ML Research API", "description": "REST API for testing PhD research methods from \"Scalable Methods for Knowledge Graph Reasoning and Generation\" (Andrej Janchevski, EPFL, 2025).", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "variable": [ { "key": "base_url", "value": "http://localhost:8000/api/v1" }, { "key": "multiprox_state", "value": "" } ], "item": [ { "name": "Health", "item": [ { "name": "GET / (API root)", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/", "host": ["{{base_url}}"], "path": [""] }, "description": "API root. Returns name, version, description, and full endpoint directory." } }, { "name": "GET /health", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/health", "host": ["{{base_url}}"], "path": ["health"] }, "description": "Server health check. Returns which model groups are loaded." } }, { "name": "GET /methods", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/methods", "host": ["{{base_url}}"], "path": ["methods"] }, "description": "List the 3 research methods." } }, { "name": "POST /debug/force-unlock", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{base_url}}/debug/force-unlock", "host": ["{{base_url}}"], "path": ["debug", "force-unlock"] }, "description": "Force-release a stuck inference lock. Only available in DEBUG mode." } } ] }, { "name": "COINs - Discovery", "item": [ { "name": "GET /coins/datasets", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/coins/datasets", "host": ["{{base_url}}"], "path": ["coins", "datasets"] }, "description": "List KG datasets with entity/relation counts." } }, { "name": "GET /coins/datasets/{id}/entities", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/coins/datasets/wordnet/entities?page=1&page_size=10&q=dog", "host": ["{{base_url}}"], "path": ["coins", "datasets", "wordnet", "entities"], "query": [ { "key": "page", "value": "1" }, { "key": "page_size", "value": "10" }, { "key": "q", "value": "dog", "description": "Substring search filter" } ] }, "description": "Paginated, searchable entity list." } }, { "name": "GET /coins/datasets/{id}/relations", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/coins/datasets/wordnet/relations?page=1&page_size=10&q=hyper", "host": ["{{base_url}}"], "path": ["coins", "datasets", "wordnet", "relations"], "query": [ { "key": "page", "value": "1" }, { "key": "page_size", "value": "10" }, { "key": "q", "value": "hyper", "description": "Substring search filter" } ] }, "description": "Paginated, searchable relation list." } }, { "name": "GET /coins/datasets/{id}/sample-triples", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/coins/datasets/wordnet/sample-triples?count=5&seed=2026-04-15", "host": ["{{base_url}}"], "path": ["coins", "datasets", "wordnet", "sample-triples"], "query": [ { "key": "count", "value": "5" }, { "key": "seed", "value": "2026-04-15", "description": "Optional. When provided, sampling is deterministic (same seed + count ⇒ same triples). Omit for random." } ] }, "description": "Random sample triples from the dataset. Each triple has head/relation/tail entries with { id, name, label }; `label` is a dataset-specific display-friendly form of `name` (NELL strips `concept:` prefixes, Freebase strips `/m/`, WordNet drops the POS suffix). Pass an optional `seed` (any string) for deterministic sampling — e.g. seed by today's ISO date for a day-stable 'fact of the day' widget." } }, { "name": "GET /coins/datasets/{id}/sample-query", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/coins/datasets/nell/sample-query?query_structure=2i&count=1&seed=2026-04-17", "host": ["{{base_url}}"], "path": ["coins", "datasets", "nell", "sample-query"], "query": [ { "key": "query_structure", "value": "2i", "description": "Required. One of: 1p, 2p, 3p, 2i, 3i, ip, pi." }, { "key": "count", "value": "1", "description": "Number of sample queries (max 10)." }, { "key": "seed", "value": "2026-04-17", "description": "Optional. Deterministic sampling when provided." } ] }, "description": "Sample a structurally valid KG query by walking the training graph. Returns anchors, relations, and a known target entity that form a real path/intersection. Keys in `anchors` and `relations` match the node/edge IDs from GET /coins/query-structures. Preferred over sample-triples for multi-hop and intersection query prefills." } }, { "name": "GET /coins/models", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/coins/models", "host": ["{{base_url}}"], "path": ["coins", "models"] }, "description": "List embedding algorithms with supported query structures." } }, { "name": "GET /coins/query-structures", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/coins/query-structures", "host": ["{{base_url}}"], "path": ["coins", "query-structures"] }, "description": "Query structure graph templates for frontend rendering." } } ] }, { "name": "COINs - Inference", "item": [ { "name": "POST /coins/predict (1p - single hop)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"algorithm\": \"rotate\",\n \"query_structure\": \"1p\",\n \"anchors\": {\"a\": 11754},\n \"variables\": {},\n \"relations\": {\"r1\": 3},\n \"top_k\": 10\n}" }, "url": { "raw": "{{base_url}}/coins/predict", "host": ["{{base_url}}"], "path": ["coins", "predict"] }, "description": "Single hop link prediction." } }, { "name": "POST /coins/predict (2i - intersection)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"algorithm\": \"q2b\",\n \"query_structure\": \"2i\",\n \"anchors\": {\"a1\": 0, \"a2\": 6744},\n \"variables\": {},\n \"relations\": {\"r1\": 3, \"r2\": 4},\n \"top_k\": 10\n}" }, "url": { "raw": "{{base_url}}/coins/predict", "host": ["{{base_url}}"], "path": ["coins", "predict"] }, "description": "Two-way intersection query answering." } }, { "name": "POST /coins/predict (ip - intersection then projection)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"algorithm\": \"q2b\",\n \"query_structure\": \"ip\",\n \"anchors\": {\"a1\": 17274, \"a2\": 20065},\n \"variables\": {},\n \"relations\": {\"r1\": 3, \"r2\": 4, \"r3\": 1},\n \"top_k\": 10\n}" }, "url": { "raw": "{{base_url}}/coins/predict", "host": ["{{base_url}}"], "path": ["coins", "predict"] }, "description": "Intersection then projection query answering." } }, { "name": "POST /coins/predict (2p - variable unspecified)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"algorithm\": \"q2b\",\n \"query_structure\": \"2p\",\n \"anchors\": {\"a\": 0},\n \"variables\": {},\n \"relations\": {\"r1\": 3, \"r2\": 1},\n \"top_k\": 10\n}" }, "url": { "raw": "{{base_url}}/coins/predict", "host": ["{{base_url}}"], "path": ["coins", "predict"] }, "description": "Two-hop chain; intermediate variable sampled automatically." } }, { "name": "POST /coins/predict (2p - variable specified)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"algorithm\": \"q2b\",\n \"query_structure\": \"2p\",\n \"anchors\": {\"a\": 0},\n \"variables\": {\"v1\": 39522},\n \"relations\": {\"r1\": 3, \"r2\": 1},\n \"top_k\": 10\n}" }, "url": { "raw": "{{base_url}}/coins/predict", "host": ["{{base_url}}"], "path": ["coins", "predict"] }, "description": "Two-hop chain; intermediate variable pinned to entity 5432." } }, { "name": "POST /coins/predict (pi - projection then intersection)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"algorithm\": \"q2b\",\n \"query_structure\": \"pi\",\n \"anchors\": {\"a1\": 0, \"a2\": 32953},\n \"variables\": {},\n \"relations\": {\"r1\": 3, \"r2\": 3, \"r3\": 1},\n \"top_k\": 10\n}" }, "url": { "raw": "{{base_url}}/coins/predict", "host": ["{{base_url}}"], "path": ["coins", "predict"] }, "description": "Projection then intersection query answering." } }, { "name": "POST /coins/predict (3i - three-way intersection)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"algorithm\": \"q2b\",\n \"query_structure\": \"3i\",\n \"anchors\": {\"a1\": 0, \"a2\": 6744, \"a3\": 24892},\n \"variables\": {},\n \"relations\": {\"r1\": 3, \"r2\": 4, \"r3\": 1},\n \"top_k\": 10\n}" }, "url": { "raw": "{{base_url}}/coins/predict", "host": ["{{base_url}}"], "path": ["coins", "predict"] }, "description": "Three-way intersection query answering." } }, { "name": "POST /coins/predict (3p - three hop)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"algorithm\": \"q2b\",\n \"query_structure\": \"3p\",\n \"anchors\": {\"a\": 0},\n \"variables\": {},\n \"relations\": {\"r1\": 3, \"r2\": 1, \"r3\": 3},\n \"top_k\": 10\n}" }, "url": { "raw": "{{base_url}}/coins/predict", "host": ["{{base_url}}"], "path": ["coins", "predict"] }, "description": "Three-hop chain query answering." } }, { "name": "POST /coins/predict (kbgat 1p)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"algorithm\": \"kbgat\",\n \"query_structure\": \"1p\",\n \"anchors\": {\"a\": 11754},\n \"variables\": {},\n \"relations\": {\"r1\": 3},\n \"top_k\": 10\n}" }, "url": { "raw": "{{base_url}}/coins/predict", "host": ["{{base_url}}"], "path": ["coins", "predict"] }, "description": "Single hop link prediction with KBGAT." } } ] }, { "name": "Graph Generation - Discovery", "item": [ { "name": "GET /graph-generation/datasets", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/graph-generation/datasets", "host": ["{{base_url}}"], "path": ["graph-generation", "datasets"] }, "description": "List graph generation datasets (QM9, Community20)." } }, { "name": "GET /graph-generation/sampling-modes", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/graph-generation/sampling-modes", "host": ["{{base_url}}"], "path": ["graph-generation", "sampling-modes"] }, "description": "List sampling strategies (standard, multiprox)." } } ] }, { "name": "Graph Generation - Inference", "item": [ { "name": "POST /graph-generation/generate (standard, QM9, discrete)", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"qm9\",\n \"model_type\": \"discrete\",\n \"sampling_mode\": \"standard\",\n \"num_nodes\": null,\n \"diffusion_steps\": 500,\n \"chain_frames\": 30\n}" }, "url": { "raw": "{{base_url}}/graph-generation/generate", "host": ["{{base_url}}"], "path": ["graph-generation", "generate"] }, "description": "Standard denoising on QM9 molecules (discrete model). Returns final PNG image + chain GIF." } }, { "name": "POST /graph-generation/generate (standard, QM9, continuous)", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"qm9\",\n \"model_type\": \"continuous\",\n \"sampling_mode\": \"standard\",\n \"num_nodes\": null,\n \"diffusion_steps\": 500,\n \"chain_frames\": 30\n}" }, "url": { "raw": "{{base_url}}/graph-generation/generate", "host": ["{{base_url}}"], "path": ["graph-generation", "generate"] }, "description": "Standard denoising on QM9 molecules (continuous/lifted model). Returns final PNG image + chain GIF." } }, { "name": "POST /graph-generation/generate (standard, comm20, discrete)", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"comm20\",\n \"model_type\": \"discrete\",\n \"sampling_mode\": \"standard\",\n \"num_nodes\": null,\n \"diffusion_steps\": 500,\n \"chain_frames\": 30\n}" }, "url": { "raw": "{{base_url}}/graph-generation/generate", "host": ["{{base_url}}"], "path": ["graph-generation", "generate"] }, "description": "Standard denoising on Community20 graphs (discrete model). Returns final PNG image + chain GIF." } }, { "name": "POST /graph-generation/generate (standard, comm20, continuous)", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"comm20\",\n \"model_type\": \"continuous\",\n \"sampling_mode\": \"standard\",\n \"num_nodes\": null,\n \"diffusion_steps\": 500,\n \"chain_frames\": 30\n}" }, "url": { "raw": "{{base_url}}/graph-generation/generate", "host": ["{{base_url}}"], "path": ["graph-generation", "generate"] }, "description": "Standard denoising on Community20 graphs (continuous/lifted model). Returns final PNG image + chain GIF." } }, { "name": "POST /graph-generation/generate (multiprox init, QM9, discrete)", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": ["// Extract state from the SSE result event and store as collection variable", "var body = pm.response.text();", "var lines = body.split('\\n');", "for (var i = 0; i < lines.length; i++) {", " if (lines[i].trim() === 'event: result' && i + 1 < lines.length) {", " var dataLine = lines[i + 1].replace(/^data: /, '');", " try {", " var result = JSON.parse(dataLine);", " if (result.state) {", " pm.collectionVariables.set('multiprox_state', result.state);", " console.log('State saved to {{multiprox_state}} (' + result.state.length + ' chars)');", " }", " } catch (e) { console.log('Failed to parse result event: ' + e); }", " break;", " }", "}"] } } ], "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"qm9\",\n \"model_type\": \"discrete\",\n \"sampling_mode\": \"multiprox\",\n \"num_nodes\": null,\n \"diffusion_steps\": 500,\n \"multiprox_params\": {\n \"n\": 10,\n \"m\": 100,\n \"t\": 0.5,\n \"t_prime\": 0.004,\n \"gibbs_chain_freq\": 10\n }\n}" }, "url": { "raw": "{{base_url}}/graph-generation/generate", "host": ["{{base_url}}"], "path": ["graph-generation", "generate"] }, "description": "MultiProx Gibbs init on QM9 (discrete). Best params from thesis Table 4.3.1: t=50%, t'=0.4% of T. Returns step 0 image + state blob. State is auto-saved to {{multiprox_state}}." } }, { "name": "POST /graph-generation/generate (multiprox init, QM9, continuous)", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": ["var body = pm.response.text();", "var lines = body.split('\\n');", "for (var i = 0; i < lines.length; i++) {", " if (lines[i].trim() === 'event: result' && i + 1 < lines.length) {", " var dataLine = lines[i + 1].replace(/^data: /, '');", " try {", " var result = JSON.parse(dataLine);", " if (result.state) { pm.collectionVariables.set('multiprox_state', result.state); }", " } catch (e) {}", " break;", " }", "}"] } } ], "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"qm9\",\n \"model_type\": \"continuous\",\n \"sampling_mode\": \"multiprox\",\n \"num_nodes\": null,\n \"diffusion_steps\": 500,\n \"multiprox_params\": {\n \"n\": 10,\n \"m\": 100,\n \"t\": 0.5,\n \"t_prime\": 0.004,\n \"gibbs_chain_freq\": 10\n }\n}" }, "url": { "raw": "{{base_url}}/graph-generation/generate", "host": ["{{base_url}}"], "path": ["graph-generation", "generate"] }, "description": "MultiProx Gibbs init on QM9 (continuous/lifted). Best params from thesis Table 4.3.1: t=50%, t'=0.4% of T. Returns step 0 image + state blob. State is auto-saved to {{multiprox_state}}." } }, { "name": "POST /graph-generation/generate (multiprox init, comm20, discrete)", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": ["var body = pm.response.text();", "var lines = body.split('\\n');", "for (var i = 0; i < lines.length; i++) {", " if (lines[i].trim() === 'event: result' && i + 1 < lines.length) {", " var dataLine = lines[i + 1].replace(/^data: /, '');", " try {", " var result = JSON.parse(dataLine);", " if (result.state) { pm.collectionVariables.set('multiprox_state', result.state); }", " } catch (e) {}", " break;", " }", "}"] } } ], "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"comm20\",\n \"model_type\": \"discrete\",\n \"sampling_mode\": \"multiprox\",\n \"num_nodes\": null,\n \"diffusion_steps\": 500,\n \"multiprox_params\": {\n \"n\": 10,\n \"m\": 100,\n \"t\": 0.4,\n \"t_prime\": 0.1,\n \"gibbs_chain_freq\": 10\n }\n}" }, "url": { "raw": "{{base_url}}/graph-generation/generate", "host": ["{{base_url}}"], "path": ["graph-generation", "generate"] }, "description": "MultiProx Gibbs init on Community20 (discrete). Best params from thesis Table C.2.1: t=40%, t'=10% of T. Returns step 0 image + state blob. State is auto-saved to {{multiprox_state}}." } }, { "name": "POST /graph-generation/generate (multiprox init, comm20, continuous)", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": ["var body = pm.response.text();", "var lines = body.split('\\n');", "for (var i = 0; i < lines.length; i++) {", " if (lines[i].trim() === 'event: result' && i + 1 < lines.length) {", " var dataLine = lines[i + 1].replace(/^data: /, '');", " try {", " var result = JSON.parse(dataLine);", " if (result.state) { pm.collectionVariables.set('multiprox_state', result.state); }", " } catch (e) {}", " break;", " }", "}"] } } ], "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"comm20\",\n \"model_type\": \"continuous\",\n \"sampling_mode\": \"multiprox\",\n \"num_nodes\": null,\n \"diffusion_steps\": 500,\n \"multiprox_params\": {\n \"n\": 10,\n \"m\": 100,\n \"t\": 0.4,\n \"t_prime\": 0.1,\n \"gibbs_chain_freq\": 10\n }\n}" }, "url": { "raw": "{{base_url}}/graph-generation/generate", "host": ["{{base_url}}"], "path": ["graph-generation", "generate"] }, "description": "MultiProx Gibbs init on Community20 (continuous/lifted). Best params from thesis Table C.2.1: t=40%, t'=10% of T. Returns step 0 image + state blob. State is auto-saved to {{multiprox_state}}." } }, { "name": "POST /graph-generation/continue", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": ["// Update state for chaining multiple continue calls", "var body = pm.response.text();", "var lines = body.split('\\n');", "for (var i = 0; i < lines.length; i++) {", " if (lines[i].trim() === 'event: result' && i + 1 < lines.length) {", " var dataLine = lines[i + 1].replace(/^data: /, '');", " try {", " var result = JSON.parse(dataLine);", " if (result.state) {", " pm.collectionVariables.set('multiprox_state', result.state);", " console.log('State updated (done=' + result.done + ', step=' + result.step + ')');", " }", " } catch (e) {}", " break;", " }", "}"] } } ], "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"state\": \"{{multiprox_state}}\"\n}" }, "url": { "raw": "{{base_url}}/graph-generation/continue", "host": ["{{base_url}}"], "path": ["graph-generation", "continue"] }, "description": "Advance MultiProx chain by gibbs_chain_freq inner steps. Uses {{multiprox_state}} from the last init/continue call. Can be fired repeatedly to chain steps." } } ] }, { "name": "KG Anomaly - Discovery", "item": [ { "name": "GET /kg-anomaly/datasets", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/kg-anomaly/datasets", "host": ["{{base_url}}"], "path": ["kg-anomaly", "datasets"] }, "description": "List KG anomaly correction datasets." } }, { "name": "GET /kg-anomaly/datasets/{id}/sample-subgraphs", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/kg-anomaly/datasets/wordnet/sample-subgraphs?count=3", "host": ["{{base_url}}"], "path": ["kg-anomaly", "datasets", "wordnet", "sample-subgraphs"], "query": [ { "key": "count", "value": "3" } ] }, "description": "Pre-computed example subgraphs for correction (clean)." } }, { "name": "GET /kg-anomaly/datasets/{id}/sample-subgraphs (noised, correct)", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/kg-anomaly/datasets/wordnet/sample-subgraphs?count=3&noise_level=0.4&task=correct&seed=42", "host": ["{{base_url}}"], "path": ["kg-anomaly", "datasets", "wordnet", "sample-subgraphs"], "query": [ { "key": "count", "value": "3" }, { "key": "noise_level", "value": "0.4" }, { "key": "task", "value": "correct" }, { "key": "seed", "value": "42" } ] }, "description": "Pre-noised example subgraphs for the 'correct' task (only inpaint-mask region is corrupted)." } }, { "name": "GET /kg-anomaly/datasets/{id}/sample-subgraphs (noised, generate)", "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/kg-anomaly/datasets/wordnet/sample-subgraphs?count=3&noise_level=0.4&task=generate&seed=43", "host": ["{{base_url}}"], "path": ["kg-anomaly", "datasets", "wordnet", "sample-subgraphs"], "query": [ { "key": "count", "value": "3" }, { "key": "noise_level", "value": "0.4" }, { "key": "task", "value": "generate" }, { "key": "seed", "value": "43" } ] }, "description": "Pre-noised example subgraphs for the 'generate' task (all edges corrupted)." } } ] }, { "name": "KG Anomaly - Inference", "item": [ { "name": "POST /kg-anomaly/correct (standard, correct task)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"sampling_mode\": \"standard\",\n \"task\": \"correct\",\n \"subgraph\": {\n \"nodes\": [\n {\"entity_id\": 28155, \"type_id\": 1},\n {\"entity_id\": 29348, \"type_id\": 4},\n {\"entity_id\": 29358, \"type_id\": 1},\n {\"entity_id\": 36247, \"type_id\": 1},\n {\"entity_id\": 36248, \"type_id\": 4},\n {\"entity_id\": 36855, \"type_id\": 1},\n {\"entity_id\": 36858, \"type_id\": 4},\n {\"entity_id\": 36860, \"type_id\": 4},\n {\"entity_id\": 36881, \"type_id\": 1},\n {\"entity_id\": 39993, \"type_id\": 1}\n ],\n \"edges\": [\n {\"source_idx\": 1, \"target_idx\": 2, \"relation_id\": 1},\n {\"source_idx\": 1, \"target_idx\": 3, \"relation_id\": 1},\n {\"source_idx\": 2, \"target_idx\": 1, \"relation_id\": 1},\n {\"source_idx\": 2, \"target_idx\": 4, \"relation_id\": 1},\n {\"source_idx\": 3, \"target_idx\": 1, \"relation_id\": 1},\n {\"source_idx\": 3, \"target_idx\": 4, \"relation_id\": 1},\n {\"source_idx\": 4, \"target_idx\": 2, \"relation_id\": 1},\n {\"source_idx\": 4, \"target_idx\": 3, \"relation_id\": 1},\n {\"source_idx\": 5, \"target_idx\": 6, \"relation_id\": 2},\n {\"source_idx\": 5, \"target_idx\": 7, \"relation_id\": 1},\n {\"source_idx\": 5, \"target_idx\": 8, \"relation_id\": 5},\n {\"source_idx\": 5, \"target_idx\": 9, \"relation_id\": 4},\n {\"source_idx\": 6, \"target_idx\": 4, \"relation_id\": 3},\n {\"source_idx\": 6, \"target_idx\": 5, \"relation_id\": 1},\n {\"source_idx\": 6, \"target_idx\": 8, \"relation_id\": 1},\n {\"source_idx\": 7, \"target_idx\": 5, \"relation_id\": 10},\n {\"source_idx\": 7, \"target_idx\": 6, \"relation_id\": 10},\n {\"source_idx\": 8, \"target_idx\": 5, \"relation_id\": 1},\n {\"source_idx\": 8, \"target_idx\": 6, \"relation_id\": 1},\n {\"source_idx\": 8, \"target_idx\": 7, \"relation_id\": 1},\n {\"source_idx\": 8, \"target_idx\": 9, \"relation_id\": 1},\n {\"source_idx\": 9, \"target_idx\": 0, \"relation_id\": 3},\n {\"source_idx\": 9, \"target_idx\": 6, \"relation_id\": 10},\n {\"source_idx\": 9, \"target_idx\": 7, \"relation_id\": 3},\n {\"source_idx\": 9, \"target_idx\": 8, \"relation_id\": 10}\n ]\n },\n \"diffusion_steps\": 500,\n \"chain_frames\": 20\n}" }, "url": { "raw": "{{base_url}}/kg-anomaly/correct", "host": ["{{base_url}}"], "path": ["kg-anomaly", "correct"] }, "description": "Standard correction with masking (fixed edges kept, masked edges corrected)." } }, { "name": "POST /kg-anomaly/correct (standard, generate task)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"sampling_mode\": \"standard\",\n \"task\": \"generate\",\n \"subgraph\": {\n \"nodes\": [\n {\"entity_id\": 28155, \"type_id\": 1},\n {\"entity_id\": 29348, \"type_id\": 4},\n {\"entity_id\": 29358, \"type_id\": 1},\n {\"entity_id\": 36247, \"type_id\": 1},\n {\"entity_id\": 36248, \"type_id\": 4},\n {\"entity_id\": 36855, \"type_id\": 1},\n {\"entity_id\": 36858, \"type_id\": 4},\n {\"entity_id\": 36860, \"type_id\": 4},\n {\"entity_id\": 36881, \"type_id\": 1},\n {\"entity_id\": 39993, \"type_id\": 1}\n ],\n \"edges\": [\n {\"source_idx\": 0, \"target_idx\": 2, \"relation_id\": 10},\n {\"source_idx\": 0, \"target_idx\": 4, \"relation_id\": 2},\n {\"source_idx\": 1, \"target_idx\": 0, \"relation_id\": 0},\n {\"source_idx\": 1, \"target_idx\": 2, \"relation_id\": 2},\n {\"source_idx\": 1, \"target_idx\": 3, \"relation_id\": 1},\n {\"source_idx\": 1, \"target_idx\": 5, \"relation_id\": 9},\n {\"source_idx\": 1, \"target_idx\": 7, \"relation_id\": 7},\n {\"source_idx\": 1, \"target_idx\": 8, \"relation_id\": 3},\n {\"source_idx\": 2, \"target_idx\": 0, \"relation_id\": 7},\n {\"source_idx\": 2, \"target_idx\": 1, \"relation_id\": 1},\n {\"source_idx\": 2, \"target_idx\": 4, \"relation_id\": 5},\n {\"source_idx\": 2, \"target_idx\": 8, \"relation_id\": 10},\n {\"source_idx\": 2, \"target_idx\": 9, \"relation_id\": 2},\n {\"source_idx\": 3, \"target_idx\": 1, \"relation_id\": 1},\n {\"source_idx\": 3, \"target_idx\": 4, \"relation_id\": 1},\n {\"source_idx\": 3, \"target_idx\": 5, \"relation_id\": 7},\n {\"source_idx\": 3, \"target_idx\": 6, \"relation_id\": 6},\n {\"source_idx\": 3, \"target_idx\": 7, \"relation_id\": 0},\n {\"source_idx\": 4, \"target_idx\": 2, \"relation_id\": 1},\n {\"source_idx\": 4, \"target_idx\": 3, \"relation_id\": 6},\n {\"source_idx\": 4, \"target_idx\": 6, \"relation_id\": 7},\n {\"source_idx\": 4, \"target_idx\": 7, \"relation_id\": 7},\n {\"source_idx\": 5, \"target_idx\": 4, \"relation_id\": 2},\n {\"source_idx\": 5, \"target_idx\": 6, \"relation_id\": 2},\n {\"source_idx\": 5, \"target_idx\": 7, \"relation_id\": 6},\n {\"source_idx\": 5, \"target_idx\": 8, \"relation_id\": 1},\n {\"source_idx\": 5, \"target_idx\": 9, \"relation_id\": 1},\n {\"source_idx\": 6, \"target_idx\": 0, \"relation_id\": 5},\n {\"source_idx\": 6, \"target_idx\": 3, \"relation_id\": 7},\n {\"source_idx\": 6, \"target_idx\": 4, \"relation_id\": 3},\n {\"source_idx\": 6, \"target_idx\": 5, \"relation_id\": 1},\n {\"source_idx\": 6, \"target_idx\": 7, \"relation_id\": 0},\n {\"source_idx\": 6, \"target_idx\": 8, \"relation_id\": 1},\n {\"source_idx\": 6, \"target_idx\": 9, \"relation_id\": 4},\n {\"source_idx\": 7, \"target_idx\": 2, \"relation_id\": 10},\n {\"source_idx\": 7, \"target_idx\": 5, \"relation_id\": 5},\n {\"source_idx\": 7, \"target_idx\": 6, \"relation_id\": 5},\n {\"source_idx\": 8, \"target_idx\": 0, \"relation_id\": 0},\n {\"source_idx\": 8, \"target_idx\": 2, \"relation_id\": 6},\n {\"source_idx\": 8, \"target_idx\": 4, \"relation_id\": 10},\n {\"source_idx\": 8, \"target_idx\": 5, \"relation_id\": 1},\n {\"source_idx\": 8, \"target_idx\": 6, \"relation_id\": 1},\n {\"source_idx\": 8, \"target_idx\": 7, \"relation_id\": 1},\n {\"source_idx\": 8, \"target_idx\": 9, \"relation_id\": 0},\n {\"source_idx\": 9, \"target_idx\": 0, \"relation_id\": 3},\n {\"source_idx\": 9, \"target_idx\": 1, \"relation_id\": 8},\n {\"source_idx\": 9, \"target_idx\": 3, \"relation_id\": 5},\n {\"source_idx\": 9, \"target_idx\": 7, \"relation_id\": 5},\n {\"source_idx\": 9, \"target_idx\": 8, \"relation_id\": 1}\n ]\n },\n \"diffusion_steps\": 500,\n \"chain_frames\": 20\n}" }, "url": { "raw": "{{base_url}}/kg-anomaly/correct", "host": ["{{base_url}}"], "path": ["kg-anomaly", "correct"] }, "description": "Generate all edges from scratch (no masking)." } }, { "name": "POST /kg-anomaly/correct (multiprox init)", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": ["var body = pm.response.text();", "var lines = body.split('\\n');", "for (var i = 0; i < lines.length; i++) {", " if (lines[i].trim() === 'event: result' && i + 1 < lines.length) {", " var dataLine = lines[i + 1].replace(/^data: /, '');", " try {", " var result = JSON.parse(dataLine);", " if (result.state) { pm.collectionVariables.set('multiprox_state', result.state); }", " } catch (e) {}", " break;", " }", "}"] } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"dataset_id\": \"wordnet\",\n \"sampling_mode\": \"multiprox\",\n \"task\": \"correct\",\n \"subgraph\": {\n \"nodes\": [\n {\"entity_id\": 28155, \"type_id\": 1},\n {\"entity_id\": 29348, \"type_id\": 4},\n {\"entity_id\": 29358, \"type_id\": 1},\n {\"entity_id\": 36247, \"type_id\": 1},\n {\"entity_id\": 36248, \"type_id\": 4},\n {\"entity_id\": 36855, \"type_id\": 1},\n {\"entity_id\": 36858, \"type_id\": 4},\n {\"entity_id\": 36860, \"type_id\": 4},\n {\"entity_id\": 36881, \"type_id\": 1},\n {\"entity_id\": 39993, \"type_id\": 1}\n ],\n \"edges\": [\n {\"source_idx\": 1, \"target_idx\": 2, \"relation_id\": 1},\n {\"source_idx\": 1, \"target_idx\": 3, \"relation_id\": 1},\n {\"source_idx\": 2, \"target_idx\": 1, \"relation_id\": 1},\n {\"source_idx\": 2, \"target_idx\": 4, \"relation_id\": 1},\n {\"source_idx\": 3, \"target_idx\": 1, \"relation_id\": 1},\n {\"source_idx\": 3, \"target_idx\": 4, \"relation_id\": 1},\n {\"source_idx\": 4, \"target_idx\": 2, \"relation_id\": 1},\n {\"source_idx\": 4, \"target_idx\": 3, \"relation_id\": 1},\n {\"source_idx\": 5, \"target_idx\": 6, \"relation_id\": 2},\n {\"source_idx\": 5, \"target_idx\": 7, \"relation_id\": 1},\n {\"source_idx\": 5, \"target_idx\": 8, \"relation_id\": 5},\n {\"source_idx\": 5, \"target_idx\": 9, \"relation_id\": 4},\n {\"source_idx\": 6, \"target_idx\": 4, \"relation_id\": 3},\n {\"source_idx\": 6, \"target_idx\": 5, \"relation_id\": 1},\n {\"source_idx\": 6, \"target_idx\": 8, \"relation_id\": 1},\n {\"source_idx\": 7, \"target_idx\": 5, \"relation_id\": 10},\n {\"source_idx\": 7, \"target_idx\": 6, \"relation_id\": 10},\n {\"source_idx\": 8, \"target_idx\": 5, \"relation_id\": 1},\n {\"source_idx\": 8, \"target_idx\": 6, \"relation_id\": 1},\n {\"source_idx\": 8, \"target_idx\": 7, \"relation_id\": 1},\n {\"source_idx\": 8, \"target_idx\": 9, \"relation_id\": 1},\n {\"source_idx\": 9, \"target_idx\": 0, \"relation_id\": 3},\n {\"source_idx\": 9, \"target_idx\": 6, \"relation_id\": 10},\n {\"source_idx\": 9, \"target_idx\": 7, \"relation_id\": 3},\n {\"source_idx\": 9, \"target_idx\": 8, \"relation_id\": 10}\n ]\n },\n \"multiprox_params\": {\n \"n\": 10,\n \"m\": 100,\n \"t\": 0.4,\n \"t_prime\": 0.1,\n \"gibbs_chain_freq\": 10\n }\n}" }, "url": { "raw": "{{base_url}}/kg-anomaly/correct", "host": ["{{base_url}}"], "path": ["kg-anomaly", "correct"] }, "description": "MultiProx Gibbs init on wordnet correction. SSE stream; the result event's state blob is auto-saved to {{multiprox_state}}." } }, { "name": "POST /kg-anomaly/continue", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": ["var body = pm.response.text();", "var lines = body.split('\\n');", "for (var i = 0; i < lines.length; i++) {", " if (lines[i].trim() === 'event: result' && i + 1 < lines.length) {", " var dataLine = lines[i + 1].replace(/^data: /, '');", " try {", " var result = JSON.parse(dataLine);", " if (result.state) {", " pm.collectionVariables.set('multiprox_state', result.state);", " console.log('State updated (done=' + result.done + ', step=' + result.step + ')');", " }", " } catch (e) {}", " break;", " }", "}"] } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"state\": \"{{multiprox_state}}\"\n}" }, "url": { "raw": "{{base_url}}/kg-anomaly/continue", "host": ["{{base_url}}"], "path": ["kg-anomaly", "continue"] }, "description": "Advance MultiProx correction by one step. Uses {{multiprox_state}}; can be chained repeatedly." } } ] } ] }