|
|
@ -724,11 +724,16 @@ fn test_vec_index_insertion() {
|
|
|
|
}",
|
|
|
|
}",
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.unwrap();
|
|
|
|
.unwrap();
|
|
|
|
let res = db.run_default("?[k] := *a:vec{layer: 0, fr_k, to_k}, k = fr_k or k = to_k").unwrap();
|
|
|
|
let res = db
|
|
|
|
|
|
|
|
.run_default("?[k] := *a:vec{layer: 0, fr_k, to_k}, k = fr_k or k = to_k")
|
|
|
|
|
|
|
|
.unwrap();
|
|
|
|
assert_eq!(res.rows.len(), 1);
|
|
|
|
assert_eq!(res.rows.len(), 1);
|
|
|
|
println!("update!");
|
|
|
|
println!("update!");
|
|
|
|
db.run_default(r#"?[k, m] <- [["a", false]] :update a {}"#).unwrap();
|
|
|
|
db.run_default(r#"?[k, m] <- [["a", false]] :update a {}"#)
|
|
|
|
let res = db.run_default("?[k] := *a:vec{layer: 0, fr_k, to_k}, k = fr_k or k = to_k").unwrap();
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let res = db
|
|
|
|
|
|
|
|
.run_default("?[k] := *a:vec{layer: 0, fr_k, to_k}, k = fr_k or k = to_k")
|
|
|
|
|
|
|
|
.unwrap();
|
|
|
|
assert_eq!(res.rows.len(), 0);
|
|
|
|
assert_eq!(res.rows.len(), 0);
|
|
|
|
println!("{}", res.into_json());
|
|
|
|
println!("{}", res.into_json());
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -908,7 +913,9 @@ fn test_lsh_indexing3() {
|
|
|
|
#[test]
|
|
|
|
#[test]
|
|
|
|
fn filtering() {
|
|
|
|
fn filtering() {
|
|
|
|
let db = DbInstance::default();
|
|
|
|
let db = DbInstance::default();
|
|
|
|
let res = db.run_default(r"
|
|
|
|
let res = db
|
|
|
|
|
|
|
|
.run_default(
|
|
|
|
|
|
|
|
r"
|
|
|
|
{
|
|
|
|
{
|
|
|
|
?[x, y] <- [[1, 2]]
|
|
|
|
?[x, y] <- [[1, 2]]
|
|
|
|
:create _rel {x => y}
|
|
|
|
:create _rel {x => y}
|
|
|
@ -917,7 +924,8 @@ fn filtering() {
|
|
|
|
{
|
|
|
|
{
|
|
|
|
?[x, y] := x = 1, *_rel{x, y: 3}, y = 2
|
|
|
|
?[x, y] := x = 1, *_rel{x, y: 3}, y = 2
|
|
|
|
}
|
|
|
|
}
|
|
|
|
")
|
|
|
|
",
|
|
|
|
|
|
|
|
)
|
|
|
|
.unwrap();
|
|
|
|
.unwrap();
|
|
|
|
assert_eq!(0, res.rows.len());
|
|
|
|
assert_eq!(0, res.rows.len());
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -937,8 +945,7 @@ fn test_lsh_indexing4() {
|
|
|
|
.unwrap();
|
|
|
|
.unwrap();
|
|
|
|
db.run_default("?[k, v] <- [['a', 'ewiygfspeoighjsfcfxzdfncalsdf']] :put a {k => v}")
|
|
|
|
db.run_default("?[k, v] <- [['a', 'ewiygfspeoighjsfcfxzdfncalsdf']] :put a {k => v}")
|
|
|
|
.unwrap();
|
|
|
|
.unwrap();
|
|
|
|
db.run_default("?[k] <- [['a']] :rm a {k}")
|
|
|
|
db.run_default("?[k] <- [['a']] :rm a {k}").unwrap();
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let res = db
|
|
|
|
let res = db
|
|
|
|
.run_default("?[k] := ~a:lsh{k | query: 'ewiygfspeoighjsfcfxzdfncalsdf', k: 1}")
|
|
|
|
.run_default("?[k] := ~a:lsh{k | query: 'ewiygfspeoighjsfcfxzdfncalsdf', k: 1}")
|
|
|
|
.unwrap();
|
|
|
|
.unwrap();
|
|
|
@ -946,7 +953,6 @@ fn test_lsh_indexing4() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
#[test]
|
|
|
|
fn test_lsh_indexing() {
|
|
|
|
fn test_lsh_indexing() {
|
|
|
|
let db = DbInstance::new("mem", "", "").unwrap();
|
|
|
|
let db = DbInstance::new("mem", "", "").unwrap();
|
|
|
@ -1457,3 +1463,59 @@ fn crashy_imperative() {
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.unwrap();
|
|
|
|
.unwrap();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
|
|
fn hnsw_index() {
|
|
|
|
|
|
|
|
let db = DbInstance::default();
|
|
|
|
|
|
|
|
db.run_default(
|
|
|
|
|
|
|
|
r#"
|
|
|
|
|
|
|
|
:create beliefs {
|
|
|
|
|
|
|
|
belief_id: Uuid,
|
|
|
|
|
|
|
|
character_id: Uuid,
|
|
|
|
|
|
|
|
belief: String,
|
|
|
|
|
|
|
|
last_accessed_at: Validity default [floor(now()), true],
|
|
|
|
|
|
|
|
=>
|
|
|
|
|
|
|
|
details: String default "",
|
|
|
|
|
|
|
|
parent_belief_id: Uuid? default null,
|
|
|
|
|
|
|
|
valence: Float default 0,
|
|
|
|
|
|
|
|
aspects: [(String, Float, String, String)] default [],
|
|
|
|
|
|
|
|
belief_embedding: <F32; 768>,
|
|
|
|
|
|
|
|
details_embedding: <F32; 768>,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
"#,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
db.run_default(
|
|
|
|
|
|
|
|
r#"
|
|
|
|
|
|
|
|
::hnsw create beliefs:embedding_space {
|
|
|
|
|
|
|
|
dim: 768,
|
|
|
|
|
|
|
|
m: 50,
|
|
|
|
|
|
|
|
dtype: F32,
|
|
|
|
|
|
|
|
fields: [belief_embedding, details_embedding],
|
|
|
|
|
|
|
|
distance: Cosine,
|
|
|
|
|
|
|
|
ef_construction: 20,
|
|
|
|
|
|
|
|
extend_candidates: false,
|
|
|
|
|
|
|
|
keep_pruned_connections: false,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
"#,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
db.run_default(r#"
|
|
|
|
|
|
|
|
?[belief_id, character_id, belief, belief_embedding, details_embedding] <- [[rand_uuid_v1(), rand_uuid_v1(), "test", rand_vec(768), rand_vec(768)]]
|
|
|
|
|
|
|
|
:put beliefs {}
|
|
|
|
|
|
|
|
"#).unwrap();
|
|
|
|
|
|
|
|
let res = db.run_default(r#"
|
|
|
|
|
|
|
|
?[belief, valence, dist, character_id, vector] := ~beliefs:embedding_space{ belief, valence, character_id |
|
|
|
|
|
|
|
|
query: rand_vec(768),
|
|
|
|
|
|
|
|
k: 100,
|
|
|
|
|
|
|
|
ef: 20,
|
|
|
|
|
|
|
|
radius: 1.0,
|
|
|
|
|
|
|
|
bind_distance: dist,
|
|
|
|
|
|
|
|
bind_vector: vector
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
:order -valence
|
|
|
|
|
|
|
|
:order dist
|
|
|
|
|
|
|
|
"#).unwrap();
|
|
|
|
|
|
|
|
println!("{}", res.into_json()["rows"][0][4]);
|
|
|
|
|
|
|
|
}
|
|
|
|