feat: new memory prompts (#11439)

* Update prompt
* Wire CWD in the prompt
* Handle the no-output case
This commit is contained in:
jif-oai
2026-02-11 13:57:52 +00:00
committed by GitHub
parent 8b7f8af343
commit f5d4a21098
14 changed files with 581 additions and 142 deletions
+85
View File
@@ -146,6 +146,7 @@ WHERE thread_id = ?
r#"
SELECT so.thread_id, so.source_updated_at, so.raw_memory, so.rollout_summary, so.generated_at
FROM stage1_outputs AS so
WHERE length(trim(so.raw_memory)) > 0 OR length(trim(so.rollout_summary)) > 0
ORDER BY so.source_updated_at DESC, so.thread_id DESC
LIMIT ?
"#,
@@ -193,6 +194,25 @@ WHERE thread_id = ?
return Ok(Stage1JobClaimOutcome::SkippedUpToDate);
}
}
let existing_job = sqlx::query(
r#"
SELECT last_success_watermark
FROM jobs
WHERE kind = ? AND job_key = ?
"#,
)
.bind(JOB_KIND_MEMORY_STAGE1)
.bind(thread_id.as_str())
.fetch_optional(&mut *tx)
.await?;
if let Some(existing_job) = existing_job {
let last_success_watermark =
existing_job.try_get::<Option<i64>, _>("last_success_watermark")?;
if last_success_watermark.is_some_and(|watermark| watermark >= source_updated_at) {
tx.commit().await?;
return Ok(Stage1JobClaimOutcome::SkippedUpToDate);
}
}
let rows_affected = sqlx::query(
r#"
@@ -371,6 +391,71 @@ WHERE excluded.source_updated_at >= stage1_outputs.source_updated_at
Ok(true)
}
pub async fn mark_stage1_job_succeeded_no_output(
&self,
thread_id: ThreadId,
ownership_token: &str,
) -> anyhow::Result<bool> {
let now = Utc::now().timestamp();
let thread_id = thread_id.to_string();
let mut tx = self.pool.begin().await?;
let rows_affected = sqlx::query(
r#"
UPDATE jobs
SET
status = 'done',
finished_at = ?,
lease_until = NULL,
last_error = NULL,
last_success_watermark = input_watermark
WHERE kind = ? AND job_key = ?
AND status = 'running' AND ownership_token = ?
"#,
)
.bind(now)
.bind(JOB_KIND_MEMORY_STAGE1)
.bind(thread_id.as_str())
.bind(ownership_token)
.execute(&mut *tx)
.await?
.rows_affected();
if rows_affected == 0 {
tx.commit().await?;
return Ok(false);
}
let source_updated_at = sqlx::query(
r#"
SELECT input_watermark
FROM jobs
WHERE kind = ? AND job_key = ? AND ownership_token = ?
"#,
)
.bind(JOB_KIND_MEMORY_STAGE1)
.bind(thread_id.as_str())
.bind(ownership_token)
.fetch_one(&mut *tx)
.await?
.try_get::<i64, _>("input_watermark")?;
sqlx::query(
r#"
DELETE FROM stage1_outputs
WHERE thread_id = ?
"#,
)
.bind(thread_id.as_str())
.execute(&mut *tx)
.await?;
enqueue_global_consolidation_with_executor(&mut *tx, source_updated_at).await?;
tx.commit().await?;
Ok(true)
}
pub async fn mark_stage1_job_failed(
&self,
thread_id: ThreadId,