Spice_Bae / modal_app.py
fabiantoh98's picture
Add Modal deployment with vLLM support
327d382
"""Modal deployment for Spice Bae AI Advisor.
Deploy with: modal deploy modal_app.py
Test locally: modal serve modal_app.py
"""
import modal
app = modal.App("spice-bae")
image = (
modal.Image.debian_slim(python_version="3.11")
.pip_install(
"gradio[mcp]==5.50.0",
"fastapi[standard]",
"neo4j",
"python-dotenv",
"requests",
"beautifulsoup4>=4.12.0",
)
.add_local_file("app.py", "/root/app.py")
.add_local_dir("tools", "/root/tools")
.add_local_dir("data", "/root/data")
)
@app.function(
image=image,
secrets=[modal.Secret.from_name("spice-bae-secrets")],
max_containers=1,
timeout=600,
)
@modal.web_server(port=7860, startup_timeout=120)
def serve():
"""Serve the Spice Bae Gradio app."""
import sys
import os
import subprocess
# Add mounted code directory to Python path
sys.path.insert(0, "/root")
os.chdir("/root")
# Launch Gradio app directly with its built-in server
subprocess.Popen(
[
sys.executable,
"-c",
"""
import sys
sys.path.insert(0, "/root")
import os
os.chdir("/root")
from app import demo
demo.launch(
server_name="0.0.0.0",
server_port=7860,
mcp_server=True,
share=False,
ssr_mode=False
)
"""
],
env={**os.environ}
)
# Instructions for deployment:
#
# 1. Install Modal CLI:
# pip install modal
# modal setup
#
# 2. Deploy vLLM first (for open-source LLM):
# modal deploy modal_vllm.py
# Note the URL: https://YOUR_USERNAME--spice-bae-llm-serve.modal.run
#
# 3. Create secrets (using vLLM endpoint):
# modal secret create spice-bae-secrets \
# NEO4J_URI="neo4j+s://xxx.databases.neo4j.io" \
# NEO4J_USERNAME="neo4j" \
# NEO4J_PASSWORD="your_password" \
# OPENAI_API_BASE="https://YOUR_USERNAME--spice-bae-llm-serve.modal.run/v1" \
# OPENAI_API_KEY="not-needed" \
# OPENAI_MODEL="Qwen/Qwen2.5-7B-Instruct"
#
# OR use Anthropic instead:
# modal secret create spice-bae-secrets \
# NEO4J_URI="neo4j+s://xxx.databases.neo4j.io" \
# NEO4J_USERNAME="neo4j" \
# NEO4J_PASSWORD="your_password" \
# ANTHROPIC_API_KEY="sk-ant-xxx"
#
# 4. Deploy:
# modal deploy modal_app.py
#
# 5. Your app will be available at:
# https://your-username--spice-bae-serve.modal.run
#
# MCP Endpoint:
# https://your-username--spice-bae-serve.modal.run/gradio_api/mcp/sse