mirror of
https://github.com/Aider-AI/aider.git
synced 2025-06-01 10:14:59 +00:00
feat: Local Analytics Dashboard for Aider
feat: Initialize LocalAnalyticsCollector in main.py feat: Display session data in local analytics dashboard fix: Use cumulative data from last interaction for dashboard stats fix: Extract initial query from diffs in local analytics collector.
This commit is contained in:
parent
4e0964046a
commit
e8bee42d76
12 changed files with 1732 additions and 12 deletions
112
local_analytics/run_aider_ask_reflection_error.py
Normal file
112
local_analytics/run_aider_ask_reflection_error.py
Normal file
|
@ -0,0 +1,112 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import pexpect
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
|
||||
# Define the command to run Aider
|
||||
# Ensure the path to the .env file is correct for your environment
|
||||
# This script assumes it's run from a location where 'python -m aider' works
|
||||
# and the path '~/Dev/aider/.env' is valid.
|
||||
aider_command = "python -m aider --env-file ~/Dev/aider/.env"
|
||||
|
||||
# Define the expected prompts using regex
|
||||
# r'> ' matches the main aider prompt
|
||||
# r'Apply edits\? \[y/n/a/e\] ' matches the edit confirmation prompt
|
||||
main_prompt = r'> '
|
||||
edit_prompt = r'Apply edits\? \[y/n/a/e\] '
|
||||
|
||||
# Set a timeout for pexpect operations (in seconds)
|
||||
# Adjust this if your LLM responses are very long or system is slow
|
||||
timeout_seconds = 300 # 5 minutes
|
||||
|
||||
print(f"Running command: {aider_command}")
|
||||
|
||||
child = None
|
||||
try:
|
||||
# Spawn the aider process
|
||||
# encoding='utf-8' ensures consistent text handling
|
||||
# timeout sets a default timeout for expect operations
|
||||
child = pexpect.spawn(aider_command, encoding='utf-8', timeout=timeout_seconds)
|
||||
|
||||
# Optional: Uncomment the line below to see the raw output from the child process
|
||||
# child.logfile_read = sys.stdout
|
||||
|
||||
# Wait for the initial Aider prompt
|
||||
print("Waiting for initial prompt...")
|
||||
child.expect(main_prompt)
|
||||
print("Initial prompt received.")
|
||||
|
||||
# Change mode to /ask
|
||||
print("Sending /ask command...")
|
||||
child.sendline("/ask")
|
||||
# Wait for the prompt to confirm mode change
|
||||
child.expect(main_prompt)
|
||||
print("Mode changed to /ask.")
|
||||
|
||||
# Send the query
|
||||
query = "what is the reflection error"
|
||||
print(f"Sending query: '{query}'...")
|
||||
child.sendline(query)
|
||||
|
||||
# Wait for the LLM response to finish and the prompt to reappear.
|
||||
# This loop also handles potential edit prompts that might appear
|
||||
# during or after the LLM's response.
|
||||
print("Waiting for LLM response and handling potential edit prompts...")
|
||||
while True:
|
||||
# Wait for either the edit prompt, the main prompt, EOF, or timeout
|
||||
index = child.expect([edit_prompt, main_prompt, pexpect.EOF, pexpect.TIMEOUT])
|
||||
|
||||
if index == 0:
|
||||
# Matched the edit prompt: 'Apply edits? [y/n/a/e] '
|
||||
print("Edit prompt received. Sending 'n' to decline...")
|
||||
child.sendline("n")
|
||||
# Continue the loop to wait for the next prompt (could be another edit or the main prompt)
|
||||
elif index == 1:
|
||||
# Matched the main prompt: '> '
|
||||
# This indicates the LLM response is likely finished and no more edit prompts are pending
|
||||
print("Main prompt received. LLM response finished.")
|
||||
break # Exit the loop
|
||||
elif index == 2:
|
||||
# Matched EOF - the process exited unexpectedly before we sent /exit
|
||||
print("ERROR: Process exited unexpectedly (EOF).")
|
||||
print("Output before EOF:")
|
||||
print(child.before)
|
||||
break # Exit the loop
|
||||
elif index == 3:
|
||||
# Matched TIMEOUT
|
||||
print(f"ERROR: Timeout occurred ({timeout_seconds} seconds) while waiting for prompt.")
|
||||
print("Output before timeout:")
|
||||
print(child.before)
|
||||
break # Exit the loop
|
||||
|
||||
# Send the /exit command to quit Aider
|
||||
print("Sending /exit command...")
|
||||
child.sendline("/exit")
|
||||
|
||||
# Wait for the process to terminate gracefully
|
||||
print("Waiting for process to exit...")
|
||||
child.expect(pexpect.EOF)
|
||||
print("Process exited.")
|
||||
|
||||
except pexpect.exceptions.TIMEOUT as e:
|
||||
print(f"ERROR: Timeout exception: {e}")
|
||||
if child:
|
||||
print("Output before timeout:")
|
||||
print(child.before)
|
||||
except pexpect.exceptions.EOF as e:
|
||||
print(f"ERROR: EOF exception: {e}")
|
||||
if child:
|
||||
print("Output before EOF:")
|
||||
print(child.before)
|
||||
except Exception as e:
|
||||
print(f"An unexpected error occurred: {e}")
|
||||
finally:
|
||||
# Ensure the child process is terminated if it's still running
|
||||
if child and child.isalive():
|
||||
print("Terminating child process...")
|
||||
child.close()
|
||||
print("Child process terminated.")
|
||||
|
||||
print("Script finished.")
|
Loading…
Add table
Add a link
Reference in a new issue