curl --request POST \
--url http://127.0.0.1:4319/memory/entities/resolve \
--header 'Content-Type: application/json' \
--data '
{
"dryRun": false
}
'import requests
url = "http://127.0.0.1:4319/memory/entities/resolve"
payload = { "dryRun": False }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({dryRun: false})
};
fetch('http://127.0.0.1:4319/memory/entities/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://127.0.0.1:4319/memory/entities/resolve"
payload := strings.NewReader("{\n \"dryRun\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4319",
CURLOPT_URL => "http://127.0.0.1:4319/memory/entities/resolve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'dryRun' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("http://127.0.0.1:4319/memory/entities/resolve")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"dryRun\": false\n}"
response = http.request(request)
puts response.read_bodyHttpResponse<String> response = Unirest.post("http://127.0.0.1:4319/memory/entities/resolve")
.header("Content-Type", "application/json")
.body("{\n \"dryRun\": false\n}")
.asString();using RestSharp;
var options = new RestClientOptions("http://127.0.0.1:4319/memory/entities/resolve");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddJsonBody("{\n \"dryRun\": false\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
{
"examined": 123,
"pairs": 123,
"merged": 123,
"queued": 123,
"deferred": 123,
"skipped": 123
}Find and fold duplicate entity spellings
One resolution pass over the entity table. Spellings that are identical apart from case and punctuation are folded without asking; uncertain pairs are written to the conflicts queue for review. Idempotent and safe to re-run.
The queue is capped so entity folds cannot bury memory conflicts. Questions that did
not fit are reported as deferred rather than dropped silently, and a later pass
picks them up as answers come in.
curl --request POST \
--url http://127.0.0.1:4319/memory/entities/resolve \
--header 'Content-Type: application/json' \
--data '
{
"dryRun": false
}
'import requests
url = "http://127.0.0.1:4319/memory/entities/resolve"
payload = { "dryRun": False }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({dryRun: false})
};
fetch('http://127.0.0.1:4319/memory/entities/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://127.0.0.1:4319/memory/entities/resolve"
payload := strings.NewReader("{\n \"dryRun\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4319",
CURLOPT_URL => "http://127.0.0.1:4319/memory/entities/resolve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'dryRun' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("http://127.0.0.1:4319/memory/entities/resolve")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"dryRun\": false\n}"
response = http.request(request)
puts response.read_bodyHttpResponse<String> response = Unirest.post("http://127.0.0.1:4319/memory/entities/resolve")
.header("Content-Type", "application/json")
.body("{\n \"dryRun\": false\n}")
.asString();using RestSharp;
var options = new RestClientOptions("http://127.0.0.1:4319/memory/entities/resolve");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddJsonBody("{\n \"dryRun\": false\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
{
"examined": 123,
"pairs": 123,
"merged": 123,
"queued": 123,
"deferred": 123,
"skipped": 123
}Headers
The owner this request acts for. Applies to every owner-scoped endpoint, reads as well
as writes. Omit it and the daemon's own default owner answers (see GET /health), which
is what a single-owner install has always used. A value that is not a uuid is refused
with 400 rather than coerced.
Body
Report the plan without changing anything.
Response
What the pass did.
What one resolution pass did.
Entities considered.
Pairs that survived bucketing and were judged.
Folds applied without asking.
Uncertain folds written to the conflicts queue.
Uncertain folds not written because the queue is already full. Reported rather than dropped silently, so "nothing queued" never hides "there was more to ask about". A later pass picks them up.
Pairs already merged, queued, or settled as distinct.