MahaSyllabus

5

 Step 1 — User Request Arrives

FastAPI receives a request like:

{

   "title":"Customer Churn",

   "difficulty":"Medium",

   "dataset_id":"123",

   "notebook_type":"AIML"

}

This is converted into

GenerateNotebookRequest

(Pydantic Model)

Step 2 — Create Service Object

service = NotebookGenerationService(request)

Constructor executes

__init__()

Stores

self.request

Nothing is generated yet.

Step 3 — generate_notebook()

Main method starts.

generate_notebook()

This is the master controller.

It calls everything else.

Step 4 — Initialize LLM

initialize_llm()

Internally

Model().get_initialized_llm()

Returns

GPT

Claude

Gemini


(whichever configured)

Stored as

llm

Step 5 — Initialize Database

initialize_database()

Runs

Base.metadata.create_all(engine)

Creates tables if missing.

Step 6 — generate_notebook_draft()

Now service decides which pipeline to execute.

if notebook_type == PYTHON:

Python Pipeline

OR

AIML Pipeline

AIML Pipeline (Detailed)

This is the longer flow.

Step 7 — generate_dataset()

Called first.

generate_dataset()

Inside this method

7.1 Build DataSpec Prompt

build_dataspec_prompt()

Loads

prompts/data_spec_prompt.txt

Combines

Template


+


User Request

Creates one large prompt.

7.2 Invoke LLM

invoke_llm()

LLM generates

DataSpec

7.3 Save JSON

save_json()

Stores

data_spec.json

Useful for debugging.

7.4 Hash Dataset

DataSpecDedup(spec).hash()

Creates

Unique Hash

Example

A93D2B11

7.5 Database Lookup

Session(engine)

Runs

SELECT

Checks

Already generated?

If Found

Returns immediately

Existing CSV


Existing Dataset Overview


Hash

No regeneration.

If Not Found

Continue.

7.6 Build Dataset Prompt

build_dataset_prompt()

Uses

DataSpec


+


Prompt Template

7.7 Invoke LLM Again

Generates

Dataset Overview

Contains

Dataset Name


Columns


Description


Purpose

7.8 Create CSV

Calls

DataSpecMapper()

make_csv()

Creates

customer.csv

7.9 Store Database

Stores

Hash


CSV Path


Overview


Specification

7.10 Upload Dataset

If

aip_client

exists

Uploads dataset

Returns

GeneratedDataset

Containing

DataSpec


DatasetOverview


CSV Path


Hash

Step 8 — Generate Notebook Plan

generate_notebook_plan()

Inside

Loads

notebook_plan_prompt.txt

Creates Prompt

LLM

Returns

NotebookPlan

Contains

Sections


Topics


Flow


Exercises


Notebook Structure

Step 9 — Build Assessment Prompt

build_assessment_prompt()

Combines

Notebook Plan


+


Dataset Overview


+


DataSpec


+


User Request


+


Example Notebook

Creates one huge prompt.

Step 10 — Invoke LLM

Again

invoke_llm()

Generates

Assessment Units

Like

Markdown


Code Cells


Questions


Hints


Solutions

Step 11 — Mapper Layer

LLM output is not directly usable.

Mapper converts

Assessment Units

NotebookDraft

using

AssessmentsMapper

Step 12 — Export Notebook

export_notebook()

Calls

NotebookFormatter.render()

Creates

Notebook Object

Then

nbformat.write()

Generates

Customer_Churn.ipynb

Step 13 — Return Response

Finally returns

Notebook File Name


Notebook Metadata


Download Path


Status

FastAPI

JSON Response

Frontend

Overall Backend Flow

Client Request

      │

      ▼

FastAPI Router

      │

      ▼

GenerateNotebookRequest

      │

      ▼

NotebookGenerationService

      │

      ├── Initialize LLM

      ├── Initialize Database

      ├── Generate Dataset

      │ ├── Build Prompt

      │ ├── LLM

      │ ├── Hash

      │ ├── Check DB

      │ ├── Generate CSV

      │ └── Save DB

      │

      ├── Generate Notebook Plan

      │ └── LLM

      │

      ├── Build Assessment Prompt

      │

      ├── Generate Assessment Units

      │ └── LLM

      │

      ├── Mapper

      │ └── NotebookDraft

      │

      ├── NotebookFormatter

      │ └── .ipynb File

      │

      ▼

Return Response