DEV Community

Ashutosh Sarangi
Ashutosh Sarangi

Posted on

Python project folder structure for a GenAI application

πŸ“ Project Structure Overview

genai_app/
β”‚
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ main.py               # FastAPI app entry point
β”‚   β”œβ”€β”€ config.py             # Environment/config settings
β”‚   β”œβ”€β”€ models/               # Pydantic models and data schemas
β”‚   β”‚   └── genai.py
β”‚   β”œβ”€β”€ services/             # Core GenAI logic (e.g., LangChain, transformers)
β”‚   β”‚   └── genai_service.py
β”‚   β”œβ”€β”€ api/                  # Route definitions
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   └── genai_routes.py
β”‚   β”œβ”€β”€ utils/                # Helper functions, logging, etc.
β”‚   β”‚   └── helpers.py
β”‚   └── middleware/           # Custom middleware (e.g., logging, auth)
β”‚       └── auth.py
β”‚
β”œβ”€β”€ tests/                    # Unit and integration tests
β”‚   β”œβ”€β”€ __init__.py
β”‚   └── test_genai.py
β”‚
β”œβ”€β”€ requirements.txt          # Python dependencies
β”œβ”€β”€ .env                      # Environment variables
β”œβ”€β”€ README.md                 # Project documentation
└── run.sh                    # Shell script to run the app with Uvicorn
Enter fullscreen mode Exit fullscreen mode

πŸš€ Key Components Explained

main.py

from fastapi import FastAPI
from app.api.genai_routes import router as genai_router

app = FastAPI(title="GenAI FastAPI App")
app.include_router(genai_router)
Enter fullscreen mode Exit fullscreen mode

genai_routes.py

from fastapi import APIRouter
from app.services.genai_service import generate_response
from app.models.genai import GenAIRequest

router = APIRouter()

@router.post("/generate")
def generate_text(request: GenAIRequest):
    return generate_response(request.prompt)
Enter fullscreen mode Exit fullscreen mode

genai_service.py

def generate_response(prompt: str) -> dict:
    # Call to GenAI model (e.g., OpenAI, HuggingFace, LangChain)
    return {"response": f"Generated text for: {prompt}"}
Enter fullscreen mode Exit fullscreen mode

πŸ§ͺ Running the App

run.sh

#!/bin/bash
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Enter fullscreen mode Exit fullscreen mode

🧠 Optional Enhancements

  • Docker support: Add Dockerfile and docker-compose.yml
  • Async support: Use async def in routes and services
  • Model integration: Add HuggingFace or OpenAI SDK in genai_service.py
  • LangGraph or LangChain: Integrate in services/ for advanced workflows

Top comments (0)