# abn-apps/prompt-forge architecture

> Architecture diagram of the GitHub repository abn-apps/prompt-forge, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/abn-apps/prompt-forge
- Repository: https://github.com/abn-apps/prompt-forge

## Overview

Prompt Forge turns a raw prompt into a clarified, enriched, optionally compressed prompt through either its CLI or HTTP API. The shared service starts or resumes a LangGraph session; the graph analyzes sufficiency, pauses for user answers when needed, compiles the prompt, then compresses it. Results include token estimates and compression metadata. The README documents optional LLMLingua compression and configurable DSPy models; config internals were not sampled, so their wiring is shown only where supported by the documented workflow.

Main entry points: [`src/prompt_forge/service.py`](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/service.py) (Session Service), [`src/prompt_forge/graph.py`](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/graph.py) (Workflow Graph), [`src/prompt_forge/cli.py`](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/cli.py) (CLI), [`src/prompt_forge/api.py`](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/api.py) (HTTP API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User Interfaces"]
  node_cli["CLI<br/>[cli.py]"]
  node_api["HTTP API<br/>[api.py]"]
  node_result["Refinement Result<br/>[service.py]"]
end

subgraph group_runtime["Session Runtime"]
  node_service["Session Service<br/>[service.py]"]
  node_config["DSPy Config<br/>[config.py]"]
  node_graph["Workflow Graph<br/>[graph.py]"]
  node_state["Session State<br/>[state.py]"]
  node_checkpoint[("Memory Checkpointer<br/>[graph.py]")]
end

subgraph group_refinement["Refinement Stages"]
  node_analyzer["Sufficiency Analyzer<br/>[analyzer.py]"]
  node_human["Clarification Pause<br/>[nodes.py]"]
  node_compiler["Prompt Compiler<br/>[compiler.py]"]
end

subgraph group_optimization["Optimization"]
  node_compress["Compression Stage<br/>[compression.py]"]
  node_tokeninfo["Token Estimates<br/>[service.py]"]
end

node_user(("Prompt User"))
node_model{{"DSPy Model"}}
node_llmlingua{{"LLMLingua-2"}}

node_user -->|"enters prompt"| node_cli
node_user -->|"submits prompt"| node_api
node_cli -->|"starts / resumes"| node_service
node_api -->|"starts / resumes"| node_service
node_service -->|"configures DSPy"| node_config
node_service -->|"compiles / invokes"| node_graph
node_service -->|"initializes state"| node_state
node_graph -->|"dispatches analysis"| node_analyzer
node_graph -->|"dispatches pause"| node_human
node_graph -->|"dispatches compile"| node_compiler
node_graph -->|"dispatches compression"| node_compress
node_graph -->|"persists sessions"| node_checkpoint
node_analyzer -.->|"requests judgment"| node_model
node_compiler -.->|"requests enrichment"| node_model
node_human -->|"asks / receives answers"| node_user
node_compress -.->|"compresses prompt"| node_llmlingua
node_service -->|"estimates tokens"| node_tokeninfo
node_service -->|"builds result"| node_result
node_result -->|"returns output"| node_cli
node_result -->|"returns response"| node_api

click node_cli "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/cli.py"
click node_api "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/api.py"
click node_service "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/service.py"
click node_config "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/config.py"
click node_graph "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/graph.py"
click node_state "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/state.py"
click node_checkpoint "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/graph.py"
click node_analyzer "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/analyzer.py"
click node_human "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/nodes.py"
click node_compiler "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/compiler.py"
click node_compress "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/compression.py"
click node_tokeninfo "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/service.py"
click node_result "https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/service.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_api,node_result,node_user toneBlue
class node_service,node_config,node_graph,node_state,node_checkpoint toneAmber
class node_analyzer,node_human,node_compiler toneMint
class node_compress,node_tokeninfo toneRose
class node_model,node_llmlingua toneIndigo
```

## Components

### User Interfaces

- [CLI](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/cli.py): `src/prompt_forge/cli.py`
- [HTTP API](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/api.py): `src/prompt_forge/api.py`
- [Refinement Result](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/service.py): `src/prompt_forge/service.py`

### Session Runtime

- [Session Service](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/service.py): `src/prompt_forge/service.py`
- [DSPy Config](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/config.py): `src/prompt_forge/config.py`
- [Workflow Graph](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/graph.py): `src/prompt_forge/graph.py`
- [Session State](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/state.py): `src/prompt_forge/state.py`
- [Memory Checkpointer](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/graph.py): `src/prompt_forge/graph.py`

### Refinement Stages

- [Sufficiency Analyzer](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/analyzer.py): `src/prompt_forge/analyzer.py`
- [Clarification Pause](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/nodes.py): `src/prompt_forge/nodes.py`
- [Prompt Compiler](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/compiler.py): `src/prompt_forge/compiler.py`

### Optimization

- [Compression Stage](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/compression.py): `src/prompt_forge/compression.py`
- [Token Estimates](https://github.com/abn-apps/prompt-forge/blob/main/src/prompt_forge/service.py): `src/prompt_forge/service.py`

### Other components

- **Prompt User**
- **DSPy Model**
- **LLMLingua-2**

## Connections

- Prompt User → CLI: enters prompt
- Prompt User → HTTP API: submits prompt
- CLI → Session Service: starts / resumes
- HTTP API → Session Service: starts / resumes
- Session Service → DSPy Config: configures DSPy
- Session Service → Workflow Graph: compiles / invokes
- Session Service → Session State: initializes state
- Workflow Graph → Sufficiency Analyzer: dispatches analysis
- Workflow Graph → Clarification Pause: dispatches pause
- Workflow Graph → Prompt Compiler: dispatches compile
- Workflow Graph → Compression Stage: dispatches compression
- Workflow Graph → Memory Checkpointer: persists sessions
- Sufficiency Analyzer → DSPy Model: requests judgment
- Prompt Compiler → DSPy Model: requests enrichment
- Clarification Pause → Prompt User: asks / receives answers
- Compression Stage → LLMLingua-2: compresses prompt
- Session Service → Token Estimates: estimates tokens
- Session Service → Refinement Result: builds result
- Refinement Result → CLI: returns output
- Refinement Result → HTTP API: returns response
