Agent: one turn path, tools and history in their own modules; SDK: one parser
This commit is contained in:
+17
-19
@@ -26,6 +26,14 @@ impl Message {
|
||||
}
|
||||
}
|
||||
|
||||
fn parse(line: &[u8]) -> Option<Message> {
|
||||
serde_json::from_slice::<Message>(line).ok()
|
||||
}
|
||||
|
||||
fn is_shutdown(message: &Message) -> bool {
|
||||
message.from == "broker" && message.kind() == "shutdown"
|
||||
}
|
||||
|
||||
/// Return this actor's ID from `SAUSAGE_ACTOR`, or an empty string if unset.
|
||||
pub fn me() -> String {
|
||||
std::env::var("SAUSAGE_ACTOR").unwrap_or_default()
|
||||
@@ -39,17 +47,13 @@ pub fn messages() -> impl Iterator<Item = Message> {
|
||||
let mut lines = stdin.lock().lines();
|
||||
std::iter::from_fn(move || {
|
||||
loop {
|
||||
let line = match lines.next()? {
|
||||
Ok(line) => line,
|
||||
Err(_) => continue,
|
||||
};
|
||||
let Ok(message) = serde_json::from_str::<Message>(&line) else {
|
||||
let Ok(line) = lines.next()? else {
|
||||
continue;
|
||||
};
|
||||
if message.from == "broker" && message.kind() == "shutdown" {
|
||||
return None;
|
||||
}
|
||||
return Some(message);
|
||||
let Some(message) = parse(line.as_bytes()) else {
|
||||
continue;
|
||||
};
|
||||
return (!is_shutdown(&message)).then_some(message);
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -153,11 +157,12 @@ async fn read_messages(tx: async_channel::Sender<Message>) {
|
||||
}
|
||||
buf.extend_from_slice(&chunk[..n]);
|
||||
while let Some(pos) = buf.iter().position(|b| *b == b'\n') {
|
||||
let line: Vec<_> = buf.drain(..=pos).collect();
|
||||
let Ok(message) = serde_json::from_slice::<Message>(&line) else {
|
||||
let message = parse(&buf[..pos]);
|
||||
buf.drain(..=pos);
|
||||
let Some(message) = message else {
|
||||
continue;
|
||||
};
|
||||
if message.from == "broker" && message.kind() == "shutdown" {
|
||||
if is_shutdown(&message) {
|
||||
tx.close();
|
||||
return;
|
||||
}
|
||||
@@ -166,13 +171,6 @@ async fn read_messages(tx: async_channel::Sender<Message>) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if let Ok(message) = serde_json::from_slice::<Message>(&buf) {
|
||||
if message.from == "broker" && message.kind() == "shutdown" {
|
||||
tx.close();
|
||||
return;
|
||||
}
|
||||
let _ = tx.send(message).await;
|
||||
}
|
||||
tx.close();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user