Skip to content

Commit e95fa41

Browse files
committed
Fix build-pages.py to read from submodule READMEs
- Update ASSIGNMENT_DIRS to map submodule directories to output directories - Extract GitHub Classroom links and due dates from README submission boxes - Strip blockquote submission box before converting markdown to HTML - Regenerate all assignment HTML pages with correct links
1 parent f699d88 commit e95fa41

File tree

7 files changed

+137
-95
lines changed

7 files changed

+137
-95
lines changed

assignments/assignment-1/index.html

Lines changed: 25 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -202,18 +202,22 @@ <h1>Assignment 1 - ELIZA</h1>
202202

203203
<div style="background: var(--surface-color); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 1.5rem; margin: 2rem 0; text-align: center;">
204204
<h3 style="margin-bottom: 1rem; color: var(--text-primary);">Ready to Start?</h3>
205-
<a href="#" class="accept-btn" style="display: inline-block; background: var(--gradient-primary); color: white; padding: 0.75rem 2rem; border-radius: var(--radius-md); font-weight: 600; text-decoration: none; transition: transform 0.2s, box-shadow 0.2s;" onmouseover="this.style.transform='translateY(-2px)';this.style.boxShadow='0 4px 12px rgba(99,102,241,0.4)';" onmouseout="this.style.transform='';this.style.boxShadow='';">
206-
<i class="fa-solid fa-rocket" style="margin-right: 0.5rem;"></i>Accept Assignment
207-
</a>
208-
<p style="margin-top: 1rem; font-size: 0.9rem; color: var(--text-secondary);">
209-
GitHub Classroom link coming soon
210-
</p>
205+
<a href="https://classroom.github.com/a/SC1jeftp" target="_blank" class="accept-btn" style="display: inline-block; background: var(--gradient-primary); color: white; padding: 0.75rem 2rem; border-radius: var(--radius-md); font-weight: 600; text-decoration: none; transition: transform 0.2s, box-shadow 0.2s;" onmouseover="this.style.transform='translateY(-2px)';this.style.boxShadow='0 4px 12px rgba(99,102,241,0.4)';" onmouseout="this.style.transform='';this.style.boxShadow='';"><i class="fa-solid fa-rocket" style="margin-right: 0.5rem;"></i>Accept Assignment</a>
206+
<p style="margin-top: 1rem; font-size: 0.9rem; color: var(--text-secondary);">Due: January 16, 2026 at 11:59 PM EST</p>
211207
</div>
212208
<h1>Assignment 1: Building the ELIZA Chatbot</h1>
213209
<h2>Overview</h2>
214210
<p>In this assignment, you will build a simplified version of ELIZA, one of the earliest programs to mimic human conversation. Created by Joseph Weizenbaum at MIT in 1964-1966, ELIZA was designed to simulate a session with a non-directive (Rogerian) psychotherapist using simple pattern matching and string manipulation.</p>
215211
<p>But this assignment goes beyond just implementing a chatbot. You'll also analyze what makes ELIZA feel conversational despite its simplicity, compare it to modern chatbots, and reflect on the psychological phenomenon known as the "ELIZA effect"—the tendency for people to attribute human-like understanding to computer programs.</p>
216-
<p>This is your first assignment in the course, and it's designed to be approachable while introducing you to fundamental concepts in natural language processing: pattern matching, text manipulation, rule-based systems, and the critical distinction between appearing intelligent and actually understanding language.</p>
212+
<p>This is your first assignment in the course, and it's designed to introduce you to fundamental concepts in natural language processing: pattern matching, text manipulation, rule-based systems, and the critical distinction between appearing intelligent and actually understanding language.
213+
<h3>Vibe coding is encouraged!</h3></p>
214+
<p>For this assignment, it is <em>possible</em> to code everything from scratch in the allotted assignment time (1 week). However, I strongly recommend that you use a coding agent to help you implement the core components. Some suggestions are provided <a href="#resources-and-references">below</a>. If you're already familiar with vibe coding, then feel free to use whatever approach you're comfortable with. If you're new to vibe coding, or if you'd like to try something different, what works well for me is:</p>
215+
<ol>
216+
<li>Start with a highly detailed description of <em>exactly</em> what you want your coding agent to make. I would suggest including the assignment as a reference file to provide additional instructions and context. But to increase the chances of <em>working</em> code, hallucinations, and other quality issues, you should explain as clearly as possible precisely what the core algorithms are, how the work should be approached, and so on. In order to create this document, it is critical that <em>you</em> have a detailed and comprehensive understanding of what the solution should look like. You don't necessarily need to know how to <em>code</em> it yourself (LLMs are fantastic at writing code), but you <em>do</em> need to know exactly what each function will do (i.e., what are the inputs, what are the outputs, and how can you convince yourself that it's working-- including tricky edge cases). It helps to include examples to illustrate how each component should work.</li>
217+
<li>Next, pass your description to your coding agent, and ask it to come up with a detailed <strong>technical design document</strong>. You should review this in detail, edit carefully, and iterate (with help from the coding agent, other LLMs, web searches, and your own intuitions) until you are 100% happy with the design. Ideally the design should contain skeleton code and/or code snippets showing exactly how each component of your project will be implemented.</li>
218+
<li>Once you have your technical design document, the next step is to construct a detailed <strong>implementation plan</strong>. Given your <em>target</em> (i.e., your technical design document) ask your coding agent to draft a plan for how to implement it. You can use both the assignment instructions and your technical design document as context. Since implementation plans can get lengthy, you may be pushing up against the context limits of your coding agent of choice. A nice "trick" is to break your task into smaller sub-tasks, and then use agents to do each sub-task. Then no single instance of the coding agent needs to store the full code base and plan in its context. As with the technical design document, you should iterate until you are 100% happy with the plan. Importantly, you should include in your plan a way of verifying that everything is working correctly.</li>
219+
<li>Then let your model "loose" on the problem and have it <strong>draft a solution</strong>. Provide the assignment, technical design document, and implementation plan as context. It's highly likely that the first solution your coding agent comes up with will be wrong in important ways-- it might not run, it might not do what you asked, you might have had a conceptual bug in your understanding that propagated to the model's solution, and so on. That's where you should turn to the verification checks from your implementation plan. In addition to making sure those checks "pass," you should also (when you're creating chatbots or other interactive applications, like in this assignment) <em>use it yourself</em>. Pretend you're <em>using</em> your chatbot (e.g., pretend you're me, and you're trying to stress test the implementation). Does the code behave like you expect? Does the code break down in unexpected ways? Does it break down in <em>expected</em> ways? Are there any pieces that you don't understand fully?</li>
220+
</ol>
217221
<h2>Learning Objectives</h2>
218222
<p>By completing this assignment, you will:</p>
219223
<ol>
@@ -316,9 +320,9 @@ <h3>Example Conversation</h3>
316320
```</p>
317321
<h3>Implementation Requirements</h3>
318322
<ul>
319-
<li><strong>Initial and final messages</strong>: These must be drawn from the predefined options in <a href="../eliza-llm-course/instructions.txt">`instructions.txt`</a></li>
320-
<li><strong>Pre-substitutions, synonym handling, and post-substitutions</strong>: Must be implemented according to the rules in <a href="../eliza-llm-course/instructions.txt">`instructions.txt`</a></li>
321-
<li><strong>Pattern matching</strong>: Must use the decomposition and reassembly rules from <a href="../eliza-llm-course/instructions.txt">`instructions.txt`</a> to generate responses</li>
323+
<li><strong>Initial and final messages</strong>: These must be drawn from the predefined options in <a href="instructions.txt">`instructions.txt`</a></li>
324+
<li><strong>Pre-substitutions, synonym handling, and post-substitutions</strong>: Must be implemented according to the rules in <a href="instructions.txt">`instructions.txt`</a></li>
325+
<li><strong>Pattern matching</strong>: Must use the decomposition and reassembly rules from <a href="instructions.txt">`instructions.txt`</a> to generate responses</li>
322326
<li><strong>Conversation loop</strong>: The chatbot must continue the conversation until the user types a quit word</li>
323327
<li><strong>Code quality</strong>: Well-organized, commented code with clear function/class structure</li>
324328
</ul>
@@ -690,49 +694,31 @@ <h3>Modern Chatbot Comparisons</h3>
690694
<ul>
691695
<li><strong>ChatGPT</strong>: <a href="https://chat.openai.com" target="_blank">chat.openai.com</a> - For comparison testing</li>
692696
<li><strong>Claude</strong>: <a href="https://claude.ai" target="_blank">claude.ai</a> - Another modern system to compare</li>
693-
<li><strong>Replika</strong>: Example of modern "therapeutic" chatbot</li>
697+
<li><strong>Replika</strong>: <a href="https://replika.com/" target="_blank">replika.com</a> - Example of modern "therapeutic" chatbot</li>
698+
<li><strong>Evergreen</strong>: <a href="https://evergreenai.dartmouth.edu/" target="_blank">evergreenai.dartmouth.edu</a> - Dartmouth's version of AI-powered therapy!</li>
694699
</ul>
695700
<h3>Course Materials</h3>
696701
<ul>
697-
<li><strong>Week 1 Lecture Slides</strong>: Review pattern matching and ELIZA discussion</li>
698-
<li><strong>Course Readings</strong>: Fedorenko et al. (2024) and Lupyan et al. (2020) on language and thought</li>
702+
<li><a href="https://context-lab.com/llm-course/#week1" target="_blank"><strong>Week 1 Lecture Slides</strong></a>: Review pattern matching and ELIZA discussion</li>
703+
<li><strong>Course Readings</strong>: <a href="https://web.stanford.edu/class/cs124/p36-weizenabaum.pdf" target="_blank">Weizenbaum (1966)</a>, along with <a href="https://www.nature.com/articles/s41586-024-07522-w" target="_blank">Fedorenko et al. (2024)</a> and <a href="https://doi.org/10.1016/j.tics.2020.08.005" target="_blank">Lupyan et al. (2020)</a> on language and thought</li>
699704
</ul>
700705
<h3>Going Deeper (Optional)</h3>
701706
<ul>
702-
<li><strong>Searle, J. (1980)</strong>. "Minds, Brains, and Programs" - The Chinese Room argument</li>
703-
<li><strong>Turing, A. (1950)</strong>. "Computing Machinery and Intelligence" - The original Turing Test</li>
704-
<li><strong>Bender | Koller (2020)</strong>. "Climbing towards NLU: On Meaning, Form, and Understanding in the Age of Data"</li>
707+
<li><a href="http://www.cse.buffalo.edu/~rapaport/Papers/Papers.by.Others/Searle/searle80-MindsBrainsProgs-BBS.pdf" target="_blank"><strong>Searle, J. (1980)</strong></a>. "Minds, Brains, and Programs" - The Chinese Room argument</li>
708+
<li><a href="https://ebiquity.umbc.edu/get/a/publication/1389.pdf" target="_blank"><strong>Turing, A. (1950)</strong></a>. "Computing Machinery and Intelligence" - The original Turing Test</li>
709+
<li><a href="https://aclanthology.org/2020.acl-main.463.pdf" target="_blank"><strong>Bender | Koller (2020)</strong></a>. "Climbing towards NLU: On Meaning, Form, and Understanding in the Age of Data"</li>
705710
</ul>
706711
<h2>Submission Guidelines</h2>
707712
<h3>GitHub Classroom Submission</h3>
708713
<p>This assignment is submitted via <strong>GitHub Classroom</strong>. Follow these steps:</p>
709714
<ol>
710-
<li><strong>Accept the assignment</strong>: Click the assignment link provided in Canvas or by your instructor
715+
<li><strong>Accept the assignment</strong>: Click the <a href="https://classroom.github.com/a/SC1jeftp" target="_blank">accept assignment link</a>
711716
<ul>
712-
<li>Repository: <a href="https://github.com/ContextLab/eliza-llm-course" target="_blank">github.com/ContextLab/eliza-llm-course</a></li>
713717
<li>This creates your own private repository for the assignment</li>
718+
<li>Template repository (your private version will be based on this template): <a href="https://github.com/ContextLab/eliza-llm-course" target="_blank">github.com/ContextLab/eliza-llm-course</a></li>
714719
</ul>
715720
</li>
716-
<li><strong>Clone your repository</strong>: </li>
717-
</ol>
718-
```bash
719-
git clone https://github.com/ContextLab/eliza-llm-course-YOUR_USERNAME.git
720-
```
721-
<ol>
722-
<li><strong>Complete your work</strong>:
723-
<ul>
724-
<li>Work in Google Colab, Jupyter, or your preferred environment</li>
725-
<li>Save your notebook to the repository</li>
726-
</ul>
727-
</li>
728-
<li><strong>Commit and push your changes</strong>:</li>
729-
</ol>
730-
```bash
731-
git add .
732-
git commit -m "Complete ELIZA assignment"
733-
git push
734-
```
735-
<ol>
721+
<li>Click the "</li>
736722
<li><strong>Verify submission</strong>: Check that your latest commit appears in your GitHub repository before the deadline</li>
737723
</ol>
738724
<strong>Deadline</strong>: January 16, 2026 at 11:59 PM EST
@@ -742,6 +728,7 @@ <h3>Notebook Requirements</h3>
742728
<li><strong>Dependencies</strong>: Include all imports and installations in the notebook</li>
743729
<li><strong>Data</strong>: The `instructions.txt` file should be loaded in your notebook (upload to Colab or link to it)</li>
744730
<li><strong>Output</strong>: Keep cell outputs visible in your submission</li>
731+
<li><strong>Deadline</strong>: January 16, 2026 at 11:59PM EST</li>
745732
</ol>
746733
<h3>Before Submission Checklist</h3>
747734
<ul>

assignments/assignment-2/index.html

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<head>
44
<meta charset="UTF-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6-
<title>Assignment 2 - SPAM classifier - PSYC 51.17</title>
7-
<meta name="description" content="Assignment 2 - SPAM classifier for PSYC 51.17: Language Models from Scratch">
6+
<title>Assignment 2 - SPAM Classifier - PSYC 51.17</title>
7+
<meta name="description" content="Assignment 2 - SPAM Classifier for PSYC 51.17: Language Models from Scratch">
88
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
99
<link rel="stylesheet" href="../../demos/shared/css/demo-styles.css">
1010
<style>
@@ -195,19 +195,15 @@
195195
</nav>
196196

197197
<header class="page-header">
198-
<h1>Assignment 2 - SPAM classifier</h1>
198+
<h1>Assignment 2 - SPAM Classifier</h1>
199199
</header>
200200

201201
<main class="content">
202202

203203
<div style="background: var(--surface-color); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 1.5rem; margin: 2rem 0; text-align: center;">
204204
<h3 style="margin-bottom: 1rem; color: var(--text-primary);">Ready to Start?</h3>
205-
<a href="#" class="accept-btn" style="display: inline-block; background: var(--gradient-primary); color: white; padding: 0.75rem 2rem; border-radius: var(--radius-md); font-weight: 600; text-decoration: none; transition: transform 0.2s, box-shadow 0.2s;" onmouseover="this.style.transform='translateY(-2px)';this.style.boxShadow='0 4px 12px rgba(99,102,241,0.4)';" onmouseout="this.style.transform='';this.style.boxShadow='';">
206-
<i class="fa-solid fa-rocket" style="margin-right: 0.5rem;"></i>Accept Assignment
207-
</a>
208-
<p style="margin-top: 1rem; font-size: 0.9rem; color: var(--text-secondary);">
209-
GitHub Classroom link coming soon
210-
</p>
205+
<a href="https://classroom.github.com/a/ttYZnDoc" target="_blank" class="accept-btn" style="display: inline-block; background: var(--gradient-primary); color: white; padding: 0.75rem 2rem; border-radius: var(--radius-md); font-weight: 600; text-decoration: none; transition: transform 0.2s, box-shadow 0.2s;" onmouseover="this.style.transform='translateY(-2px)';this.style.boxShadow='0 4px 12px rgba(99,102,241,0.4)';" onmouseout="this.style.transform='';this.style.boxShadow='';"><i class="fa-solid fa-rocket" style="margin-right: 0.5rem;"></i>Accept Assignment</a>
206+
<p style="margin-top: 1rem; font-size: 0.9rem; color: var(--text-secondary);">Due: January 23, 2026 at 11:59 PM EST</p>
211207
</div>
212208
<h1>Assignment 2: Advanced SPAM Classifier with Multi-Method Comparison</h1>
213209
<h2>Overview</h2>
@@ -221,8 +217,8 @@ <h2>Overview</h2>
221217
<li><strong>Consider real-world deployment constraints</strong> (speed, memory, class imbalance)</li>
222218
</ol>
223219
This assignment mirrors real-world ML engineering: you'll make architecture decisions, justify trade-offs, and demonstrate that you understand not just how to build models, but why they work.
224-
<p><strong>Timeline:</strong> This assignment is designed to be completed in <strong>1 week (7 days)</strong> while remaining comprehensive in scope. By using GenAI tools to accelerate implementation, you can focus your time on the deeper analytical work—error analysis, robustness testing, and deriving insights—that separates excellent work from good work.</p>
225-
<h2>Learning Objectives</h2>
220+
<p><strong>Timeline:</strong> This assignment is designed to be completed in <strong>1 week (7 days)</strong> while remaining comprehensive in scope. By using GenAI tools to accelerate implementation, you can focus your time on the deeper analytical work—error analysis, robustness testing, and deriving insights—that separates excellent work from good work.
221+
<h2>Learning Objectives</h2></p>
226222
By completing this assignment, you will:
227223
<ul>
228224
<li>Understand the full pipeline of text classification from feature engineering to deployment</li>
@@ -233,7 +229,7 @@ <h2>Learning Objectives</h2>
233229
<li>Make informed decisions about model selection based on performance/efficiency trade-offs</li>
234230
</ul>
235231
<h2>Dataset</h2>
236-
A sample dataset is provided (<a href="../spam-classifier-llm-course/training.zip">`training.zip`</a>), consisting of two folders:
232+
A sample dataset is provided (<a href="training.zip">`training.zip`</a>), consisting of two folders:
237233
<ul>
238234
<li><strong>spam/</strong>: Contains spam emails in plain text format.</li>
239235
<li><strong>ham/</strong>: Contains ham emails in plain text format.</li>

0 commit comments

Comments
 (0)