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)