File size: 1,724 Bytes
9d3e9f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
410d1c8
9d3e9f6
 
 
 
 
 
 
 
 
 
 
be5e148
 
9d3e9f6
 
 
 
be5e148
 
9d3e9f6
 
 
be5e148
9d3e9f6
be5e148
9d3e9f6
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# render.yaml — Render deployment config
# Docs: https://render.com/docs/blueprint-spec
#
# Free tier limits (as of 2026):
#   - 512 MB RAM
#   - Shared CPU
#   - Spins down after 15 min inactivity (cold start ~30s)
#   - 100 GB outbound bandwidth / month
#
# Our backend fits because:
#   - all-MiniLM-L6-v2 is only ~90MB on disk, ~200MB RAM when loaded
#   - Qdrant is hosted externally (Qdrant Cloud) — no local disk needed
#   - No GPU required for inference

services:
  - type: web
    name: cartographer
    runtime: python
    region: oregon
    plan: free
    buildCommand: pip install -r requirements.txt
    startCommand: uvicorn backend.main:app --host 0.0.0.0 --port $PORT
    healthCheckPath: /health
    envVars:
      - key: QDRANT_URL
        sync: false          # set manually in Render dashboard
      - key: QDRANT_API_KEY
        sync: false
      - key: QDRANT_COLLECTION
        value: github_repos_voyage
      - key: GROQ_API_KEY
        sync: false
      - key: ANTHROPIC_API_KEY
        sync: false
      - key: VOYAGE_API_KEY
        sync: false
      - key: GITHUB_TOKEN
        sync: false
      - key: EMBEDDING_MODEL
        value: voyage-code-3
      - key: EMBEDDING_DIM
        value: "1024"
      - key: TOP_K
        value: "6"
      # HuggingFace cache dir — Render gives 1GB ephemeral disk
      - key: HF_HOME
        value: /opt/render/project/src/.cache/huggingface
      - key: SENTENCE_TRANSFORMERS_HOME
        value: /opt/render/project/src/.cache/sentence_transformers
      # Python output buffering — always set this for deployed servers
      # Without it, print() calls buffer and logs appear delayed or not at all
      - key: PYTHONUNBUFFERED
        value: "1"