From ed9c817d5e174f21c088673efac9a639b35c1fc7 Mon Sep 17 00:00:00 2001 From: Paul Walko Date: Thu, 11 Dec 2025 23:45:29 +0100 Subject: [PATCH] agent docker --- .gitea/workflows/build-push-agent.yaml | 30 +++++ web/README.md | 177 +++++++++++++------------ web/agent/.dockerignore | 14 ++ web/agent/Dockerfile | 13 ++ web/agent/langgraph.json | 2 +- web/agent/pyproject.toml | 2 +- 6 files changed, 154 insertions(+), 84 deletions(-) create mode 100644 .gitea/workflows/build-push-agent.yaml create mode 100644 web/agent/.dockerignore create mode 100644 web/agent/Dockerfile diff --git a/.gitea/workflows/build-push-agent.yaml b/.gitea/workflows/build-push-agent.yaml new file mode 100644 index 0000000..9bc713f --- /dev/null +++ b/.gitea/workflows/build-push-agent.yaml @@ -0,0 +1,30 @@ +name: Build and Push Agent Docker Image + +on: + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Login to Gitea Container Registry + uses: docker/login-action@v3 + with: + registry: git.seaturtle.pw + username: ${{ gitea.actor }} + password: ${{ secrets.ACTIONS_PUSH_TOKEN }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: ./web/agent + push: true + tags: git.seaturtle.pw/cavepedia/cavepediav2-agent:latest diff --git a/web/README.md b/web/README.md index e5ac14c..cc8a212 100644 --- a/web/README.md +++ b/web/README.md @@ -1,109 +1,122 @@ -# CopilotKit <> LangGraph Starter +# Cavepedia Web -### Referenes -https://github.com/auth0/nextjs-auth0/blob/main/EXAMPLES.md +Next.js frontend with integrated LangGraph agent for Cavepedia. +## Project Structure -This is a starter template for building AI agents using [LangGraph](https://www.langchain.com/langgraph) and [CopilotKit](https://copilotkit.ai). It provides a modern Next.js application with an integrated LangGraph agent to be built on top of. +``` +web/ +├── src/ # Next.js application +├── agent/ # LangGraph agent (Python) +│ ├── main.py # Agent graph definition +│ ├── langgraph.json +│ ├── pyproject.toml +│ └── Dockerfile # Production container +└── ... +``` ## Prerequisites -- Node.js 18+ -- Python 3.8+ -- Any of the following package managers: - - [pnpm](https://pnpm.io/installation) (recommended) - - npm - - [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable) - - [bun](https://bun.sh/) -- Anthropic API Key (for the LangGraph agent) +- Node.js 18+ +- Python 3.12+ +- [pnpm](https://pnpm.io/installation) (recommended) or npm/yarn/bun +- Google AI API Key (for the LangGraph agent) -> **Note:** This repository ignores lock files (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to avoid conflicts between different package managers. Each developer should generate their own lock file using their preferred package manager. After that, make sure to delete it from the .gitignore. +## Development -## Getting Started +### 1. Install dependencies -1. Install dependencies using your preferred package manager: ```bash -# Using pnpm (recommended) pnpm install - -# Using npm -npm install - -# Using yarn -yarn install - -# Using bun -bun install ``` -> **Note:** Installing the package dependencies will also install the agent's python dependencies via the `install:agent` script. +This also installs the agent's Python dependencies via the `install:agent` script. +### 2. Set up environment variables -2. Set up your Anthropic API key: ```bash -echo 'ANTHROPIC_API_KEY=your-anthropic-api-key-here' > agent/.env +# Agent environment +cp agent/.env.example agent/.env +# Edit agent/.env with your API keys ``` -3. Start the development server: +### 3. Start development servers + ```bash -# Using pnpm pnpm dev - -# Using npm -npm run dev - -# Using yarn -yarn dev - -# Using bun -bun run dev ``` -This will start both the UI and agent servers concurrently. +This starts both the Next.js UI and LangGraph agent servers concurrently. + +## Agent Deployment + +The agent is containerized for production deployment using the official LangGraph API server image. + +### Building the Docker image + +```bash +cd agent +docker build -t cavepediav2-agent . +``` + +### Running in production + +The agent requires PostgreSQL and Redis for persistence and pub/sub: + +```bash +docker run \ + -p 8123:8000 \ + -e REDIS_URI="redis://redis:6379" \ + -e DATABASE_URI="postgres://user:pass@postgres:5432/langgraph" \ + -e GOOGLE_API_KEY="your-key" \ + -e LANGSMITH_API_KEY="your-key" \ + cavepediav2-agent +``` + +Or use Docker Compose with the required services: + +```yaml +services: + redis: + image: redis:7 + + postgres: + image: postgres:16 + environment: + POSTGRES_DB: langgraph + POSTGRES_USER: langgraph + POSTGRES_PASSWORD: langgraph + + agent: + image: git.seaturtle.pw/cavepedia/cavepediav2-agent:latest + ports: + - "8123:8000" + environment: + REDIS_URI: redis://redis:6379 + DATABASE_URI: postgres://langgraph:langgraph@postgres:5432/langgraph + GOOGLE_API_KEY: ${GOOGLE_API_KEY} + depends_on: + - redis + - postgres +``` + +### CI/CD + +The agent image is automatically built and pushed to `git.seaturtle.pw/cavepedia/cavepediav2-agent:latest` on push to `main` via Gitea Actions. ## Available Scripts -The following scripts can also be run using your preferred package manager: -- `dev` - Starts both UI and agent servers in development mode -- `dev:debug` - Starts development servers with debug logging enabled -- `dev:ui` - Starts only the Next.js UI server -- `dev:agent` - Starts only the LangGraph agent server -- `build` - Builds the Next.js application for production -- `start` - Starts the production server -- `lint` - Runs ESLint for code linting -- `install:agent` - Installs Python dependencies for the agent -## Documentation +- `dev` - Start both UI and agent servers +- `dev:ui` - Start only Next.js +- `dev:agent` - Start only LangGraph agent +- `build` - Build Next.js for production +- `start` - Start production server +- `lint` - Run ESLint +- `install:agent` - Install agent Python dependencies -The main UI component is in `src/app/page.tsx`. You can: -- Modify the theme colors and styling -- Add new frontend actions -- Customize the CopilotKit sidebar appearance +## References -## 📚 Documentation - -- [LangGraph Documentation](https://langchain-ai.github.io/langgraph/) - Learn more about LangGraph and its features -- [CopilotKit Documentation](https://docs.copilotkit.ai) - Explore CopilotKit's capabilities -- [Next.js Documentation](https://nextjs.org/docs) - Learn about Next.js features and API -- [YFinance Documentation](https://pypi.org/project/yfinance/) - Financial data tools - -## Contributing - -Feel free to submit issues and enhancement requests! This starter is designed to be easily extensible. - -## License - -This project is licensed under the MIT License - see the LICENSE file for details. - -## Troubleshooting - -### Agent Connection Issues -If you see "I'm having trouble connecting to my tools", make sure: -1. The LangGraph agent is running on port 8000 -2. Your Anthropic API key is set correctly -3. Both servers started successfully - -### Python Dependencies -If you encounter Python import errors: -```bash -npm install:agent -``` +- [LangGraph Documentation](https://langchain-ai.github.io/langgraph/) +- [CopilotKit Documentation](https://docs.copilotkit.ai) +- [Next.js Documentation](https://nextjs.org/docs) +- [Auth0 Next.js SDK Examples](https://github.com/auth0/nextjs-auth0/blob/main/EXAMPLES.md) diff --git a/web/agent/.dockerignore b/web/agent/.dockerignore new file mode 100644 index 0000000..ea363aa --- /dev/null +++ b/web/agent/.dockerignore @@ -0,0 +1,14 @@ +Dockerfile +.dockerignore +.git +.gitignore +.env +.env.* +.venv/ +venv/ +__pycache__/ +*.pyc +*.pyo +.langgraph_api/ +.vercel/ +*.md diff --git a/web/agent/Dockerfile b/web/agent/Dockerfile new file mode 100644 index 0000000..e6e5515 --- /dev/null +++ b/web/agent/Dockerfile @@ -0,0 +1,13 @@ +# syntax=docker/dockerfile:1 + +FROM langchain/langgraph-api:3.12 + +# Copy dependency files and install +ADD pyproject.toml uv.lock /deps/agent/ +RUN cd /deps/agent && pip install --no-cache-dir -e . + +# Copy application code +ADD main.py langgraph.json /deps/agent/ + +# Set the graph configuration +ENV LANGSERVE_GRAPHS='{"vpi_1000": "/deps/agent/main.py:graph"}' diff --git a/web/agent/langgraph.json b/web/agent/langgraph.json index dd21781..5d0cf52 100644 --- a/web/agent/langgraph.json +++ b/web/agent/langgraph.json @@ -4,7 +4,7 @@ "dependencies": ["."], "package_manager": "uv", "graphs": { - "sample_agent": "./main.py:graph" + "vpi_1000": "./main.py:graph" }, "env": ".env" } diff --git a/web/agent/pyproject.toml b/web/agent/pyproject.toml index c685a02..bd73568 100644 --- a/web/agent/pyproject.toml +++ b/web/agent/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "sample-agent" +name = "vpi-1000" version = "0.1.0" description = "A LangGraph agent" requires-python = ">=3.12"