Professor_Profiler/
├── input/ # User places exam PDFs here
│ ├── README.md # Input folder documentation
│ └── [exam PDFs] # User's exam papers
│
└── output/ # All results automatically saved here
├── README.md # Output folder documentation
├── charts/ # Visualization charts (PNG files)
│ └── .gitkeep
├── logs/ # Execution and error logs
│ └── .gitkeep
├── reports/ # Analysis reports (future)
│ └── .gitkeep
└── memory_bank.json # Long-term memory storage
profiler_agent/paths.py (NEW - 83 lines)
get_input_path(filename)- Resolves paths to input folderget_output_path(filename, subdir)- Resolves paths to output folderslist_input_files()- Lists all PDFs in input folderensure_directories()- Auto-creates all required folders
profiler_agent/tools.py
- ✓
read_pdf_content()checksinput/folder first - ✓
visualize_trends()saves tooutput/charts/ - ✓ Added
list_available_exams()to show input PDFs
profiler_agent/memory.py
- ✓ Default storage:
output/memory_bank.json
profiler_agent/observability.py
- ✓ Can log to
output/logs/directory
demo.py
- ✓ Shows folder structure on startup
- ✓ Uses
input/for sample PDFs - ✓ Displays where outputs are saved
Main Documentation
- ✓
README.md- Added folder structure section - ✓
QUICKSTART.md- NEW: 3-step getting started guide - ✓
.gitignore- Ignores generated files, keeps structure
Folder Documentation
- ✓
input/README.md- How to use input folder - ✓
output/README.md- Understanding output structure - ✓
.gitkeepfiles - Preserve empty folders in git
create_sample_exams.py (NEW - 193 lines)
- Generates 3 sample exam PDFs automatically
- Uses reportlab to create realistic exam papers
- Sample exams:
physics_2024_midterm.pdf- 10 questionsphysics_2023_final.pdf- 10 questionschemistry_2024_q1.pdf- 10 questions
- Includes Bloom's taxonomy levels for testing
- Clear Workflow: Put PDFs in
input/, get results inoutput/ - No Confusion: Always know where to place files and find results
- Self-Documenting: README files in each folder explain usage
- Easy Testing: Sample exam generator for immediate testing
- Centralized Path Management: Single source of truth (
paths.py) - Automatic Setup: Folders created automatically when needed
- Version Control Friendly:
.gitignorekeeps repo clean - Easy Extension: Add new output types by extending
paths.py
- Predictable Structure: Same layout in dev/prod
- Easy Backup: Just backup
output/folder - Clear Logs: All logs in
output/logs/ - Portable: Works on any OS (Windows/Mac/Linux)
# Input files
get_input_path("exam.pdf")
# → /workspaces/Professor_Profiler/input/exam.pdf
# Output files
get_output_path("memory.json")
# → /workspaces/Professor_Profiler/output/memory.json
get_output_path("trend.png", "charts")
# → /workspaces/Professor_Profiler/output/charts/trend.pngAll directories are created automatically on first use:
- When
ensure_directories()is called - When
get_input_path()orget_output_path()is called - When any tool needs to write output
Tracked in Git:
- Folder structure (directories)
- README.md files
- .gitkeep files
Ignored in Git:
- Generated PDFs in
input/ - All outputs in
output/(charts, logs, reports, memory) - Virtual environment (
.venv/)
See .gitignore for complete rules.
# Test path utilities
python -c "from profiler_agent.paths import *; ensure_directories()"
# Generate sample exams
python create_sample_exams.py
# Run full demo
python demo.py# Check folder structure
tree -L 3 input/ output/
# List input PDFs
ls -lh input/*.pdf
# Check output files
ls -lh output/
ls -lh output/charts/
ls -lh output/logs/If you were using the system before this update:
-
Old exam PDFs: Move to
input/foldermv *.pdf input/ -
Old memory banks: Move to
output/mv memory_bank.json output/
-
Old charts: Move to
output/charts/mv *.png output/charts/ -
Update imports: If you wrote custom code:
# OLD pdf_path = "exam.pdf" # NEW from profiler_agent.paths import get_input_path pdf_path = get_input_path("exam.pdf")
-
output/reports/- Markdown/PDF study reports -
input/.archive/- Archive processed exams -
output/.cache/- Temporary processing files - Configuration file:
config.yamlfor custom paths - Web dashboard to browse outputs
- Automatic cleanup of old files
To add new output types:
- Add subfolder to
OUTPUT_DIRinpaths.py - Update
ensure_directories()to create it - Use
get_output_path("file.ext", "subfolder") - Update
output/README.mddocumentation
Example:
# In paths.py
OUTPUT_SUBFOLDERS = ["charts", "logs", "reports", "audio"] # Added audio
# In your tool
audio_path = get_output_path("summary.mp3", "audio")Created:
input/README.mdoutput/README.mdoutput/charts/.gitkeepoutput/logs/.gitkeepoutput/reports/.gitkeepprofiler_agent/paths.pycreate_sample_exams.pyQUICKSTART.md.gitignoreFOLDER_IMPLEMENTATION.md(this file)
Modified:
profiler_agent/tools.py- Use input/output pathsprofiler_agent/memory.py- Save to output/profiler_agent/observability.py- Log to output/logs/demo.py- Show folder info, use new pathsREADME.md- Document folder structurerequirements.txt- Added reportlab
- Folders created:
input/,output/,output/charts/,output/logs/,output/reports/ - Path utilities working:
get_input_path(),get_output_path(),list_input_files() - Tools updated to use new paths
- Documentation created: README files in each folder
- Sample generator working:
create_sample_exams.py - Git integration:
.gitignoreconfigured - Demo updated: Shows folder structure
- Tests passing: Path utilities tested
- Quick start guide:
QUICKSTART.mdcreated
✅ User Experience
- Users know where to put PDFs (input/)
- Users know where to find results (output/)
- First-time users can get started in 3 steps
✅ Developer Experience
- Centralized path management
- Auto-creating directories
- Clean, documented code
✅ System Reliability
- Predictable file locations
- No hardcoded paths
- Works across platforms
Implementation Date: November 21, 2024
Status: ✅ Complete and Tested
Backward Compatible: Yes (with simple migration)