dave: only search non-replies

I think this makes the most sense for most queries

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2025-04-09 21:48:50 -07:00
parent f1e359a5c3
commit 956c557851

View File

@@ -1,6 +1,6 @@
use async_openai::types::*; use async_openai::types::*;
use chrono::DateTime; use chrono::DateTime;
use nostrdb::{Ndb, NoteKey, Transaction}; use nostrdb::{Ndb, Note, NoteKey, Transaction};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::{json, Value}; use serde_json::{json, Value};
use std::collections::HashMap; use std::collections::HashMap;
@@ -291,10 +291,33 @@ pub struct QueryCall {
search: Option<String>, search: Option<String>,
} }
fn is_reply(note: Note) -> bool {
for tag in note.tags() {
if tag.count() < 4 {
continue;
}
let Some("e") = tag.get_str(0) else {
continue;
};
let Some(s) = tag.get_str(3) else {
continue;
};
if s == "root" || s == "reply" {
return true;
}
}
false
}
impl QueryCall { impl QueryCall {
pub fn to_filter(&self) -> nostrdb::Filter { pub fn to_filter(&self) -> nostrdb::Filter {
let mut filter = nostrdb::Filter::new() let mut filter = nostrdb::Filter::new()
.limit(self.limit()) .limit(self.limit())
.custom(|n| !is_reply(n))
.kinds([self.kind.unwrap_or(1)]); .kinds([self.kind.unwrap_or(1)]);
if let Some(search) = &self.search { if let Some(search) = &self.search {
@@ -432,7 +455,7 @@ fn query_tool() -> Tool {
name: "limit", name: "limit",
typ: ArgType::Number, typ: ArgType::Number,
required: true, required: true,
default: Some(Value::Number(serde_json::Number::from_i128(10).unwrap())), default: Some(Value::Number(serde_json::Number::from_i128(50).unwrap())),
description: "The number of results to return.", description: "The number of results to return.",
}, },