이름이 지정된 버전 저장하기
자동 저장은 완료된 각 실행을 보호합니다. 사용자는 릴리스 후보와 같은 워크스페이스
상태 하나를 표시할 수도 있습니다. snapshots.save는 해당 실행 중인
샌드박스를 이름이 지정된 체크포인트로 캡처합니다.
이 메서드에는 스레드에 사용할 실행 중이며 재사용 가능한 샌드박스가 필요합니다. reuse: 'none'인
수명 주기에서는 이름이 지정된 체크포인트를 만들 수 없습니다.
이 라우트는 서버에 유지합니다. 세션에서 소유자를 읽습니다. 소유자가 스레드에
액세스할 수 없으면 404를 반환합니다. 그런 다음 snapshots.save를 호출합니다.
snapshots 객체를 만들 때 sandbox와 instances를 바인딩합니다. save에 전달할
수도 있습니다. withSandbox가 사용하는 것과 동일한 인스턴스 저장소를 사용합니다.
다시 로드한 후에도 파일 유지하기를 참고합니다.
import { requireSession } from './auth'
import { snapshots } from './sandbox-server'
export async function POST(request: Request) {
const session = await requireSession(request)
let payload: unknown
try {
payload = await request.json()
} catch {
return new Response('Invalid request', { status: 400 })
}
if (
payload === null ||
typeof payload !== 'object' ||
!('threadId' in payload) ||
!('runId' in payload) ||
!('label' in payload) ||
typeof payload.threadId !== 'string' ||
typeof payload.runId !== 'string' ||
typeof payload.label !== 'string'
) {
return new Response('Invalid request', { status: 400 })
}
const threadId = payload.threadId
const runId = payload.runId
const label = payload.label
if (!(await session.canAccessThread(threadId))) {
return new Response('Not found', { status: 404 })
}
const checkpoint = await snapshots.save({
threadId,
runId,
label,
tenant: { userId: session.userId },
})
return Response.json({ checkpointId: checkpoint.id, label: checkpoint.label })
}
클라이언트는 이 라우트로 요청을 보냅니다. snapshots.save를 호출하거나
영속성 저장소를 읽지 않습니다.
export async function saveCheckpoint(
threadId: string,
runId: string,
label: string,
) {
const response = await fetch('/api/snapshots/save', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ threadId, runId, label }),
})
if (!response.ok) throw new Error('Could not save checkpoint')
return response.json()
}
이름이 지정된 체크포인트는 읽기 또는 선택한 포크에 계속 사용할 수 있습니다. 자동 복원은 여전히 최신 체크포인트를 사용합니다. 선택한 체크포인트 하나를 새 스레드로 복사하려면 버전에서 브랜치 만들기를 참고합니다.
에이전트가 직접 save를 호출해야 하는 경우 에이전트가 저장하고 포크하도록 하기를 사용합니다.