A multi-agent AI system that analyzes production log files, investigates root causes, and generates step-by-step remediation plans β powered by three specialized AI agents working in a sequential pipeline with real-time streaming updates.
Recording.2026-04-20.120410.mp4
The landing page with drag-and-drop file upload β accepts .log and .txt files up to 1MB.
Watch each agent work in real-time. The browser receives Server-Sent Events as each agent starts and completes.
Log Analysis β Detailed breakdown of errors, timeline, and root cause:
Investigation Report β Similar issues, documentation references, and ranked causes:
Solution Plan β Step-by-step commands, verification, and rollback procedures:
All past analyses are persisted and accessible from the sidebar. Click any entry to reload its results.
Upload a DevOps log file (Kubernetes failures, database errors, deployment crashes, etc.) and AADE runs a 3-agent AI pipeline:
- Log Analyzer β Reads the log file using a tool-equipped agent, identifies errors, warnings, failure timelines, and root causes.
- Issue Investigator β Takes the analysis and researches the problem β finding similar issues, documentation references, and community-verified solutions.
- Solution Specialist β Synthesizes everything into an actionable remediation plan with step-by-step commands, verification steps, rollback procedures, and prevention strategies.
Each agent runs sequentially, passing its output to the next. The browser receives real-time progress updates via Server-Sent Events (SSE) as each agent starts and completes.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BROWSER β
β β
β ββββββββββββ ββββββββββββββββ βββββββββββββββββββββ β
β β Upload βββ>β SSE Stream βββ>β Results (3 Tabs) β β
β β (.log) β β EventSource β β react-markdown β β
β ββββββββββββ ββββββββ¬ββββββββ βββββββββββββββββββββ β
βββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββ
β GET /api/analyze/{id}/stream
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SPRING BOOT BACKEND β
β β
β βββββββββββββββββββββββ βββββββββββββββββββββββββββββ β
β β AnalysisController ββββ>β AnalysisServiceImpl β β
β β (REST + SSE) β β (Pipeline Orchestration) β β
β βββββββββββββββββββββββ βββββββββββββ¬ββββββββββββββββ β
β β β
β ββββββββββββββββββββββΌβββββββββββββββ β
β βΌ βΌ βΌ β
β ββββββββββββββββ βββββββββββββββββ ββββββββββββ β
β β LogAnalyzer β β Issue β β Solution β β
β β Agent β β Investigator β β Specialist β
β β + LogReader β β Agent β β Agent β β
β β Tool β β β β β β
β ββββββββ¬ββββββββ βββββββββ¬ββββββββ ββββββ¬ββββββ β
β β β β β
β ββββββββββ¬ββββββββββ β β
β βΌ βΌ β
β ββββββββββββββββββββββββββββββββββββ β
β β Azure OpenAI (GPT-4) β β
β ββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β LocalStorageService (File-based persistence) β β
β β data/{chatId}/metadata.json, input.log, *.md β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1. POST /api/analyze β Upload file, get chatId
2. GET /api/analyze/{id}/stream β SSE connection opens
βββ event: AGENT_START β "Log Analyzer is reading your log file..."
βββ event: AGENT_COMPLETE β "Log Analyzer β Complete"
βββ event: AGENT_START β "Issue Investigator is researching..."
βββ event: AGENT_COMPLETE β "Issue Investigator β Complete"
βββ event: AGENT_START β "Solution Specialist is building a plan..."
βββ event: AGENT_COMPLETE β "Solution Specialist β Complete"
βββ event: PIPELINE_COMPLETE β "Analysis Complete!"
3. GET /api/analyze/{id}/results β Full results JSON (3 markdown reports)
4. GET /api/analyses β History list
| Technology | Version | Purpose |
|---|---|---|
| Java | 21 | Language runtime (records, text blocks, pattern matching) |
| Spring Boot | 4.0.5 | Web framework, dependency injection, auto-configuration |
| Spring Web (SseEmitter) | β | Server-Sent Events for real-time streaming to browser |
| LangChain4j | 1.0.0-beta3 | AI Services pattern β declarative AI agent interfaces with @SystemMessage, @UserMessage, @Tool |
| Azure OpenAI | GPT-4 | LLM provider for all three agents |
| Jackson | β | JSON serialization for SSE payloads and metadata persistence |
| Maven | β | Build tool with wrapper (mvnw) |
| Technology | Version | Purpose |
|---|---|---|
| React | 19 | Component-based UI |
| TypeScript | 6 | Type-safe JavaScript |
| Vite | 8 | Build tool with dev server proxy (/api β backend) |
| Tailwind CSS | 3 | Utility-first styling |
| react-markdown | 10 | Render agent outputs as formatted Markdown |
| remark-gfm | 4 | GitHub Flavored Markdown (tables, task lists) |
| Lucide React | β | Icon library |
| EventSource API | β | Browser-native SSE client |
| Concept | Implementation |
|---|---|
| SOLID β Single Responsibility | Controller handles HTTP only. Service handles pipeline logic. Storage handles file I/O. Each config class has one concern. |
| SOLID β Open/Closed | StorageService interface β swap LocalStorageService for cloud storage without changing AnalysisServiceImpl |
| SOLID β Liskov Substitution | Any StorageService implementation is interchangeable |
| SOLID β Interface Segregation | StorageService and AnalysisService are separate interfaces with focused methods |
| SOLID β Dependency Inversion | Services depend on ChatLanguageModel (interface), not AzureOpenAiChatModel (concrete). All injected via constructor. |
| Server-Sent Events (SSE) | One-way server-to-client streaming over HTTP. SseEmitter keeps connection open; async thread pushes progress events. Browser's EventSource API auto-handles reconnection. |
| AI Services Pattern (LangChain4j) | Agents defined as Java interfaces with prompt annotations. LangChain4j generates implementations at runtime via dynamic proxy. No boilerplate. |
| Sequential Pipeline | Agent outputs chain: Log Analysis β Investigation β Solution. Each agent builds on the previous agent's work. |
| Async Execution | Pipeline runs on a dedicated ThreadPoolTaskExecutor, freeing Tomcat threads for other requests |
| File-Based Persistence | Each analysis stored in data/{chatId}/ |
AADE/
βββ .env # Shared env vars (gitignored)
βββ .gitignore
βββ docker-compose.yml
βββ README.md
βββ dummy_logs/ # Sample log files for testing
β βββ kubernetes_deployment_error.log
β βββ database_connection_error.log
β
βββ backend/ # Spring Boot 4 + Java 21
β βββ .env # Azure OpenAI credentials (gitignored)
β βββ .gitignore
β βββ pom.xml
β βββ mvnw / mvnw.cmd # Maven wrapper
β βββ Dockerfile
β βββ src/main/java/org/AI/multiagentdevopsengineer/
β βββ AadeApplication.java # Entry point (conditional SSL fix)
β β
β βββ config/
β β βββ ModelConfig.java # @Bean ChatLanguageModel (Azure OpenAI)
β β βββ AgentConfig.java # @Bean for 3 AI agent proxies
β β βββ AsyncConfig.java # ThreadPoolTaskExecutor for pipeline
β β βββ CorsConfig.java # CORS for frontend dev server
β β
β βββ controller/
β β βββ AnalysisController.java # REST endpoints + file validation
β β
β βββ service/
β β βββ AnalysisService.java # Interface
β β βββ AnalysisServiceImpl.java # Pipeline orchestration + SSE
β β βββ StorageService.java # Interface (DIP)
β β βββ LocalStorageService.java # File-based implementation
β β
β βββ model/
β β βββ AnalysisMetadata.java # Record: chatId, fileName, status
β β βββ AnalysisResult.java # Record: metadata + 3 markdown outputs
β β βββ AgentProgress.java # Record: SSE event payload
β β
β βββ agents/
β β βββ LogAnalyzerAgent.java # LangChain4j AI Service interface
β β βββ IssueInvestigatorAgent.java # LangChain4j AI Service interface
β β βββ SolutionSpecialistAgent.java# LangChain4j AI Service interface
β β
β βββ tools/
β β βββ LogReaderTool.java # @Tool β reads log files from disk
β β
β βββ exception/
β βββ FileValidationException.java
β βββ AnalysisNotFoundException.java
β βββ GlobalExceptionHandler.java # @RestControllerAdvice
β
βββ frontend/ # React 19 + Vite + TypeScript
β βββ .gitignore
β βββ package.json
β βββ vite.config.ts # Dev proxy: /api β localhost:8080
β βββ tailwind.config.js
β βββ tsconfig.json
β βββ index.html
β βββ Dockerfile
β βββ nginx.conf # Production SPA + API proxy
β βββ src/
β βββ main.tsx # React entry point
β βββ App.tsx # Main app shell
β βββ index.css # Tailwind directives
β βββ types/
β β βββ index.ts # TypeScript interfaces
β βββ services/
β β βββ api.ts # Upload, SSE, fetch results
β βββ hooks/
β β βββ useAnalysis.ts # State machine (idleβuploadβstreamβdone)
β βββ components/
β βββ HeroSection.tsx # Landing hero
β βββ FileUpload.tsx # Drag-and-drop + validation
β βββ ProgressTracker.tsx # Real-time agent status (SSE)
β βββ ResultsTabs.tsx # 3-tab markdown viewer
β βββ HistorySidebar.tsx # Past analyses list
β
βββ assets/
βββ screenshots/ # Add your screenshots here
- Java 21 β Download Eclipse Temurin
- Node.js 20+ β Download Node.js
- Azure OpenAI β An active Azure subscription with an OpenAI resource deployed
git clone https://github.com/<your-username>/AADE.git
cd AADEEdit backend/.env with your actual Azure OpenAI credentials:
AZURE_OPENAI_KEY=your-actual-api-key
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_OPENAI_DEPLOYMENT=your-deployment-nameNote: The
.envfile is gitignored and will not be committed.
cd backend
# Windows
.\mvnw.cmd spring-boot:run
# macOS / Linux
./mvnw spring-boot:runThe backend starts on http://localhost:8080.
You should see:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
...
Started AadeApplication in X.XXX seconds
Open a new terminal:
cd frontend
npm install
npm run devThe frontend starts on http://localhost:5173.
The Vite dev server automatically proxies /api requests to the backend on port 8080.
- Open http://localhost:5173 in your browser
- Drag and drop a
.logor.txtfile (or use the sample files indummy_logs/) - Watch the three AI agents work in real-time with live progress updates
- View the results across three tabs: Log Analysis, Investigation Report, Solution Plan
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/analyze |
Upload a log file (multipart form, max 1MB). Returns { chatId } |
GET |
/api/analyze/{chatId}/stream |
SSE stream β real-time agent progress events |
GET |
/api/analyze/{chatId}/results |
Fetch completed analysis results (3 markdown reports) |
GET |
/api/analyses |
List all past analyses (sorted by newest first) |
Two sample log files are included in dummy_logs/ for testing:
kubernetes_deployment_error.logβ ImagePullBackOff failure during a Kubernetes deploymentdatabase_connection_error.logβ PostgreSQL authentication failure with retry exhaustion
MIT






