{
 "program": {
  "name": "Certificate Program in Generative AI & Agentic AI for Developers",
  "institute": "IIT Patna",
  "partner": "USDC Projects India Pvt Ltd",
  "months": 6,
  "course_page": "https://certifications.iitpatna.com/generative-ai-for-developers",
  "course_repo": "astroboy1183/iit-patna-certification-course",
  "owner": "Jayanth Appalla",
  "start_date": "2026-09-27",
  "total_weeks": 26,
  "week_now": 4,
  "today": "2026-10-21"
 },
 "modules": [
  {
   "id": "M1",
   "title": "Foundations of Generative AI",
   "schedule": "Weeks 1–2",
   "weeks": [
    1,
    2
   ],
   "topics": [
    {
     "name": "Python refresher",
     "trackable": true,
     "evidence": [
      {
       "path": "01_module0/10_strings_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/11_debugging.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/12_debugging_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/13_lists.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/14_lists_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/15_loops_if_else_.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/16_loops_if_else_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/17_docstrings_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/18_functions_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/19_tuples_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/1_print_and_escape_sequences.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/20_dictionaries_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/21_sets_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/2_print_and_escape_sequences_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/3_variables_and_data_types.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/4_variables_and_data_types_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/5_user_input.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/6_user_input_and_type_casting_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/7_operators.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/8_operators_practice.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "01_module0/9_strings.py",
       "line": null,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Jupyter notebooks",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_04/Finetuning-Project/script2-qlora-finetune.ipynb",
       "line": null,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/experiment.ipynb",
       "line": null,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Hugging Face Hub",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_04/Finetuning-Project/script1_baseline_chat.py",
       "line": 6,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script2-qlora-finetune.ipynb",
       "line": 31,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script2_lora_finetune.py",
       "line": 6,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script2_qlora_finetune.py",
       "line": 24,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script3_chat_with_adapter.py",
       "line": 17,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/01_API_VS_local/compare_models.py",
       "line": 71,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/01_API_VS_local/hf_app.py",
       "line": 7,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Tokens, embeddings and context windows",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_01/notes/03_what_are_llms.md",
       "line": 25,
       "kind": "notes"
      },
      {
       "path": "02_module1/week_04/notes/12_models_in_langchain.md",
       "line": 112,
       "kind": "notes"
      }
     ],
     "in_code": false
    },
    {
     "name": "Responsible AI: bias, harm, safety, guardrails",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_01/notes/04_responsible_ai.md",
       "line": 1,
       "kind": "notes"
      }
     ],
     "in_code": false
    },
    {
     "name": "Roadmap for developers in GenAI",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_01/notes/00_genai_development_roadmap.md",
       "line": 1,
       "kind": "notes"
      }
     ],
     "in_code": false
    },
    {
     "name": "Evolution of AI: ML → deep learning → GenAI",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_01/notes/03_what_are_llms.md",
       "line": 1,
       "kind": "notes"
      }
     ],
     "in_code": false
    },
    {
     "name": "Traditional AI vs generative AI",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_01/notes/01_what_is_generative_ai.md",
       "line": 12,
       "kind": "notes"
      },
      {
       "path": "02_module1/week_01/notes/02_traditional_ml_vs_generative_ai.md",
       "line": 1,
       "kind": "notes"
      }
     ],
     "in_code": false
    },
    {
     "name": "Transformers explained (self-attention)",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_01/notes/03_what_are_llms.md",
       "line": 36,
       "kind": "notes"
      }
     ],
     "in_code": false
    },
    {
     "name": "Pre-trained vs fine-tuned LLMs",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_01/notes/03_what_are_llms.md",
       "line": 47,
       "kind": "notes"
      }
     ],
     "in_code": false
    }
   ],
   "covered": 10,
   "trackable": 10,
   "project": {
    "name": "First GenAI-powered Python script that sends prompts and parses responses",
    "trackable": true,
    "evidence": [
     {
      "path": "02_module1/week_02/01_API_VS_local/compare_models.py",
      "line": 28,
      "kind": "code"
     },
     {
      "path": "02_module1/week_02/01_API_VS_local/gemini_app.py",
      "line": 11,
      "kind": "code"
     },
     {
      "path": "02_module1/week_02/01_API_VS_local/ollama_app.py",
      "line": 5,
      "kind": "code"
     },
     {
      "path": "02_module1/week_02/01_API_VS_local/openai_app.py",
      "line": 12,
      "kind": "code"
     },
     {
      "path": "02_module1/week_02/02_chatbot/llm_provider.py",
      "line": 29,
      "kind": "code"
     },
     {
      "path": "02_module1/week_02/03_capstone/llm_providers.py",
      "line": 21,
      "kind": "code"
     }
    ]
   },
   "status": "completed",
   "scheduled_now": false
  },
  {
   "id": "M2",
   "title": "Working with Models & APIs",
   "schedule": "Weeks 3–4",
   "weeks": [
    3,
    4
   ],
   "topics": [
    {
     "name": "Cloud model APIs (OpenAI, Anthropic, Gemini, Mistral)",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_02/01_API_VS_local/compare_models.py",
       "line": 3,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/01_API_VS_local/gemini_app.py",
       "line": 2,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/01_API_VS_local/google_model_availability.py",
       "line": 2,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/01_API_VS_local/openai_app.py",
       "line": 4,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/02_chatbot/llm_provider.py",
       "line": 2,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/03_capstone/llm_providers.py",
       "line": 4,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Hugging Face models (Inference API / Transformers)",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_02/01_API_VS_local/compare_models.py",
       "line": 71,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/01_API_VS_local/hf_app.py",
       "line": 14,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script1_baseline_chat.py",
       "line": 6,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script2-qlora-finetune.ipynb",
       "line": 31,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script2_lora_finetune.py",
       "line": 6,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script2_qlora_finetune.py",
       "line": 24,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script3_chat_with_adapter.py",
       "line": 17,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Local LLMs (Ollama, LM Studio, vLLM)",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_02/01_API_VS_local/compare_models.py",
       "line": 5,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/01_API_VS_local/ollama_app.py",
       "line": 1,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Cost management, prompt budgeting and rate limits",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_02/01_API_VS_local/compare_models.py",
       "line": 31,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/01_API_VS_local/hf_app.py",
       "line": 80,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/01_API_VS_local/openai_app.py",
       "line": 15,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/02_chatbot/llm_provider.py",
       "line": 32,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/03_capstone/llm_providers.py",
       "line": 24,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/01_llm_in_langchain/llm_factory.py",
       "line": 21,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/01_llm_in_langchain/rough.py",
       "line": 20,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/02_prompts-in-langchain/01_basic_prompt_template.py",
       "line": 20,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/02_prompts-in-langchain/02_chat_prompt_template.py",
       "line": 20,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/02_prompts-in-langchain/03_few_shot_prompting.py",
       "line": 20,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Comparing model behaviour across providers",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_02/01_API_VS_local/compare_models.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/02_chatbot/llm_provider.py",
       "line": null,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/03_capstone/llm_providers.py",
       "line": null,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Prompt tuning vs fine-tuning, LoRA / QLoRA",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_04/Finetuning-Project/script2-qlora-finetune.ipynb",
       "line": 30,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script2_lora_finetune.py",
       "line": 5,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script2_qlora_finetune.py",
       "line": 23,
       "kind": "code"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/script3_chat_with_adapter.py",
       "line": 16,
       "kind": "code"
      },
      {
       "path": "02_module1/week_03/notes/07_prompt_tuning_vs_fine_tuning.md",
       "line": 1,
       "kind": "notes"
      },
      {
       "path": "02_module1/week_03/notes/08_lora_and_qlora.md",
       "line": 1,
       "kind": "notes"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/ISSUES_AND_FIXES.md",
       "line": 1,
       "kind": "docs"
      },
      {
       "path": "02_module1/week_04/Finetuning-Project/README.md",
       "line": 1,
       "kind": "readme"
      }
     ],
     "in_code": true
    },
    {
     "name": "Developer mindset: we orchestrate, not train",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_02/notes/05_developer_mindset_in_genai.md",
       "line": 1,
       "kind": "notes"
      },
      {
       "path": "02_module1/week_04/notes/13_prompt_engineering_in_langchain.md",
       "line": 197,
       "kind": "notes"
      },
      {
       "path": "02_module1/week_02/README.md",
       "line": 1,
       "kind": "readme"
      }
     ],
     "in_code": false
    }
   ],
   "covered": 7,
   "trackable": 7,
   "project": {
    "name": "Build and compare a simple chatbot across API, open-source and local models",
    "trackable": true,
    "evidence": [
     {
      "path": "02_module1/week_02/01_API_VS_local/compare_models.py",
      "line": null,
      "kind": "code"
     },
     {
      "path": "02_module1/week_02/02_chatbot/llm_provider.py",
      "line": null,
      "kind": "code"
     },
     {
      "path": "02_module1/week_02/03_capstone/llm_providers.py",
      "line": null,
      "kind": "code"
     }
    ]
   },
   "status": "completed",
   "scheduled_now": true
  },
  {
   "id": "M3",
   "title": "Building GenAI Apps Without Frameworks",
   "schedule": "Week 5",
   "weeks": [
    5
   ],
   "topics": [
    {
     "name": "Production-style prompt pipelines written by hand",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_02/01_API_VS_local/compare_models.py",
       "line": 18,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/01_API_VS_local/openai_app.py",
       "line": 10,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Conversation memory without frameworks",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_02/03_capstone/app.py",
       "line": 15,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Parsing LLM responses reliably (JSON, structured parsing)",
     "trackable": true,
     "evidence": [
      {
       "path": "99_live_sessions/01_call_transcript_qa/experiment.ipynb",
       "line": 4,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/classification.py",
       "line": 3,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/evaluation.py",
       "line": 3,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/reporting.py",
       "line": 3,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Simple UI with Streamlit or Gradio",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_02/03_capstone/app.py",
       "line": 2,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Error handling, retries and fallbacks",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_02/01_API_VS_local/compare_models.py",
       "line": 35,
       "kind": "code"
      },
      {
       "path": "02_module1/week_02/02_chatbot/llm_provider.py",
       "line": 38,
       "kind": "code"
      }
     ],
     "in_code": true
    }
   ],
   "covered": 5,
   "trackable": 5,
   "project": {
    "name": "Minimal chatbot with memory and a UI, using only Python and APIs (no LangChain)",
    "trackable": true,
    "evidence": [
     {
      "path": "02_module1/week_02/03_capstone/app.py",
      "line": 2,
      "kind": "code"
     }
    ]
   },
   "status": "completed",
   "scheduled_now": false
  },
  {
   "id": "M4",
   "title": "LangChain Essentials & Application Development",
   "schedule": "Weeks 6–7",
   "weeks": [
    6,
    7
   ],
   "topics": [
    {
     "name": "LangChain components: LLMs, prompts, chains, tools, agents",
     "trackable": true,
     "evidence": [
      {
       "path": "03_module2/week_01/01_llm_in_langchain/llm_factory.py",
       "line": 4,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/01_llm_in_langchain/rough.py",
       "line": 4,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/02_prompts-in-langchain/01_basic_prompt_template.py",
       "line": 4,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/02_prompts-in-langchain/02_chat_prompt_template.py",
       "line": 4,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/02_prompts-in-langchain/03_few_shot_prompting.py",
       "line": 4,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/experiment.ipynb",
       "line": 24,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/classification.py",
       "line": 1,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/evaluation.py",
       "line": 1,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/reporting.py",
       "line": 1,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/utils/llm_loader.py",
       "line": 2,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Prompt templates and few-shot prompting",
     "trackable": true,
     "evidence": [
      {
       "path": "03_module2/week_01/02_prompts-in-langchain/01_basic_prompt_template.py",
       "line": 4,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/02_prompts-in-langchain/02_chat_prompt_template.py",
       "line": 4,
       "kind": "code"
      },
      {
       "path": "03_module2/week_01/02_prompts-in-langchain/03_few_shot_prompting.py",
       "line": 4,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/experiment.ipynb",
       "line": 47,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/classification.py",
       "line": 2,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/evaluation.py",
       "line": 2,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/reporting.py",
       "line": 2,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Structured output and output parsers",
     "trackable": true,
     "evidence": [
      {
       "path": "99_live_sessions/01_call_transcript_qa/experiment.ipynb",
       "line": 48,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/classification.py",
       "line": 1,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/evaluation.py",
       "line": 1,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/reporting.py",
       "line": 1,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Sequential and router chains (LCEL runnables)",
     "trackable": true,
     "evidence": [
      {
       "path": "99_live_sessions/01_call_transcript_qa/experiment.ipynb",
       "line": 177,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/evaluation.py",
       "line": 47,
       "kind": "code"
      },
      {
       "path": "99_live_sessions/01_call_transcript_qa/src/components/reporting.py",
       "line": 43,
       "kind": "code"
      }
     ],
     "in_code": true
    },
    {
     "name": "Memory in LangChain",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "LangSmith tracing (optional)",
     "trackable": true,
     "evidence": [],
     "in_code": false
    }
   ],
   "covered": 4,
   "trackable": 6,
   "project": {
    "name": "Multi-step content generation pipeline (e.g. rewrite → summarize → social snippet)",
    "trackable": true,
    "evidence": [
     {
      "path": "99_live_sessions/01_call_transcript_qa/experiment.ipynb",
      "line": 81,
      "kind": "code"
     },
     {
      "path": "99_live_sessions/01_call_transcript_qa/src/components/evaluation.py",
      "line": 47,
      "kind": "code"
     }
    ]
   },
   "status": "completed",
   "scheduled_now": false
  },
  {
   "id": "M5",
   "title": "RAG Systems — From Basics to Advanced",
   "schedule": "Weeks 8–9",
   "weeks": [
    8,
    9
   ],
   "topics": [
    {
     "name": "Document loaders, text splitters and chunking strategy",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Embeddings and vector stores (FAISS, Chroma)",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Retrievers (multi-query, contextual compression)",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "RAG evaluation",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Query rewriting and HyDE",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Hybrid search",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Two-stage retrieval and reranking",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Multi-source retrieval and fusion",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Context distillation and hallucination mitigation",
     "trackable": true,
     "evidence": [],
     "in_code": false
    }
   ],
   "covered": 0,
   "trackable": 9,
   "project": {
    "name": "End-to-end \"Chat with your documents\" assistant with citations",
    "trackable": true,
    "evidence": []
   },
   "status": "not_started",
   "scheduled_now": false
  },
  {
   "id": "M6",
   "title": "Agents, Tools & MCP (Model Context Protocol)",
   "schedule": "Weeks 10–11",
   "weeks": [
    10,
    11
   ],
   "topics": [
    {
     "name": "Tool calling: functions, APIs, custom Python tools",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Building multi-tool agents",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Safe and predictable agent behaviour",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "MCP fundamentals and building MCP servers",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Using MCP inside agent workflows",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Why agents: where they shine and where they don't",
     "trackable": true,
     "evidence": [],
     "in_code": false
    }
   ],
   "covered": 0,
   "trackable": 6,
   "project": {
    "name": "Multi-tool agent that uses both LangChain tools and MCP tools",
    "trackable": true,
    "evidence": []
   },
   "status": "not_started",
   "scheduled_now": false
  },
  {
   "id": "M7",
   "title": "Agentic Workflows with LangGraph + Final Capstone",
   "schedule": "Week 12",
   "weeks": [
    12
   ],
   "topics": [
    {
     "name": "LangGraph basics",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Nodes, edges and state",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Conditional, parallel and iterative workflows",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Using tools inside LangGraph nodes",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Streaming and persistence (checkpoints)",
     "trackable": true,
     "evidence": [],
     "in_code": false
    }
   ],
   "covered": 0,
   "trackable": 5,
   "project": {
    "name": "Small LangGraph workflow (e.g. plan → retrieve → summarize with checks)",
    "trackable": true,
    "evidence": []
   },
   "status": "not_started",
   "scheduled_now": false
  },
  {
   "id": "M8",
   "title": "Practical GenAI Tooling & Productivity Ecosystem",
   "schedule": "Month 4",
   "weeks": [
    13,
    14,
    15,
    16,
    17
   ],
   "topics": [
    {
     "name": "AI-first coding workflows (Cursor, Windsurf, Claude Code)",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Running local GGUF models with LM Studio",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "MCP-based productivity agents",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Replit Agents",
     "trackable": true,
     "evidence": [],
     "in_code": false
    }
   ],
   "covered": 0,
   "trackable": 4,
   "project": {
    "name": "Building and deploying a real GenAI project with a mentor",
    "trackable": false,
    "evidence": []
   },
   "status": "not_started",
   "scheduled_now": false
  },
  {
   "id": "M9",
   "title": "Agentic Ecosystems, Automation Workflows & Applied GenAI",
   "schedule": "Month 5",
   "weeks": [
    18,
    19,
    20,
    21
   ],
   "topics": [
    {
     "name": "Multi-agent orchestration with CrewAI",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Automation with n8n",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Workflow automation with MCP servers",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Microsoft Copilot stack",
     "trackable": true,
     "evidence": [
      {
       "path": "02_module1/week_04/notes/study_resources.md",
       "line": 62,
       "kind": "notes"
      }
     ],
     "in_code": false
    }
   ],
   "covered": 1,
   "trackable": 4,
   "project": {
    "name": "Domain-specific automation project (finance, marketing, ops)",
    "trackable": false,
    "evidence": []
   },
   "status": "in_progress",
   "scheduled_now": false
  },
  {
   "id": "M10",
   "title": "Career Acceleration, Industry Readiness & Portfolio Building",
   "schedule": "Month 6",
   "weeks": [
    22,
    23,
    24
   ],
   "topics": [
    {
     "name": "GenAI portfolio on GitHub",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Resume building for GenAI roles",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Interview preparation for AI engineering roles",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Building a personal learning system",
     "trackable": true,
     "evidence": [],
     "in_code": false
    }
   ],
   "covered": 0,
   "trackable": 4,
   "project": {
    "name": "Industry-ready portfolio of GenAI projects",
    "trackable": false,
    "evidence": []
   },
   "status": "not_started",
   "scheduled_now": false
  },
  {
   "id": "CAP",
   "title": "Capstone Project",
   "schedule": "2 weeks",
   "weeks": [
    25,
    26
   ],
   "topics": [
    {
     "name": "LLMs (cloud and local)",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "RAG",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "Agents and MCP",
     "trackable": true,
     "evidence": [],
     "in_code": false
    },
    {
     "name": "A full UI",
     "trackable": true,
     "evidence": [],
     "in_code": false
    }
   ],
   "covered": 0,
   "trackable": 4,
   "project": {
    "name": "Portfolio-ready GenAI app combining LLMs, RAG, agents, MCP, LangGraph and a full UI",
    "trackable": true,
    "evidence": []
   },
   "status": "not_started",
   "scheduled_now": false
  }
 ],
 "totals": {
  "topics_covered": 27,
  "topics_trackable": 64,
  "topics_in_code": 18,
  "topics_from_notes": 9,
  "modules_started": 5,
  "modules_completed": 4,
  "projects_built": 4,
  "modules": 11
 },
 "stats": {
  "commits": 29,
  "active_days": 9,
  "current_streak": 1,
  "longest_streak": 2,
  "python_files": 54,
  "notebooks": 2,
  "lines_of_code": 2545,
  "practice_assignments": 13,
  "lecture_notes": 19,
  "notes_words": 23313,
  "files": 114,
  "files_by_kind": {
   "code": 56,
   "notes": 19,
   "docs": 13,
   "config": 11,
   "deps": 8,
   "data": 7
  },
  "first_commit": "2026-09-27",
  "last_commit": "2026-10-20"
 },
 "activity": {
  "2026-09-27": 3,
  "2026-09-28": 4,
  "2026-10-03": 4,
  "2026-10-04": 3,
  "2026-10-10": 3,
  "2026-10-11": 2,
  "2026-10-17": 3,
  "2026-10-18": 4,
  "2026-10-20": 3
 },
 "commits": [
  {
   "sha": "85a5d839f5fb93ae464bb0aa8dcb4eef0835b27d",
   "date": "2026-10-20T23:24:28+05:30",
   "day": "2026-10-20",
   "subject": "Add prompts in LangChain: basic, chat and few-shot prompt templates"
  },
  {
   "sha": "898b8e5acc410857718bf4739c9be051322ba1ff",
   "date": "2026-10-20T20:17:30+05:30",
   "day": "2026-10-20",
   "subject": "Update links in notes and READMEs to the new folder names"
  },
  {
   "sha": "2a596556782404909e36ab84c5bf9cce1553e788",
   "date": "2026-10-20T20:17:19+05:30",
   "day": "2026-10-20",
   "subject": "Reorganize course folders by module"
  },
  {
   "sha": "7cad701f88841be322a7a386d69747db6bfc933f",
   "date": "2026-10-18T16:29:01+05:30",
   "day": "2026-10-18",
   "subject": "Add FastAPI app, main.py entry point and Docker setup for transcript QA"
  },
  {
   "sha": "695f52f2dec33c244fad6b73c1edc9484634a808",
   "date": "2026-10-18T10:21:20+05:30",
   "day": "2026-10-18",
   "subject": "Correct the float16 explanation in the fine-tuning issues log"
  },
  {
   "sha": "bba276d277344e3ee8d2548011049be56f08e5ff",
   "date": "2026-10-18T09:05:11+05:30",
   "day": "2026-10-18",
   "subject": "add README"
  },
  {
   "sha": "41c6d4d8865a77e56c2ca5dac849199a5eb51dfa",
   "date": "2026-10-18T00:39:12+05:30",
   "day": "2026-10-18",
   "subject": "add qlora script that i ran on kaggle."
  },
  {
   "sha": "6d246f24f52ce5c8b3fbc8bf0fa3bd62ea0665ba",
   "date": "2026-10-17T23:56:11+05:30",
   "day": "2026-10-17",
   "subject": "add notes from the slides provided in week 4."
  },
  {
   "sha": "6758fd7b1d076752e0e8a7d683183cb339d8dae6",
   "date": "2026-10-17T22:28:27+05:30",
   "day": "2026-10-17",
   "subject": "add notes for week 4 and update README files."
  },
  {
   "sha": "9a4b7d16fe2225b5f13bec7ce202b1c3e66f0bfb",
   "date": "2026-10-17T22:13:54+05:30",
   "day": "2026-10-17",
   "subject": "Finetune mini-project"
  }
 ],
 "projects": [
  {
   "path": "01_module0",
   "title": "Python foundations",
   "description": "Lessons and practice assignments covering Python fundamentals, from print() to sets.",
   "files": 21,
   "loc": 729,
   "libraries": [],
   "first": "2026-10-20",
   "last": "2026-10-20"
  },
  {
   "path": "02_module1/week_02/01_API_VS_local",
   "title": "Cloud APIs vs local models",
   "description": "The same prompts through OpenAI, Gemini, Hugging Face and a local Ollama model, compared side by side.",
   "files": 6,
   "loc": 175,
   "libraries": [
    "dotenv",
    "google.generativeai",
    "ollama",
    "openai",
    "requests"
   ],
   "first": "2026-10-20",
   "last": "2026-10-20"
  },
  {
   "path": "02_module1/week_02/02_chatbot",
   "title": "CLI chatbot with switchable providers",
   "description": "Command-line chatbot whose provider and model come from a config file.",
   "files": 2,
   "loc": 74,
   "libraries": [
    "dotenv",
    "google.generativeai",
    "openai"
   ],
   "first": "2026-10-20",
   "last": "2026-10-20"
  },
  {
   "path": "02_module1/week_02/03_capstone",
   "title": "Streamlit chat assistant with memory",
   "description": "Web chat UI with conversation history, routing to OpenAI or Gemini from config.",
   "files": 2,
   "loc": 64,
   "libraries": [
    "dotenv",
    "google.generativeai",
    "openai",
    "streamlit"
   ],
   "first": "2026-10-20",
   "last": "2026-10-20"
  },
  {
   "path": "02_module1/week_04/Finetuning-Project",
   "title": "Finetuning Project",
   "description": "",
   "files": 6,
   "loc": 515,
   "libraries": [
    "datasets",
    "jsonlines",
    "peft",
    "torch",
    "transformers"
   ],
   "first": "2026-10-20",
   "last": "2026-10-20"
  },
  {
   "path": "03_module2/week_01/01_llm_in_langchain",
   "title": "LLM In Langchain",
   "description": "",
   "files": 3,
   "loc": 69,
   "libraries": [
    "dotenv",
    "langchain_google_genai",
    "langchain_openai"
   ],
   "first": "2026-10-20",
   "last": "2026-10-20"
  },
  {
   "path": "03_module2/week_01/02_prompts-in-langchain",
   "title": "Prompts In Langchain",
   "description": "",
   "files": 3,
   "loc": 118,
   "libraries": [
    "dotenv",
    "langchain_core",
    "langchain_google_genai",
    "langchain_openai"
   ],
   "first": "2026-10-20",
   "last": "2026-10-20"
  },
  {
   "path": "99_live_sessions/01_call_transcript_qa",
   "title": "Call-transcript classification and QA evaluation",
   "description": "Live-session project. A LangChain pipeline that classifies customer-support calls and scores tone, resolution and knowledge accuracy with structured outputs.",
   "files": 13,
   "loc": 801,
   "libraries": [
    "dotenv",
    "fastapi",
    "langchain_core",
    "langchain_google_genai",
    "langchain_openai",
    "numpy",
    "pandas",
    "pydantic",
    "src",
    "tqdm"
   ],
   "first": "2026-10-20",
   "last": "2026-10-20"
  }
 ],
 "notes": [
  {
   "path": "02_module1/week_01/notes/00_genai_development_roadmap.md",
   "week": 1,
   "words": 524,
   "title": "Lecture 0 · Roadmap: GenAI development"
  },
  {
   "path": "02_module1/week_01/notes/01_what_is_generative_ai.md",
   "week": 1,
   "words": 443,
   "title": "Lecture 1 · What is Generative AI?"
  },
  {
   "path": "02_module1/week_01/notes/02_traditional_ml_vs_generative_ai.md",
   "week": 1,
   "words": 479,
   "title": "Lecture 2 · Traditional AI (ML) vs Generative AI"
  },
  {
   "path": "02_module1/week_01/notes/03_what_are_llms.md",
   "week": 1,
   "words": 963,
   "title": "Lecture 3 · What are LLMs? (Evolution of LLMs)"
  },
  {
   "path": "02_module1/week_01/notes/04_responsible_ai.md",
   "week": 1,
   "words": 625,
   "title": "Lecture 4 · Responsible AI: bias, safety and ethics"
  },
  {
   "path": "02_module1/week_02/notes/05_developer_mindset_in_genai.md",
   "week": 2,
   "words": 765,
   "title": "Lecture 5 · The developer mindset in GenAI (Week 2)"
  },
  {
   "path": "02_module1/week_03/notes/07_prompt_tuning_vs_fine_tuning.md",
   "week": 3,
   "words": 762,
   "title": "Lecture 7 · Prompt tuning vs fine-tuning basics (Week 3)"
  },
  {
   "path": "02_module1/week_03/notes/08_lora_and_qlora.md",
   "week": 3,
   "words": 1471,
   "title": "Lecture 8 · Lightweight fine-tuning: LoRA and QLoRA (Week 3)"
  },
  {
   "path": "02_module1/week_04/notes/06_api_vs_local_models.md",
   "week": 4,
   "words": 1469,
   "title": "Lecture 6 · APIs vs local models (Week 4)"
  },
  {
   "path": "02_module1/week_04/notes/10_progress_summary_and_learning_recap.md",
   "week": 4,
   "words": 744,
   "title": "Lecture 10 · Progress summary and learning recap (Week 4)"
  },
  {
   "path": "02_module1/week_04/notes/11_langchain_introduction.md",
   "week": 4,
   "words": 2446,
   "title": "Lecture 11 · LangChain introduction (Week 4)"
  },
  {
   "path": "02_module1/week_04/notes/12_models_in_langchain.md",
   "week": 4,
   "words": 1288,
   "title": "Lecture 12 · Models in LangChain (Week 4)"
  },
  {
   "path": "02_module1/week_04/notes/13_prompt_engineering_in_langchain.md",
   "week": 4,
   "words": 1706,
   "title": "Lecture 13 · Prompt engineering in LangChain (Week 4)"
  },
  {
   "path": "02_module1/week_04/notes/14_structured_output_and_output_parsers.md",
   "week": 4,
   "words": 1636,
   "title": "Lecture 14 · Structured output and output parsers (Week 4)"
  },
  {
   "path": "02_module1/week_04/notes/15_chains_in_langchain.md",
   "week": 4,
   "words": 1709,
   "title": "Lecture 15 · Chains in LangChain (Week 4)"
  },
  {
   "path": "02_module1/week_04/notes/16_memory_in_langchain.md",
   "week": 4,
   "words": 1647,
   "title": "Lecture 16 · Memory in LangChain (Week 4)"
  },
  {
   "path": "02_module1/week_04/notes/17_runnables_in_langchain.md",
   "week": 4,
   "words": 1695,
   "title": "Lecture 17 · Runnables in LangChain (Week 4)"
  },
  {
   "path": "02_module1/week_04/notes/18_introduction_to_rag.md",
   "week": 4,
   "words": 1861,
   "title": "Lecture 18 · Introduction to RAG (Week 4)"
  },
  {
   "path": "02_module1/week_04/notes/study_resources.md",
   "week": 4,
   "words": 1080,
   "title": "Study resources (Week 4)"
  }
 ],
 "practice": [
  "2_print_and_escape_sequences_practice",
  "4_variables_and_data_types_practice",
  "6_user_input_and_type_casting_practice",
  "8_operators_practice",
  "10_strings_practice",
  "12_debugging_practice",
  "14_lists_practice",
  "16_loops_if_else_practice",
  "17_docstrings_practice",
  "18_functions_practice",
  "19_tuples_practice",
  "20_dictionaries_practice",
  "21_sets_practice"
 ],
 "libraries": [
  [
   "dotenv",
   14
  ],
  [
   "langchain_core",
   7
  ],
  [
   "langchain_google_genai",
   7
  ],
  [
   "langchain_openai",
   7
  ],
  [
   "pandas",
   6
  ],
  [
   "src",
   6
  ],
  [
   "google.generativeai",
   5
  ],
  [
   "torch",
   5
  ],
  [
   "transformers",
   5
  ],
  [
   "openai",
   4
  ],
  [
   "peft",
   4
  ],
  [
   "pydantic",
   4
  ],
  [
   "datasets",
   3
  ],
  [
   "jsonlines",
   3
  ],
  [
   "ollama",
   2
  ],
  [
   "requests",
   2
  ],
  [
   "tqdm",
   2
  ],
  [
   "fastapi",
   1
  ],
  [
   "numpy",
   1
  ],
  [
   "streamlit",
   1
  ]
 ],
 "head": "85a5d839f5fb93ae464bb0aa8dcb4eef0835b27d"
}