Progress Tracker¶
Copy this checklist into your own notes and check off each item as you complete it. Reading ≠ done — mark an item complete only when you've run the code and can explain the concept out loud.
Week 01 — LLM Fundamentals¶
Day 01 — How LLMs Work + Prompt Engineering¶
Part 1 — How LLMs Work
- [ ] Read: Transformers and Attention
- [ ] Can explain: what self-attention is and why it replaced RNNs
- [ ] Read: Tokenization
- [ ] Can explain: why gpt-4o and claude-sonnet-4-5 tokenize the same text differently
- [ ] Read: Context Windows
- [ ] Can explain: what happens when context is full
- [ ] Read: How LLMs Generate Text
- [ ] Can set temperature correctly for classification vs creative tasks
- [ ] Completed: Practice Exercises
- [ ] Reviewed: Interview Questions (can answer without looking)
Part 2 — Prompt Engineering - [ ] Read: Zero-Shot and Few-Shot - [ ] Built: a few-shot prompt that produces consistent structured output - [ ] Read: Chain-of-Thought - [ ] Tested: zero-shot CoT vs no CoT on a math problem - [ ] Read: Structured Output - [ ] Can extract: JSON reliably using function calling - [ ] Read: System Prompts - [ ] Built: a system prompt with persona, scope, and format constraints - [ ] Read: Advanced Prompt Patterns - [ ] Completed: Practice Exercises - [ ] Reviewed: Interview Questions
Day 02 — LLM APIs + Embeddings¶
Part 1 — OpenAI & Anthropic APIs - [ ] Made: an authenticated OpenAI API call - [ ] Made: an authenticated Anthropic API call - [ ] Read: Vision and Multimodal - [ ] Read: Tool Use with OpenAI — completed the 4-step tool call cycle - [ ] Read: Anthropic Messages API — understand differences from OpenAI - [ ] Read: Cost and Rate Limits - [ ] Can estimate cost of a call before sending it - [ ] Completed: Practice Exercises - [ ] Reviewed: Interview Questions
Part 2 — Embeddings & Semantic Search
- [ ] Read: What Are Embeddings
- [ ] Read: Embedding Models
- [ ] Ran: text-embedding-3-small on sample texts
- [ ] Implemented: cosine similarity from scratch
- [ ] Built: an in-memory semantic search engine
- [ ] Read: Semantic Search Pipeline
- [ ] Completed: Practice Exercises
- [ ] Reviewed: Interview Questions
Day 03 — RAG Basics + Vector Databases¶
Part 1 — RAG Basics - [ ] Read: What Is RAG - [ ] Can draw: the RAG architecture from memory - [ ] Read: Chunking Strategies - [ ] Implemented: at least two chunking strategies and compared them - [ ] Read: Retrieval and Augmentation - [ ] Built: a complete RAG pipeline (PDF → chunk → embed → retrieve → generate) - [ ] Read: RAG vs Fine-Tuning — can make the decision for a given scenario - [ ] Completed: Practice Exercises - [ ] Reviewed: Interview Questions
Part 2 — Vector Databases - [ ] Set up: ChromaDB locally, created a collection, added documents - [ ] Queried: with metadata filters - [ ] Read: Pinecone — understand serverless vs pod, namespaces - [ ] Read: Qdrant — understand payload filtering - [ ] Read: Hybrid Search — can explain RRF - [ ] Completed: Practice Exercises - [ ] Reviewed: Interview Questions
Day 04 — Evaluation + Responsible AI¶
Part 1 — LLM Evaluation - [ ] Read: Evaluation Overview - [ ] Set up: RAGAS on your Day 03 RAG pipeline - [ ] Got: faithfulness and answer relevancy scores on ≥ 10 test cases - [ ] Read: Hallucination and Faithfulness - [ ] Read: Relevance Metrics - [ ] Read: Human Evaluations — understand inter-rater reliability - [ ] Completed: Practice Exercises - [ ] Reviewed: Interview Questions
Part 2 — Responsible AI & Safety - [ ] Read: Jailbreaks and Prompt Injection - [ ] Implemented: basic input validation / injection detection - [ ] Read: Guardrails - [ ] Read: Content Filtering — used the OpenAI Moderation API - [ ] Read: Bias and Fairness - [ ] Completed: Practice Exercises - [ ] Reviewed: Interview Questions
Day 05 — Hugging Face + Local LLMs¶
Part 1 — Hugging Face Ecosystem
- [ ] Navigated: Hugging Face Hub — found a model relevant to your interests
- [ ] Ran: a pipeline() inference call locally
- [ ] Called: the Inference API for a hosted model
- [ ] Read: Spaces — understand how to deploy a Gradio demo
- [ ] Completed: Practice Exercises
- [ ] Reviewed: Interview Questions
Part 2 — Local LLMs - [ ] Installed: Ollama and pulled a model - [ ] Made: an API call to Ollama using the OpenAI-compatible endpoint - [ ] Read: llama.cpp — understand GGUF format - [ ] Read: Quantization — understand Q4 vs Q8 vs NF4 - [ ] Made: the local vs API decision for one real scenario - [ ] Completed: Practice Exercises - [ ] Reviewed: Interview Questions
Week 01 Assignment¶
- [ ] Task 1: API calls to both OpenAI and Anthropic
- [ ] Task 2: Semantic similarity tool with embeddings
- [ ] Task 3: Minimal RAG pipeline with ChromaDB
- [ ] Task 4: RAGAS evaluation with ≥ 10 test cases
- [ ] Task 5: Structured extraction with function calling
- [ ] Submitted: GitHub repository URL
Week 02 — Building LLM Applications¶
Day 01 — LangChain + Advanced RAG¶
Part 1 — LangChain Fundamentals
- [ ] Read: LangChain Overview
- [ ] Built: a ChatPromptTemplate + LLM + output parser chain
- [ ] Implemented: conversation memory with RunnableWithMessageHistory
- [ ] Built: an LCEL pipeline with the pipe operator
- [ ] Called: .ainvoke() and .astream() on a chain
- [ ] Completed: Practice Exercises
- [ ] Reviewed: Interview Questions
Part 2 — Advanced RAG - [ ] Implemented: CrossEncoder reranking on your RAG pipeline - [ ] Measured: Recall@3 before and after reranking - [ ] Read: HyDE — can explain when it helps - [ ] Implemented: multi-query retrieval - [ ] Read: Contextual Compression - [ ] Completed: Practice Exercises - [ ] Reviewed: Interview Questions
Day 02 — Fine-Tuning + Function Calling¶
Part 1 — Fine-Tuning - [ ] Read: Fine-Tuning Overview — can make the fine-tune vs RAG vs prompting decision - [ ] Read: LoRA and QLoRA — understand rank, alpha, NF4 - [ ] Set up: a QLoRA training pipeline (even if you ran only a few steps) - [ ] Read: Training Data — understand chat template format - [ ] Read: When to Fine-Tune - [ ] Completed: Practice Exercises - [ ] Reviewed: Interview Questions
Part 2 — Function Calling & Tool Use
- [ ] Implemented: the complete 4-step OpenAI tool use cycle from scratch
- [ ] Implemented: Anthropic tool_use (note: block.input is a dict, not a string)
- [ ] Built: a structured extraction pipeline with Pydantic and with_structured_output
- [ ] Tested: parallel tool calls
- [ ] Completed: Practice Exercises
- [ ] Reviewed: Interview Questions
Day 03 — AI Agents + LangGraph¶
Part 1 — AI Agents - [ ] Read: What Are AI Agents — can decide when an agent is warranted - [ ] Implemented: a basic ReAct loop from scratch (no framework) - [ ] Read: Planning Strategies - [ ] Built: a tool-calling agent with at least 2 tools - [ ] Implemented: sliding window memory - [ ] Completed: Practice Exercises - [ ] Reviewed: Interview Questions
Part 2 — LangGraph
- [ ] Built: a minimal StateGraph with one node
- [ ] Used: Annotated[list, operator.add] as a reducer
- [ ] Implemented: conditional routing with add_conditional_edges
- [ ] Added: MemorySaver checkpointing
- [ ] Used: interrupt_before for a human-in-the-loop pattern
- [ ] Completed: Practice Exercises
- [ ] Reviewed: Interview Questions
Day 04 — LLMOps + Deployment¶
Part 1 — LLMOps
- [ ] Instrumented: an LLM call with structured logging (latency, tokens, cost)
- [ ] Set up: LangSmith tracing with @traceable
- [ ] Implemented: cost tracking with tiktoken
- [ ] Read: Latency Optimization — applied at least one technique
- [ ] Read: Observability
- [ ] Completed: Practice Exercises
- [ ] Reviewed: Interview Questions
Part 2 — Deployment
- [ ] Built: a FastAPI endpoint that calls an LLM
- [ ] Used: AsyncOpenAI (not sync client) in the endpoint
- [ ] Implemented: SSE streaming with StreamingResponse
- [ ] Added: X-Accel-Buffering: no header
- [ ] Implemented: exact-match cache with SHA256 key
- [ ] Read: Serverless Deployment
- [ ] Completed: Practice Exercises
- [ ] Reviewed: Interview Questions
Day 05 — Capstone + Interview Prep¶
Capstone Project - [ ] Chose: one of the three capstone options - [ ] Completed: architecture design doc - [ ] Built: working FastAPI endpoint (not just a script) - [ ] Implemented: async patterns correctly throughout - [ ] Added: error handling for API failures and invalid input - [ ] Ran: quantitative evaluation with ≥ 10 test cases - [ ] Wrote: README with setup instructions and eval results
Stretch goals (3 points each) - [ ] Streaming response via SSE - [ ] LangSmith tracing enabled - [ ] Deployed on Fly.io, Modal, or Railway - [ ] RAGAS or LLM-as-judge evaluation - [ ] Cost tracking per request
Interview Preparation - [ ] Read: Interview Preparation Overview - [ ] Practiced: technical Q&A out loud (not just reading) - [ ] Completed: at least one system design problem - [ ] Ran: Mock Interview Simulator (all 10 questions) - [ ] Updated: resume with course project bullet - [ ] Pushed: capstone project to GitHub with clean README
Week 02 Assignment¶
- [ ] Working FastAPI endpoint
- [ ] Async patterns used correctly
- [ ] 4+ course components integrated
- [ ] Quantitative evaluation with ≥ 10 test cases + results in README
- [ ] Submission checklist completed
- [ ] Submitted: GitHub repository URL
Final Checklist Before Job Applications¶
- [ ] GitHub has ≥ 2 pinned LLM projects with clear READMEs and eval results
- [ ] Resume has ≥ 1 bullet with specific metrics ("faithfulness 0.87", "p95 latency 1.2s")
- [ ] Can explain RAG architecture without notes in under 2 minutes
- [ ] Can walk through the function calling cycle from scratch
- [ ] Can describe LoRA — what it trains, what it freezes, why it's memory-efficient
- [ ] Practiced ≥ 2 system design problems out loud
- [ ] Know the answer to: "Why would you use AsyncOpenAI over the sync client?"