diff --git a/README.md b/README.md index 772b9e0..806f4e4 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,49 @@ > Full-flow AI book generation system using **LangGraph**, **CrewAI**, **AutoGen**, and **PydanticAI** -A comprehensive, production-ready system for generating publication-ready manuscripts from raw content. +A comprehensive, production-ready system for generating publication-ready manuscripts. --- -## ⚡ Quick Start +## ⚡ Quick Install + +### One-Line Installer (Recommended) ```bash -# Install -pip install opus-orchestrator-ai +# Install and start web UI +curl -sSL https://raw.githubusercontent.com/mrhavens/opus-orchestrator-ai/main/install.sh | bash -s -- --api-key YOUR_OPENAI_KEY --start +``` +With options: +```bash +curl -sSL https://raw.githubusercontent.com/mrhavens/opus-orchestrator-ai/main/install.sh | bash -s -- \ + --api-key YOUR_KEY \ + --github-token YOUR_GH_TOKEN \ + --port 8080 \ + --start +``` + +### Or Pip Install + +```bash +pip install opus-orchestrator-ai +pip install opus-orchestrator-ai[all] # With server + storage +``` + +### Or Clone + +```bash +git clone https://github.com/mrhavens/opus-orchestrator-ai.git +cd opus-orchestrator-ai +pip install -e . +pip install fastapi uvicorn +``` + +--- + +## ⚡ Quick Start (After Install) + +```bash # Generate a manuscript (local mode) opus generate --concept "A robot dreams of electric sheep" --words 5000 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..583026e --- /dev/null +++ b/install.sh @@ -0,0 +1,236 @@ +#!/bin/bash +# ============================================================================= +# Opus Orchestrator AI - One-Line Installer +# ============================================================================= +# Usage: +# curl -sSL https://raw.githubusercontent.com/mrhavens/opus-orchestrator-ai/main/install.sh | bash +# curl -sSL https://raw.githubusercontent.com/mrhavens/opus-orchestrator-ai/main/install.sh | bash -s -- --help +# +# Or with options: +# curl -sSL https://raw.githubusercontent.com/mrhavens/opus-orchestrator-ai/main/install.sh | bash -s -- --api-key YOUR_KEY --start +# ============================================================================= + +set -e + +# Colors +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Default values +API_KEY="" +GITHUB_TOKEN="" +START_SERVICES=false +PORT=8080 +REPO_URL="https://github.com/mrhavens/opus-orchestrator-ai.git" +INSTALL_DIR="$HOME/opus-orchestrator" + +# Parse arguments +while [[ $# -gt 0 ]]; do + case $1 in + --api-key) + API_KEY="$2" + shift 2 + ;; + --github-token) + GITHUB_TOKEN="$2" + shift 2 + ;; + --port) + PORT="$2" + shift 2 + ;; + --start) + START_SERVICES=true + shift + ;; + --dir) + INSTALL_DIR="$2" + shift 2 + ;; + --help|-h) + echo "Opus Orchestrator AI Installer" + echo "" + echo "Usage: curl -sSL https://raw.githubusercontent.com/mrhavens/opus-orchestrator-ai/main/install.sh | bash -s -- [OPTIONS]" + echo "" + echo "Options:" + echo " --api-key KEY Set OpenAI API key" + echo " --github-token TOKEN Set GitHub token" + echo " --port PORT Set port (default: 8080)" + echo " --start Start services after install" + echo " --dir PATH Install directory (default: ~/opus-orchestrator)" + echo " --help, -h Show this help" + echo "" + echo "Examples:" + echo " # Install and start web UI" + echo " curl -sSL ... | bash -s -- --api-key sk-... --start" + echo "" + echo " # Install to custom directory" + echo " curl -sSL ... | bash -s -- --dir /opt/opus" + exit 0 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}" +echo -e "${BLUE} 📚 Opus Orchestrator AI - Installer${NC}" +echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}" +echo "" + +# Check prerequisites +echo -e "${YELLOW}Checking prerequisites...${NC}" + +if ! command -v python3 &> /dev/null; then + echo -e "${RED}Error: Python 3 is required but not installed.${NC}" + exit 1 +fi + +PYTHON_VERSION=$(python3 -c 'import sys; print(".".join(map(str, sys.version_info[:2])))') +echo " ✓ Python $PYTHON_VERSION" + +if ! command -v pip3 &> /dev/null && ! command -v pip &> /dev/null; then + echo -e "${RED}Error: pip is required but not installed.${NC}" + exit 1 +fi + +PIP_CMD="pip3" +if command -v pip &> /dev/null; then + PIP_CMD="pip" +fi +echo " ✓ pip available" + +# Create install directory +echo "" +echo -e "${YELLOW}Installing to $INSTALL_DIR...${NC}" +mkdir -p "$INSTALL_DIR" +cd "$INSTALL_DIR" + +# Clone or update repo +if [ -d ".git" ]; then + echo " ✓ Repository already exists, updating..." + git pull origin main 2>/dev/null || true +else + echo " ✓ Cloning repository..." + git clone --depth 1 "$REPO_URL" . +fi + +# Create virtual environment +echo "" +echo -e "${YELLOW}Creating virtual environment...${NC}" +python3 -m venv venv +source venv/bin/activate + +# Install dependencies +echo "" +echo -e "${YELLOW}Installing dependencies...${NC}" +$PIP_CMD install --upgrade pip --quiet +$PIP_CMD install -e . --quiet 2>/dev/null || true + +# Try to install extras +$PIP_CMD install crewai pydantic-ai pydantic autogen fastapi uvicorn boto3 requests python-dotenv --quiet 2>/dev/null || true + +echo " ✓ Dependencies installed" + +# Create .env file +echo "" +echo -e "${YELLOW}Configuring...${NC}" + +ENV_FILE="$INSTALL_DIR/.env" +touch "$ENV_FILE" + +if [ -n "$API_KEY" ]; then + if ! grep -q "OPENAI_API_KEY" "$ENV_FILE" 2>/dev/null; then + echo "OPENAI_API_KEY=$API_KEY" >> "$ENV_FILE" + echo " ✓ OpenAI API key configured" + fi +fi + +if [ -n "$GITHUB_TOKEN" ]; then + if ! grep -q "GITHUB_TOKEN" "$ENV_FILE" 2>/dev/null; then + echo "GITHUB_TOKEN=$GITHUB_TOKEN" >> "$ENV_FILE" + echo " ✓ GitHub token configured" + fi +fi + +# Create activation script +ACTIVATION_SCRIPT="$INSTALL_DIR/opus.sh" +cat > "$ACTIVATION_SCRIPT" << 'SCRIPT' +#!/bin/bash +# Opus Orchestrator AI - Quick Start Script + +cd "$(dirname "$0")" +source venv/bin/activate + +# Default: start web UI +if [ "$1" = "ui" ]; then + exec python3 -m opus_orchestrator ui --port "${2:-8080}" +elif [ "$1" = "serve" ]; then + exec python3 -m opus_orchestrator serve --port "${2:-8000}" +elif [ "$1" = "generate" ]; then + shift + exec python3 -m opus_orchestrator generate "$@" +elif [ "$1" = "help" ] || [ "$1" = "--help" ] || [ -z "$1" ]; then + echo "Opus Orchestrator AI - Quick Start" + echo "" + echo "Usage:" + echo " ./opus.sh ui [port] # Start web UI (default: 8080)" + echo " ./opus.sh serve [port] # Start API server (default: 8000)" + echo " ./opus.sh generate ... # Run generation" + echo " ./opus.sh help # Show this help" + echo "" + echo "Examples:" + echo " ./opus.sh ui" + echo " ./opus.sh ui 9000" + echo " ./opus.sh serve" + echo " ./opus.sh generate --concept 'A robot dreams'" +else + exec python3 -m opus_orchestrator "$@" +fi +SCRIPT + +chmod +x "$ACTIVATION_SCRIPT" +echo " ✓ Activation script created: ./opus.sh" + +# Start services if requested +if [ "$START_SERVICES" = true ]; then + echo "" + echo -e "${YELLOW}Starting services...${NC}" + + echo "" + echo -e "${GREEN}═══════════════════════════════════════════════════════════════${NC}" + echo -e "${GREEN} 🎉 Installation Complete!${NC}" + echo -e "${GREEN}═══════════════════════════════════════════════════════════════${NC}" + echo "" + echo " Web UI: http://localhost:$PORT" + echo " API Docs: http://localhost:$PORT/docs" + echo "" + echo " To start manually:" + echo " cd $INSTALL_DIR" + echo " ./opus.sh ui $PORT" + echo "" + + source venv/bin/activate + exec python3 -m opus_orchestrator ui --port "$PORT" +else + echo "" + echo -e "${GREEN}═══════════════════════════════════════════════════════════════${NC}" + echo -e "${GREEN} 🎉 Installation Complete!${NC}" + echo -e "${GREEN}═══════════════════════════════════════════════════════════════${NC}" + echo "" + echo " Next steps:" + echo " cd $INSTALL_DIR" + echo " ./opus.sh ui" + echo "" + echo " Or start with custom port:" + echo " ./opus.sh ui 9000" + echo "" + echo " Full CLI usage:" + echo " ./opus.sh help" + echo "" +fi diff --git a/pyproject.toml b/pyproject.toml index 6471ea7..2f0f76b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,17 @@ dependencies = [ ] [project.optional-dependencies] +server = [ + "fastapi>=0.115.0", + "uvicorn>=0.30.0", + "jinja2>=3.1.0", +] +storage = [ + "boto3>=1.35.0", +] +all = [ + "opus-orchestrator-ai[server,storage]", +] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.23.0",