- Vision Encoder Service (OpenCLIP ViT-L/14, GPU-accelerated)
- FastAPI app with text/image embedding endpoints (768-dim)
- Docker support with NVIDIA GPU runtime
- Port 8001, health checks, model info API
- Qdrant Vector Database integration
- Port 6333/6334 (HTTP/gRPC)
- Image embeddings storage (768-dim, Cosine distance)
- Auto collection creation
- Vision RAG implementation
- VisionEncoderClient (Python client for API)
- Image Search module (text-to-image, image-to-image)
- Vision RAG routing in DAGI Router (mode: image_search)
- VisionEncoderProvider integration
- Documentation (5000+ lines)
- SYSTEM-INVENTORY.md - Complete system inventory
- VISION-ENCODER-STATUS.md - Service status
- VISION-RAG-IMPLEMENTATION.md - Implementation details
- vision_encoder_deployment_task.md - Deployment checklist
- services/vision-encoder/README.md - Deployment guide
- Updated WARP.md, INFRASTRUCTURE.md, Jupyter Notebook
- Testing
- test-vision-encoder.sh - Smoke tests (6 tests)
- Unit tests for client, image search, routing
- Services: 17 total (added Vision Encoder + Qdrant)
- AI Models: 3 (qwen3:8b, OpenCLIP ViT-L/14, BAAI/bge-m3)
- GPU Services: 2 (Vision Encoder, Ollama)
- VRAM Usage: ~10 GB (concurrent)
Status: Production Ready ✅
69 lines
2.0 KiB
Bash
Executable File
69 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Universal script to add new Telegram bot agent to DAGI Gateway
|
|
|
|
set -e
|
|
|
|
# Usage check
|
|
if [ "$#" -ne 3 ]; then
|
|
echo "Usage: ./add-agent.sh <AGENT_NAME> <BOT_TOKEN> <PROMPT_FILE>"
|
|
echo "Example: ./add-agent.sh Helion 8112062582:AAG... helion_prompt.txt"
|
|
exit 1
|
|
fi
|
|
|
|
AGENT_NAME=$1
|
|
BOT_TOKEN=$2
|
|
PROMPT_FILE=$3
|
|
AGENT_ID=$(echo "$AGENT_NAME" | tr '[:upper:]' '[:lower:]')
|
|
|
|
echo "🤖 Adding agent: $AGENT_NAME (ID: $AGENT_ID)"
|
|
|
|
# 1. Update .env
|
|
echo "📝 Updating .env..."
|
|
cat >> .env << EOF
|
|
|
|
# ${AGENT_NAME} Agent Configuration
|
|
${AGENT_NAME^^}_TELEGRAM_BOT_TOKEN=${BOT_TOKEN}
|
|
${AGENT_NAME^^}_NAME=${AGENT_NAME}
|
|
${AGENT_NAME^^}_PROMPT_PATH=gateway-bot/${PROMPT_FILE}
|
|
EOF
|
|
|
|
# 2. Update docker-compose.yml environment section
|
|
echo "🐳 Updating docker-compose.yml..."
|
|
# This needs manual edit or yq tool
|
|
|
|
# 3. Update gateway-bot/http_api.py
|
|
echo "🔧 Updating http_api.py..."
|
|
WEBHOOK_CODE=$(cat << 'PYEOF'
|
|
|
|
# ${AGENT_NAME} Configuration
|
|
${AGENT_NAME^^}_TELEGRAM_BOT_TOKEN = os.getenv("${AGENT_NAME^^}_TELEGRAM_BOT_TOKEN", "")
|
|
${AGENT_NAME^^}_NAME = os.getenv("${AGENT_NAME^^}_NAME", "${AGENT_NAME}")
|
|
${AGENT_NAME^^}_PROMPT_PATH = os.getenv("${AGENT_NAME^^}_PROMPT_PATH", "gateway-bot/${PROMPT_FILE}")
|
|
|
|
def load_${AGENT_ID}_prompt() -> str:
|
|
try:
|
|
with open(${AGENT_NAME^^}_PROMPT_PATH, "r", encoding="utf-8") as f:
|
|
return f.read()
|
|
except Exception as e:
|
|
logger.error(f"Failed to load ${AGENT_NAME} prompt: {e}")
|
|
return "${AGENT_NAME} system prompt."
|
|
|
|
${AGENT_NAME^^}_SYSTEM_PROMPT = load_${AGENT_ID}_prompt()
|
|
|
|
@app.post("/${AGENT_ID}/telegram/webhook")
|
|
async def ${AGENT_ID}_telegram_webhook(update: TelegramUpdate):
|
|
"""${AGENT_NAME} Telegram webhook endpoint"""
|
|
# [Implementation follows DAARWIZZ pattern]
|
|
pass
|
|
PYEOF
|
|
)
|
|
|
|
echo "✅ Agent configuration added!"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Place prompt file at: gateway-bot/${PROMPT_FILE}"
|
|
echo "2. Run: docker-compose restart gateway"
|
|
echo "3. Set webhook: ./scripts/set-webhook.sh ${AGENT_ID} ${BOT_TOKEN}"
|
|
|