Skip to content

Saumya-Ranjan-Mishra/AI-MultiAgent-DevOps-Engineer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AADE β€” AI Assistant DevOps Engineer

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.

Java Spring Boot LangChain4j Azure OpenAI React TypeScript

Demo

Recording.2026-04-20.120410.mp4

Screenshots

Upload Interface

The landing page with drag-and-drop file upload β€” accepts .log and .txt files up to 1MB.

Landing Page

Real-Time Agent Progress (SSE Streaming)

Watch each agent work in real-time. The browser receives Server-Sent Events as each agent starts and completes.

Agent Progress β€” Mid Pipeline

Agent Progress β€” Final Agent

Analysis Results β€” Three Tabs

Log Analysis β€” Detailed breakdown of errors, timeline, and root cause:

Log Analysis Tab

Investigation Report β€” Similar issues, documentation references, and ranked causes:

Investigation Report Tab

Solution Plan β€” Step-by-step commands, verification, and rollback procedures:

Solution Plan Tab

History Sidebar

All past analyses are persisted and accessible from the sidebar. Click any entry to reload its results.

History Sidebar


What It Does

Upload a DevOps log file (Kubernetes failures, database errors, deployment crashes, etc.) and AADE runs a 3-agent AI pipeline:

  1. Log Analyzer β€” Reads the log file using a tool-equipped agent, identifies errors, warnings, failure timelines, and root causes.
  2. Issue Investigator β€” Takes the analysis and researches the problem β€” finding similar issues, documentation references, and community-verified solutions.
  3. 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.


System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        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        β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Request Flow

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

Technologies Used

Backend

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)

Frontend

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

Design Patterns & Principles

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}/

Folder Structure

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

Prerequisites


Local Setup

1. Clone the Repository

git clone https://github.com/<your-username>/AADE.git
cd AADE

2. Configure Azure OpenAI Credentials

Edit 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-name

Note: The .env file is gitignored and will not be committed.

3. Start the Backend

cd backend

# Windows
.\mvnw.cmd spring-boot:run

# macOS / Linux
./mvnw spring-boot:run

The backend starts on http://localhost:8080.

You should see:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
  ...
Started AadeApplication in X.XXX seconds

4. Start the Frontend

Open a new terminal:

cd frontend
npm install
npm run dev

The frontend starts on http://localhost:5173.
The Vite dev server automatically proxies /api requests to the backend on port 8080.

5. Use the Application

  1. Open http://localhost:5173 in your browser
  2. Drag and drop a .log or .txt file (or use the sample files in dummy_logs/)
  3. Watch the three AI agents work in real-time with live progress updates
  4. View the results across three tabs: Log Analysis, Investigation Report, Solution Plan

API Endpoints

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)

Sample Log Files

Two sample log files are included in dummy_logs/ for testing:

  • kubernetes_deployment_error.log β€” ImagePullBackOff failure during a Kubernetes deployment
  • database_connection_error.log β€” PostgreSQL authentication failure with retry exhaustion

License

MIT

About

Multi-agent AI system that analyzes DevOps log files using 3 specialized LangChain4j agents.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors