mirror of
https://github.com/github/awesome-copilot.git
synced 2026-02-22 03:15:13 +00:00
Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -5,8 +5,7 @@ Implement self-referential feedback loops where an AI agent iteratively improves
|
||||
> **Runnable example:** [recipe/ralph-loop.ts](recipe/ralph-loop.ts)
|
||||
>
|
||||
> ```bash
|
||||
> cd nodejs/recipe
|
||||
> npm install
|
||||
> cd recipe && npm install
|
||||
> npx tsx ralph-loop.ts
|
||||
> ```
|
||||
|
||||
@@ -21,13 +20,13 @@ RALPH-loop is a development methodology for iterative AI-powered task completion
|
||||
|
||||
## Example Scenario
|
||||
|
||||
You need to iteratively improve code until all tests pass. Instead of asking Claude to "write perfect code," you use RALPH-loop to:
|
||||
You need to iteratively improve code until all tests pass. Instead of asking Copilot to "write perfect code," you use RALPH-loop to:
|
||||
|
||||
1. Send the initial prompt with clear success criteria
|
||||
2. Claude writes code and tests
|
||||
3. Claude runs tests and sees failures
|
||||
2. Copilot writes code and tests
|
||||
3. Copilot runs tests and sees failures
|
||||
4. Loop automatically re-sends the prompt
|
||||
5. Claude reads test output and previous code, fixes issues
|
||||
5. Copilot reads test output and previous code, fixes issues
|
||||
6. Repeat until all tests pass and completion promise is output
|
||||
|
||||
## Basic Implementation
|
||||
|
||||
@@ -22,47 +22,54 @@ class RalphLoop {
|
||||
* Run the RALPH-loop until completion promise is detected or max iterations reached.
|
||||
*/
|
||||
async run(initialPrompt: string): Promise<string> {
|
||||
let session: Awaited<ReturnType<CopilotClient["createSession"]>> | null = null;
|
||||
|
||||
await this.client.start();
|
||||
const session = await this.client.createSession({
|
||||
model: "gpt-5.1-codex-mini"
|
||||
});
|
||||
|
||||
try {
|
||||
while (this.iteration < this.maxIterations) {
|
||||
this.iteration++;
|
||||
console.log(`\n=== Iteration ${this.iteration}/${this.maxIterations} ===`);
|
||||
session = await this.client.createSession({
|
||||
model: "gpt-5.1-codex-mini"
|
||||
});
|
||||
|
||||
// Build the prompt for this iteration
|
||||
const currentPrompt = this.buildIterationPrompt(initialPrompt);
|
||||
console.log(`Sending prompt (length: ${currentPrompt.length})...`);
|
||||
try {
|
||||
while (this.iteration < this.maxIterations) {
|
||||
this.iteration++;
|
||||
console.log(`\n=== Iteration ${this.iteration}/${this.maxIterations} ===`);
|
||||
|
||||
const response = await session.sendAndWait({ prompt: currentPrompt }, 300_000);
|
||||
this.lastResponse = response?.data.content || "";
|
||||
// Build the prompt for this iteration
|
||||
const currentPrompt = this.buildIterationPrompt(initialPrompt);
|
||||
console.log(`Sending prompt (length: ${currentPrompt.length})...`);
|
||||
|
||||
// Display response summary
|
||||
const summary = this.lastResponse.length > 200
|
||||
? this.lastResponse.substring(0, 200) + "..."
|
||||
: this.lastResponse;
|
||||
console.log(`Response: ${summary}`);
|
||||
const response = await session.sendAndWait({ prompt: currentPrompt }, 300_000);
|
||||
this.lastResponse = response?.data.content || "";
|
||||
|
||||
// Check for completion promise
|
||||
if (this.lastResponse.includes(this.completionPromise)) {
|
||||
console.log(`\n✓ Success! Completion promise detected: '${this.completionPromise}'`);
|
||||
return this.lastResponse;
|
||||
// Display response summary
|
||||
const summary = this.lastResponse.length > 200
|
||||
? this.lastResponse.substring(0, 200) + "..."
|
||||
: this.lastResponse;
|
||||
console.log(`Response: ${summary}`);
|
||||
|
||||
// Check for completion promise
|
||||
if (this.lastResponse.includes(this.completionPromise)) {
|
||||
console.log(`\n✓ Success! Completion promise detected: '${this.completionPromise}'`);
|
||||
return this.lastResponse;
|
||||
}
|
||||
|
||||
console.log(`Iteration ${this.iteration} complete. Checking for next iteration...`);
|
||||
}
|
||||
|
||||
console.log(`Iteration ${this.iteration} complete. Checking for next iteration...`);
|
||||
// Max iterations reached without completion
|
||||
throw new Error(
|
||||
`Maximum iterations (${this.maxIterations}) reached without detecting completion promise: '${this.completionPromise}'`
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(`\nError during RALPH-loop: ${error instanceof Error ? error.message : String(error)}`);
|
||||
throw error;
|
||||
} finally {
|
||||
if (session) {
|
||||
await session.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
// Max iterations reached without completion
|
||||
throw new Error(
|
||||
`Maximum iterations (${this.maxIterations}) reached without detecting completion promise: '${this.completionPromise}'`
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(`\nError during RALPH-loop: ${error instanceof Error ? error.message : String(error)}`);
|
||||
throw error;
|
||||
} finally {
|
||||
await session.destroy();
|
||||
await this.client.stop();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user