DEV Community

Exson Joseph
Exson Joseph

Posted on

A Guide to HITL, HOTL, and HOOTL Workflows

In the rush to automate everything with Large Language Models (LLMs), many make a critical mistake they treat AI as a binary choice either a human does the work, or the machine does.

In reality, the most successful AI implementations exist on a spectrum of human intervention. We call these HITL (Human-in-the-Loop), HOTL (Human-on-the-Loop), and HOOTL (Human-out-of-the-Loop).

Choosing the wrong workflow can lead to either a "bottleneck" (too much human interference) or "hallucination disasters" (too much machine autonomy). Here is everything you need to know about these three pillars of AI architecture.

1. Human-in-the-Loop (HITL)

In an HITL workflow, the AI is a sophisticated assistant that cannot finish its task without a human "checkpoint."

When to use it:

  • High-stakes legal or medical documents.
  • Creative writing where "voice" and "nuance" are vital.
  • Generating code for production systems.

Code Example

In this example, Gemini writes a press release, but the script refuses to "publish" it until a human manually reviews and edits the text.

from google import genai
from dotenv import load_dotenv

load_dotenv(override=True)

client = genai.Client()

MODEL_NAME = "gemini-2.5-flash"

def hitl_press_release(topic):
    """HITL: Human reviews and approves/edit AI output before finalizing."""
    prompt = f"Write a short press release for: {topic}"
    ai_draft = client.models.generate_content(
        model=MODEL_NAME,
        contents=prompt
    ).text

    print("\n--- [ACTION REQUIRED] REVIEW AI DRAFT ---")
    print(ai_draft)

    feedback = input("\nWould you like to (1) Accept, (2) Rewrite, or (3) Edit manually? ")

    if feedback == "1":
        final_output = ai_draft
    elif feedback == "2":
        critique = input("What should the AI change? ")
        return hitl_press_release(f"{topic}. Note: {critique}")
    else:
        final_output = input("Paste your manually edited version here: ")

    print("\n[SUCCESS] Press release finalized and saved.")
    return final_output

hitl_press_release("Launch of a new sustainable coffee brand")
Enter fullscreen mode Exit fullscreen mode

2. Human-on-the-Loop (HOTL)

In HOTL, the AI operates autonomously and at scale, but a human stands by a "dashboard" to monitor the outputs. The human doesn't approve every single item instead, they intervene only when they see the AI deviating from the goal.

When to use it:

  • Live social media moderation.
  • Real-time customer support chatbots.
  • Monitoring industrial IoT sensors.

Code Example

In this example, Gemini categorizes customer tickets. The human isn't asked for permission for every ticket, but they have a "Window of Intervention" to stop the process if the AI starts making mistakes.

from google import genai
from dotenv import load_dotenv
import time

load_dotenv(override=True)

client = genai.Client()

MODEL_NAME = "gemini-2.5-flash"

def hotl_support_monitor(tickets):
    """On-the-Loop: Human monitors AI decisions in real-time and can veto."""
    print("System active. Monitoring AI actions... (Press Ctrl+C to PAUSE/VETO)")

    for i, ticket in enumerate(tickets):
        try:
            response = client.models.generate_content(
                model=MODEL_NAME,
                contents=f"Categorize this ticket (Billing/Tech/Sales): {ticket}"
            )
            category = response.text.strip()

            print(f"[Log {i+1}] Ticket: {ticket[:30]}... -> Action: Tagged as {category}")

            time.sleep(2)

        except KeyboardInterrupt:
            print(f"\n[VETO] Human supervisor has paused the system on ticket: {ticket}")
            action = input("Should we (C)ontinue or (S)kip this ticket? ")
            if action.lower() == 's':
                continue
            else:
                pass

tickets = ["My bill is too high", "The app keeps crashing", "How do I buy more?"]
hotl_support_monitor(tickets)
Enter fullscreen mode Exit fullscreen mode

3. Human-out-of-the-Loop (HOOTL)

The AI handles the entire process from start to finish. Human intervention only happens after the fact during an audit or a weekly performance review. This is the goal for high-volume, low-risk tasks.

When to use it:

  • Spam filtering.
  • Translating massive databases of product descriptions.
  • Basic data cleaning and formatting.

Code Example

This script takes customer reviews and summarizes them into a report without ever stopping to ask a human for help.

from google import genai
from dotenv import load_dotenv

load_dotenv(override=True)

client = genai.Client()

MODEL_NAME = "gemini-2.5-flash"

def hootl_batch_processor(data_list):
    """Human-out-of-the-Loop: AI processes batch independently; human reviews final report."""
    print(f"Starting HOOTL process: {len(data_list)} items to process.")
    final_report = []

    for item in data_list:
        response = client.models.generate_content(
            model=MODEL_NAME,
            contents=f"Extract key sentiment (Happy/Sad/Neutral): {item}"
        )
        final_report.append({"data": item, "sentiment": response.text.strip()})

    return final_report

reviews = ["Great food!", "Slow service", "Expensive but worth it"]
report = hootl_batch_processor(reviews)
print("Final Report:", report)
Enter fullscreen mode Exit fullscreen mode

Which one should you build?

Workflow Interaction Level Human Effort Latency (Speed) Risk Tolerance
HITL Active High Slow Zero Tolerance (High Risk)
HOTL Passive Medium Medium Managed Risk (Scale + Safety)
HOOTL None Low Very Fast Low Risk (High Volume)

Top comments (0)