You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- 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
<pstyle="margin-top: 1rem; font-size: 0.9rem; color: var(--text-secondary);">Due: January 16, 2026 at 11:59 PM EST</p>
211
207
</div>
212
208
<h1>Assignment 1: Building the ELIZA Chatbot</h1>
213
209
<h2>Overview</h2>
214
210
<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>
215
211
<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 <ahref="#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>
217
221
<h2>Learning Objectives</h2>
218
222
<p>By completing this assignment, you will:</p>
219
223
<ol>
@@ -316,9 +320,9 @@ <h3>Example Conversation</h3>
316
320
```</p>
317
321
<h3>Implementation Requirements</h3>
318
322
<ul>
319
-
<li><strong>Initial and final messages</strong>: These must be drawn from the predefined options in <ahref="../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 <ahref="../eliza-llm-course/instructions.txt">`instructions.txt`</a></li>
321
-
<li><strong>Pattern matching</strong>: Must use the decomposition and reassembly rules from <ahref="../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 <ahref="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 <ahref="instructions.txt">`instructions.txt`</a></li>
325
+
<li><strong>Pattern matching</strong>: Must use the decomposition and reassembly rules from <ahref="instructions.txt">`instructions.txt`</a> to generate responses</li>
322
326
<li><strong>Conversation loop</strong>: The chatbot must continue the conversation until the user types a quit word</li>
323
327
<li><strong>Code quality</strong>: Well-organized, commented code with clear function/class structure</li>
<li><strong>ChatGPT</strong>: <ahref="https://chat.openai.com" target="_blank">chat.openai.com</a> - For comparison testing</li>
692
696
<li><strong>Claude</strong>: <ahref="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>: <ahref="https://replika.com/" target="_blank">replika.com</a> - Example of modern "therapeutic" chatbot</li>
698
+
<li><strong>Evergreen</strong>: <ahref="https://evergreenai.dartmouth.edu/" target="_blank">evergreenai.dartmouth.edu</a> - Dartmouth's version of AI-powered therapy!</li>
694
699
</ul>
695
700
<h3>Course Materials</h3>
696
701
<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><ahref="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>: <ahref="https://web.stanford.edu/class/cs124/p36-weizenabaum.pdf" target="_blank">Weizenbaum (1966)</a>, along with <ahref="https://www.nature.com/articles/s41586-024-07522-w" target="_blank">Fedorenko et al. (2024)</a> and <ahref="https://doi.org/10.1016/j.tics.2020.08.005" target="_blank">Lupyan et al. (2020)</a> on language and thought</li>
699
704
</ul>
700
705
<h3>Going Deeper (Optional)</h3>
701
706
<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><ahref="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><ahref="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><ahref="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>
705
710
</ul>
706
711
<h2>Submission Guidelines</h2>
707
712
<h3>GitHub Classroom Submission</h3>
708
713
<p>This assignment is submitted via <strong>GitHub Classroom</strong>. Follow these steps:</p>
709
714
<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 <ahref="https://classroom.github.com/a/SC1jeftp" target="_blank">accept assignment link</a>
<li>This creates your own private repository for the assignment</li>
718
+
<li>Template repository (your private version will be based on this template): <ahref="https://github.com/ContextLab/eliza-llm-course" target="_blank">github.com/ContextLab/eliza-llm-course</a></li>
<pstyle="margin-top: 1rem; font-size: 0.9rem; color: var(--text-secondary);">Due: January 23, 2026 at 11:59 PM EST</p>
211
207
</div>
212
208
<h1>Assignment 2: Advanced SPAM Classifier with Multi-Method Comparison</h1>
213
209
<h2>Overview</h2>
@@ -221,8 +217,8 @@ <h2>Overview</h2>
221
217
<li><strong>Consider real-world deployment constraints</strong> (speed, memory, class imbalance)</li>
222
218
</ol>
223
219
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>
226
222
By completing this assignment, you will:
227
223
<ul>
228
224
<li>Understand the full pipeline of text classification from feature engineering to deployment</li>
@@ -233,7 +229,7 @@ <h2>Learning Objectives</h2>
233
229
<li>Make informed decisions about model selection based on performance/efficiency trade-offs</li>
234
230
</ul>
235
231
<h2>Dataset</h2>
236
-
A sample dataset is provided (<ahref="../spam-classifier-llm-course/training.zip">`training.zip`</a>), consisting of two folders:
232
+
A sample dataset is provided (<ahref="training.zip">`training.zip`</a>), consisting of two folders:
237
233
<ul>
238
234
<li><strong>spam/</strong>: Contains spam emails in plain text format.</li>
239
235
<li><strong>ham/</strong>: Contains ham emails in plain text format.</li>
0 commit comments