1What is this tool?
Imagine you have a very intelligent assistant, available 24/7, living inside your own computer in the cloud. This assistant can read, write, summarize, research and much more.
Smart chat
Chat like you would with a human assistant. Ask anything.
Reads documents
Upload PDFs, Word or text files and ask for summaries.
100% private
Everything stays inside your company. Nothing goes online.
Agent team
Multiple assistants work together for complex tasks.
It's like having your own ChatGPT, but private, inside your company, with the ability to work as a team of multiple assistants at once.
2How to enter the application
You only need a web browser (Chrome, Safari, Edge or Firefox) and an address provided by your administrator.
Open your browser
Use whichever you prefer. No installation needed.
Type the address
In the address bar, type something like this (your admin will give you the exact URL):
http://your-company-server.com:3000
Sign in
The first time you'll need to create your account. After that, just type your email and password.
Ask your administrator to verify that port 3000 is open on the server. It's a technical step they must handle.
3Create your account
The first time you enter, the system will ask you to create an account. It's very quick.
- Click "Sign up" or "Register"
- Type your full name
- Type your email (can be your company one)
- Create a secure password (minimum 8 characters)
- Click "Create Account"
The first person to create an account automatically becomes administrator. If you're first, you'll have extra powers to manage users.
4Chat with the AI
Once inside, you'll see a screen very similar to WhatsApp or ChatGPT. It's that simple.
The 3 basic elements of the screen
How to use it
- Choose a model in the dropdown above (start with llama3.1:8b)
- Type your question in the box below
- Press Enter and wait for the response (10-30 seconds)
Examples of things you can ask
- "Explain quantum computing in simple words"
- "Help me draft an email to my boss requesting vacation"
- "Translate this text to Spanish: [paste text]"
- "Give me 10 ideas for a marketing campaign for my product"
- "Summarize this article in 5 key points: [paste article]"
5Upload files for analysis
You can upload documents and ask the assistant to read, summarize or compare them.
Click the clip icon
It's at the bottom, near the text box.
Select your file
Works with PDF, Word, Excel, TXT and more.
Write what you want done
For example: "Summarize this contract in 10 points" or "What are the risks mentioned in this document?"
If you have multiple documents, upload them all and ask to compare them. For example: "Compare these 3 contracts and tell me the main differences".
6Request complex reports (agents)
This is the most powerful part. Instead of a single response, multiple "assistants" work as a team to give you a complete result.
What is an agent?
An agent is an assistant specialized in a task. When you ask for something complex, the system automatically activates multiple agents that work in a chain:
Planner
Breaks down the task into small, organized steps.
Researcher
Finds information and analyzes it deeply.
Writer
Writes the final report with all the info.
How to request a report
Simply write your request clearly and completely. For example:
"Research the electric vehicle market in Latin America during 2024 and write me an executive report with: market size, main players, trends and recommendations."
Important: these reports take longer (2-5 minutes) because multiple agents are working. It's normal. You'll see the progress step by step.
7Common issues
| Issue | Solution |
|---|---|
| Response takes too long | Normal for long texts. Wait 30-60 seconds. If it takes more than 3 minutes, reload the page. |
| Chat got stuck thinking | Press the stop button and try again. |
| No model appears | Tell your administrator. It means the internal service is not connected. |
| Can't upload my file | Verify it's under 20 MB and in a supported format (PDF, DOCX, TXT). |
| Forgot my password | Contact the system administrator to reset your access. |
8Best practices
For better responses
- Be specific: instead of "tell me about marketing", ask "give me 5 marketing strategies for a coffee shop in Madrid".
- Give context: explain the purpose. "I need an email for an upset customer because..." works better than "write me an email".
- Request format: "as a table", "in 5 points", "in a formal tone" - the assistant adapts.
- Iterate: if the answer isn't exact, ask to adjust it. "Make it shorter", "add examples", "change the tone".
What to avoid
- Don't share passwords, credit cards or very sensitive data.
- Don't blindly trust numbers - verify critical data.
- Don't use the same conversation for different topics - open a new one.
You're all set!
Open the application and start exploring. The best way to learn is by doing.
1System architecture
Complete stack deployed on a single EC2 g4dn.2xlarge instance with GPU acceleration.
| Layer | Technology | Port |
|---|---|---|
| Operating System | Ubuntu 26.04 LTS - kernel 7.0 AWS | - |
| GPU Runtime | NVIDIA Driver 580 - CUDA 13 | - |
| Container Runtime | Docker + NVIDIA Container Toolkit | - |
| LLM Runtime | Ollama | 11434 (localhost) |
| REST API | FastAPI + Uvicorn (systemd) | 8000 |
| Web UI | Open WebUI (Docker) | 3000 |
Important system paths
# Main runtime
/opt/agentic-runtime/
app/ # FastAPI code
main.py
config.py
routers/ # health, agents, crews
graphs/ # LangGraph state machines
crews/ # CrewAI crews
venv/ # Python 3.12 with deps
data/ # SQLite checkpoints
logs/ # api.log, api-error.log
docker-compose.yml # Open WebUI
systemd services
agentic-api.service -> uvicorn app.main:app on :8000
open-webui.service -> docker compose up (Open WebUI)
ollama.service -> LLM runtime on :11434
2API Endpoints
REST API documented with OpenAPI. Swagger UI available at /docs.
| Method | Endpoint | Description |
|---|---|---|
| GET | / | Service info |
| GET | /health | Healthcheck |
| GET | /models | Available Ollama models |
| POST | /agents/run | Runs LangGraph graph (research) |
| POST | /crews/run | Runs CrewAI crew |
| GET | /docs | Interactive Swagger UI |
| GET | /redoc | Alternative ReDoc |
Request schema
# POST /agents/run
{
"query": "string", # Question or task
"thread_id": "string" # Session ID (for checkpoints)
}
# POST /crews/run
{
"query": "string" # Task for the crew
}
3curl Examples
Healthcheck
curl -s http://localhost:8000/health
# Response:
{"status":"ok","service":"agentic-ai-runtime-server","version":"1.0.0"}
List models
curl -s http://localhost:8000/models | jq
Run LangGraph agent
curl -X POST http://localhost:8000/agents/run \
-H "Content-Type: application/json" \
-d '{
"query": "Explain how LangGraph works",
"thread_id": "demo-001"
}' | jq
The /agents/run endpoint runs 3 sequential LLM calls (planner, researcher, writer). It may take 30-60s on T4. Configure timeout > 120s in your client.
Run CrewAI crew
curl -X POST http://localhost:8000/crews/run \
-H "Content-Type: application/json" \
-d '{"query": "Research Kubernetes"}' | jq
4systemd service management
Basic commands
# Status
sudo systemctl status agentic-api open-webui ollama
# Restart
sudo systemctl restart agentic-api
sudo systemctl restart open-webui
# Stop
sudo systemctl stop agentic-api
# Check if it starts at boot
sudo systemctl is-enabled agentic-api open-webui ollama
agentic-api service structure
# /etc/systemd/system/agentic-api.service
[Unit]
Description=Agentic AI Runtime Server API
After=network.target ollama.service
Wants=ollama.service
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/opt/agentic-runtime
EnvironmentFile=/opt/agentic-runtime/.env
ExecStart=/opt/agentic-runtime/venv/bin/uvicorn \
app.main:app --host 0.0.0.0 --port 8000
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
To change port, workers, or environment variables: edit .env or the service file, then run sudo systemctl daemon-reload and sudo systemctl restart agentic-api.
5Logs and monitoring
API Logs
# Real-time via journald
sudo journalctl -u agentic-api -f
# Last 100 lines
sudo journalctl -u agentic-api -n 100 --no-pager
# Errors today
sudo journalctl -u agentic-api --since today -p err
# Logs to file
tail -f /opt/agentic-runtime/logs/api.log
tail -f /opt/agentic-runtime/logs/api-error.log
Open WebUI Logs (Docker)
sudo docker logs -f open-webui
sudo docker logs --tail 100 open-webui
Ollama Logs
sudo journalctl -u ollama -f
GPU monitoring
# Snapshot
nvidia-smi
# Watch every 2 seconds
watch -n 2 nvidia-smi
# Processes using GPU
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
System resources
htop # CPU and RAM
df -h # Disk
sudo ss -tulpn # Open ports
sudo docker stats # Container resources
6Ollama model management
List installed models
ollama list
Download new model
# Recommended models for T4 (16 GB VRAM)
ollama pull qwen2.5:14b # ~9 GB - complex reasoning
ollama pull deepseek-coder:6.7b # ~4 GB - code
ollama pull llama3.2-vision:11b # ~8 GB - vision (multimodal)
# Small models (fast)
ollama pull phi3:mini
ollama pull gemma2:2b
Check available VRAM
nvidia-smi --query-gpu=memory.used,memory.free,memory.total --format=csv
Remove model
ollama rm model-name
Quick inference test
ollama run llama3.1:8b "Respond only: OK"
# Should respond in 1-3 seconds
T4 has 16 GB. Do not load more than 2 large models simultaneously. Ollama unloads them automatically when idle (5 min by default).
7Customize agents
Modify LangGraph graph
Edit /opt/agentic-runtime/app/graphs/research_graph.py. Current nodes are planner, researcher, writer. You can add more or change prompts.
# Example: add a "critic" node before the writer
def critic_node(state: ResearchState):
prompt = f"Critique this research:\n{state['research'][-1]}"
response = llm.invoke(prompt)
return {"research": [response.content]}
g.add_node("critic", critic_node)
g.add_edge("researcher", "critic")
g.add_edge("critic", "writer")
Modify CrewAI crew
Edit /opt/agentic-runtime/app/crews/research_crew.py. Change role, goal, backstory and description of each Task.
Adjust the model used
# Edit .env
sudo nano /opt/agentic-runtime/.env
# Change models
ROUTER_MODEL=llama3.2:3b
MAIN_MODEL=qwen2.5:14b # Change this
EMBED_MODEL=nomic-embed-text
# Restart to apply
sudo systemctl restart agentic-api
Add a new endpoint
# Create /opt/agentic-runtime/app/routers/custom.py
from fastapi import APIRouter
router = APIRouter(prefix="/custom", tags=["custom"])
@router.get("/ping")
async def ping():
return {"pong": True}
# Register in main.py
from app.routers import custom
app.include_router(custom.router)
# Restart
sudo systemctl restart agentic-api
8Troubleshooting
| Symptom | Probable cause | Solution |
|---|---|---|
Connection refused :8000 |
Service down | sudo systemctl restart agentic-api |
Connection refused :3000 |
Docker down | sudo systemctl restart open-webui |
| Timeout on /agents/run | 3 sequential LLM calls | Increase client timeout to 180s |
| OOM GPU | Models don't fit in 16 GB | Reduce loaded models or use Q4 quantization |
ModuleNotFoundError |
Missing deps in venv | source venv/bin/activate && uv pip install ... |
| WebUI shows no models | Ollama not reachable from Docker | Verify host.docker.internal in compose |
Quick diagnostic
# 1. Active services
systemctl is-active agentic-api open-webui ollama
# 2. Listening ports
sudo ss -tulpn | grep -E ':(3000|8000|11434)'
# 3. GPU accessible
nvidia-smi
# 4. Docker with GPU
sudo docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi
# 5. API responds
curl -s http://localhost:8000/health | jq
# 6. Ollama responds
curl -s http://localhost:11434/api/tags | jq
9Backup and restore
What to back up
- /opt/agentic-runtime/app/ - your customized code
- /opt/agentic-runtime/.env - configuration
- /opt/agentic-runtime/data/ - LangGraph SQLite checkpoints
- ollama list - model names (models will re-download)
- Docker volume open-webui-data - chat history
Full backup
# Create tarball
sudo tar -czf /tmp/agentic-backup-$(date +%Y%m%d).tar.gz \
/opt/agentic-runtime/app \
/opt/agentic-runtime/.env \
/opt/agentic-runtime/data
# Backup Docker volume
sudo docker run --rm \
-v open-webui-data:/data \
-v /tmp:/backup \
alpine tar czf /backup/open-webui-data.tar.gz -C /data .
# Download locally
scp ubuntu@your-ip:/tmp/agentic-backup-*.tar.gz ./
Restore
sudo tar -xzf agentic-backup-YYYYMMDD.tar.gz -C /
sudo systemctl restart agentic-api
Automate backups with a cron job that runs daily and uploads the tarball to S3. Example: 0 3 * * * /opt/scripts/backup.sh.