Preserve Session Zero context across Eve channels
This commit is contained in:
parent
b06d2a72d7
commit
8cad6b937d
5 changed files with 58 additions and 10 deletions
|
|
@ -576,7 +576,7 @@ mod tests {
|
|||
capable.model = MODEL_CAPABLE.into();
|
||||
assert_eq!(
|
||||
openrouter_request_body(&capable, "stealth/ox-alpha")["reasoning"]["effort"],
|
||||
"high"
|
||||
"medium"
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -852,7 +852,7 @@ fn openrouter_request_body(request: &ModelStageRequest, resolved_model: &str) ->
|
|||
"messages": [{"role": "user", "content": request.lived_stream}],
|
||||
"stream": false,
|
||||
"reasoning": {
|
||||
"effort": if request.model == MODEL_CAPABLE { "high" } else { "low" },
|
||||
"effort": if request.model == MODEL_CAPABLE { "medium" } else { "low" },
|
||||
"exclude": true
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1361,6 +1361,21 @@ fn permitted_dm_context(
|
|||
});
|
||||
if channel.kind == SessionZeroChannelKind::PrivateDm {
|
||||
let member_id = member_id.ok_or_else(|| anyhow!("private member is missing"))?;
|
||||
let recent_shared_messages = state
|
||||
.channels
|
||||
.get("shared:table")
|
||||
.into_iter()
|
||||
.flat_map(|shared| shared.message_ids.iter().rev().take(8).rev())
|
||||
.filter_map(|id| state.messages.get(id))
|
||||
.map(|message| {
|
||||
serde_json::json!({
|
||||
"speaker": message.speaker,
|
||||
"author_member_id": message.author_member_id,
|
||||
"text": message.text,
|
||||
})
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
value["recent_shared_messages"] = serde_json::to_value(recent_shared_messages)?;
|
||||
value["private_character"] = serde_json::to_value(
|
||||
state
|
||||
.character_drafts
|
||||
|
|
@ -2804,6 +2819,39 @@ mod tests {
|
|||
assert_eq!(receipts.len(), 3);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn private_dm_context_carries_bounded_public_session_continuity() {
|
||||
let mut draft = state();
|
||||
let host_id = draft.host_member_id.clone();
|
||||
append_message(
|
||||
&mut draft,
|
||||
"shared:table".into(),
|
||||
Some(host_id.clone()),
|
||||
SessionZeroSpeakerKind::Player,
|
||||
"The campaign begins in Hellas inside Zhestokost space.".into(),
|
||||
)
|
||||
.unwrap();
|
||||
let private_channel = format!("private:{host_id}");
|
||||
append_message(
|
||||
&mut draft,
|
||||
private_channel.clone(),
|
||||
Some(host_id.clone()),
|
||||
SessionZeroSpeakerKind::Player,
|
||||
"I carry a forged transit credential.".into(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let context = permitted_dm_context(&draft, &private_channel, Some(&host_id)).unwrap();
|
||||
let shared = serde_json::to_string(&context["recent_shared_messages"]).unwrap();
|
||||
assert!(shared.contains("Hellas inside Zhestokost space"));
|
||||
assert!(!shared.contains("forged transit credential"));
|
||||
assert!(
|
||||
serde_json::to_string(&context["recent_messages"])
|
||||
.unwrap()
|
||||
.contains("forged transit credential")
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn private_channels_and_boundaries_preserve_ownership() {
|
||||
let dir = tempdir().unwrap();
|
||||
|
|
|
|||
2
vendor/eve
vendored
2
vendor/eve
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit 6b5faa6a77cf59faaa46a2a96ddb3fcadab9c67f
|
||||
Subproject commit 23eaf32eae76204357c1406b4a7d01bcece6b815
|
||||
File diff suppressed because one or more lines are too long
2
web/dist/index.html
vendored
2
web/dist/index.html
vendored
|
|
@ -4,7 +4,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>Ghostlight Dungeon</title>
|
||||
<script type="module" crossorigin src="/assets/index-CRfIb_s9.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-BAZ19qgm.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-0xx6l_wS.css">
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
|||
Loading…
Reference in a new issue