@just-every/task
Version:
Task - A Thoughtful Task Loop
96 lines (78 loc) β’ 3.59 kB
text/typescript
/**
* Pause Control Example
*
* This example demonstrates how to use ensemble's pause functionality with Task.
* Shows how to pause/resume LLM requests and listen to pause events.
*/
import { runTask, pause, resume, isPaused, getPauseController } from '../index.js';
import { Agent } from '@just-every/ensemble';
async function main() {
console.log('βΈοΈ Task Pause Control Example\n');
// Set up pause event listeners
const controller = getPauseController();
controller.on('paused', () => console.log('π΄ System paused!'));
controller.on('resumed', () => console.log('π’ System resumed!'));
// Create agent
const agent = new Agent({
name: 'PauseBot',
instructions: 'You are a helpful assistant. Take your time to think through problems step by step.',
modelClass: 'reasoning'
});
const task = 'Count from 1 to 10, but explain what each number represents in different contexts (math, time, sports, etc.)';
try {
console.log('Starting Task with pause control...\n');
// Start the Task process
const mindGenerator = runTask(agent, task);
// Set up automatic pause/resume for demonstration
setTimeout(() => {
console.log('\nπ’ Pausing system in 3 seconds...');
setTimeout(() => {
if (!isPaused()) {
pause();
console.log('βΈοΈ Paused! Notice how Task waits between iterations.');
// Resume after 5 seconds
setTimeout(() => {
console.log('π’ Resuming system...');
resume();
}, 5000);
}
}, 3000);
}, 2000);
let eventCount = 0;
for await (const event of mindGenerator) {
eventCount++;
// Show message content
if (event.type === 'message_delta' && 'content' in event) {
process.stdout.write(event.content);
}
// Show when we're starting new thoughts (to see pause effects)
if (event.type === 'response_start') {
console.log(`\nπ [${new Date().toLocaleTimeString()}] Starting new thought...`);
}
// Handle completion
if (event.type === 'tool_done' && 'tool_call' in event) {
const toolEvent = event as any;
if (toolEvent.tool_call?.function?.name === 'task_complete') {
console.log('\n\nβ
Task completed!');
console.log(`Total events processed: ${eventCount}`);
console.log(`Final pause state: ${isPaused() ? 'Paused' : 'Running'}`);
break;
}
}
// Show pause state periodically
if (eventCount % 10 === 0) {
console.log(`\nπ [Status] Events: ${eventCount}, Paused: ${isPaused()}`);
}
}
} catch (error) {
console.error('β Error:', error);
}
console.log('\nπ Summary:');
console.log('- Task automatically waits when ensemble is paused');
console.log('- No additional pause logic needed in Task');
console.log('- Pause state is managed globally by ensemble');
console.log('- Events continue normally after resume');
}
if (import.meta.url === `file://${process.argv[1]}`) {
main().catch(console.error);
}