-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
246 lines (223 loc) · 10.7 KB
/
Copy path.env.example
File metadata and controls
246 lines (223 loc) · 10.7 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
# Database
# Backend logging. BACKEND_LOG_FILE writes backend + uvicorn logs to a rotating file.
# LOG_LEVEL=INFO
# BACKEND_LOG_FILE=./blueprint-backend.log
# BACKEND_LOG_MAX_BYTES=10000000
# BACKEND_LOG_BACKUP_COUNT=5
# Debug mode returns traceback/context fields in API error responses and failed
# job metadata. Keep disabled outside trusted local/dev environments.
# BLUEPRINT_DEBUG=false
# Supabase is used through the Supabase Python client when these are present.
# With no Supabase client variables, the backend falls back to SQLite.
# DATABASE_BACKEND=supabase
# SUPABASE_URL=https://your-project-ref.supabase.co
# SUPABASE_SERVICE_ROLE_KEY=your_service_role_key_here
# SUPABASE_SECRET_KEY can be used for newer Supabase secret keys.
# Do not use SUPABASE_ANON_KEY, NEXT_PUBLIC_SUPABASE_ANON_KEY, or a publishable key for the backend.
# Force local SQLite instead:
# DATABASE_BACKEND=sqlite
# SQLITE_DATABASE_URL=sqlite:///./blueprint.db
# Development mode always uses SQLite and disables Supabase Storage writes,
# even if Supabase credentials are present in your shell or .env.
# BLUEPRINT_DEV_MODE=true
# Frontend API base URL. For Docker, this value is baked into the frontend image
# at build time, so rebuild after changing it.
NEXT_PUBLIC_API_URL=http://localhost:8000
# Expose local-only frontend controls such as Keys, Listening Jobs, and Backend Logs.
# These are baked into production frontend builds; keep unset/false publicly.
# NEXT_PUBLIC_BLUEPRINT_DEBUG=false
# NEXT_PUBLIC_BLUEPRINT_DEV_MODE=false
# Deployment admin allowlist. Admins can view global jobs/log diagnostics.
# Prefer Clerk user IDs in production; email allowlisting requires CLERK_SECRET_KEY.
# BLUEPRINT_ADMIN_USER_IDS=user_...
# BLUEPRINT_ADMIN_EMAILS=isayahculbertson@gmail.com
# Docker defaults to persistent SQLite under /data when no Supabase client env
# vars are present.
# Deployment mode requires a configured deployment provider or a signed-in
# user's BYOK provider for generation. The frontend keeps the composer visible
# and directs users without an active provider to Settings.
# BLUEPRINT_DEPLOYMENT=true
# LLM provider: openai, baseten, gmi, huggingface, nvidia, gemini, openai-compatible, runpod, runpod-serverless, or simulation.
# Use runpod for Runpod OpenAI-compatible/vLLM endpoints and runpod-serverless for queue-style /runsync workers.
LLM_PROVIDER=openai
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_MODEL=gpt-4o-mini
STRICT_LLM=true
# Optional runtime provider/model switching.
# Requests to /generate may include {"provider":"openai","model":"gpt-4o-mini"}.
# If unset, allowed providers default to configured providers detected from env.
# Runtime model overrides default to the configured model/fallback unless allowlists are set.
# LLM_ALLOWED_PROVIDERS=openai,baseten,gmi,huggingface,nvidia,openai-compatible,gemini,runpod,runpod-serverless,simulation
# OPENAI_ALLOWED_MODELS=gpt-4o-mini,gpt-5.5
# BASETEN_ALLOWED_MODELS=deepseek-ai/DeepSeek-V4-Pro
# GMI_ALLOWED_MODELS=anthropic/claude-fable-5
# HUGGINGFACE_ALLOWED_MODELS=Qwen/Qwen2.5-Coder-3B-Instruct:nscale
# NVIDIA_ALLOWED_MODELS=qwen/qwen2.5-coder-32b-instruct,meta/llama-3.1-8b-instruct
# OPENAI_COMPATIBLE_ALLOWED_MODELS=your-compatible-model
# GEMINI_ALLOWED_MODELS=gemini-3.5-flash,gemini-2.5-flash
# RUNPOD_ALLOWED_MODELS=your-runpod-model-v1,your-runpod-model-v2
# First-party OpenAI options.
# OPENAI_RESPONSE_FORMAT=json_schema
# OPENAI_VALIDATE_MODELS=false
# OPENAI_TIMEOUT_SECONDS=300
# For GPT-5/o-series reasoning models.
# OPENAI_REASONING_EFFORT=low
# OPENAI_TEMPERATURE=1
# OPENAI_PROJECT_ID=your_openai_project_id_here
# OPENAI_ORG_ID=your_openai_org_id_here
# Optional OpenAI API verifier.
# Run from the repo root with:
# ./scripts/verify-openai.py
# OPENAI_BASE_URL=https://api.openai.com/v1
# OPENAI_TEST_PROMPT=Reply with exactly: openai ok
# OPENAI_INPUT_TEMPLATE={"input":"{prompt}"}
# OPENAI_TEST_MAX_OUTPUT_TOKENS=32
# Optional Langfuse observability for generation traces and structured LLM calls.
# LANGFUSE_PUBLIC_KEY=pk-lf-your_public_key_here
# LANGFUSE_SECRET_KEY=sk-lf-your_secret_key_here
# LANGFUSE_BASE_URL=https://cloud.langfuse.com
# LANGFUSE_TRACING_ENVIRONMENT=local
# LANGFUSE_TRACING_RELEASE=dev
# LANGFUSE_MAX_FIELD_CHARS=20000
# LANGFUSE_ENABLED=false
# Optional generated product image output.
IMAGE_OUTPUT_ENABLED=false
IMAGE_PROVIDER=openai
# First-party OpenAI image generation uses OPENAI_IMAGE_API_KEY, or OPENAI_API_KEY
# when OPENAI_IMAGE_API_KEY is unset. It does not inherit LLM_API_KEY/LLM_BASE_URL.
OPENAI_IMAGE_MODEL=gpt-image-2
OPENAI_IMAGE_SIZE=1024x1024
# OPENAI_IMAGE_API_KEY=your_openai_image_key_here
# OPENAI_IMAGE_BASE_URL=https://api.openai.com/v1
# OPENAI_IMAGE_QUALITY=medium
# OPENAI_IMAGE_OUTPUT_FORMAT=png
# Optional Firecrawl source research for the web_research workflow.
# EXTERNAL_SOURCE_PROVIDER=firecrawl
# With FIRECRAWL_API_KEY set, Firecrawl defaults to: npx -y firecrawl-mcp
# Override the command if your MCP server is installed or hosted differently.
# FIRECRAWL_API_KEY=your_firecrawl_api_key_here
# FIRECRAWL_MCP_COMMAND=npx -y firecrawl-mcp
# FIRECRAWL_SEARCH_LIMIT=3
# FIRECRAWL_MCP_TIMEOUT_SECONDS=45
# FIRECRAWL_MCP_DISABLED=false
# Optional Supabase Storage upload for reference/product images.
# Uses SUPABASE_URL plus SUPABASE_SERVICE_ROLE_KEY/SUPABASE_SECRET_KEY through
# the Supabase client by default. Bucket defaults to contents.
SUPABASE_S3_ENDPOINT=your-s3-endpoint
SUPABASE_S3_BUCKET=contents
# SUPABASE_S3_REGION=us-east-1
# Optional fallback for S3-compatible uploads when Supabase client env is absent.
# SUPABASE_S3_ACCESS_KEY_ID=your_supabase_s3_access_key_id
# SUPABASE_S3_SECRET_ACCESS_KEY=your_supabase_s3_secret_access_key
# Signed read URLs are refreshed by the backend when projects are read.
# SUPABASE_IMAGE_SIGNED_URL_SECONDS=86400
# Optional public URL base for generated object URLs.
# SUPABASE_STORAGE_PUBLIC_BASE_URL=....
# Generic provider aliases are supported for all live providers.
# LLM_API_KEY=your_provider_api_key_here
# LLM_MODEL=gpt-4o-mini
# LLM_FALLBACK_MODEL=your_fallback_model_here
# OpenAI-compatible providers can set a custom endpoint.
# LLM_PROVIDER=openai-compatible
# LLM_BASE_URL=http://localhost:11434/v1
# LLM_ALLOW_NO_API_KEY=true
# LLM_RESPONSE_FORMAT=json_object
# LLM_VALIDATE_MODELS=false
# Structured calls default to 8192 output tokens (6000 floor for large schemas).
# LLM_MAX_TOKENS=8192
# LLM_TIMEOUT_SECONDS=90
# LLM_REASONING_EFFORT=low
# LLM_TEMPERATURE=0.2
# Baseten Model APIs. These use an OpenAI-compatible chat completions endpoint.
# LLM_PROVIDER=baseten
# BASETEN_API_KEY=your_baseten_api_key_here
# BASETEN_BASE_URL=https://inference.baseten.co/v1
# BASETEN_MODEL=deepseek-ai/DeepSeek-V4-Pro
# BASETEN_RESPONSE_FORMAT=json_object
# BASETEN_VALIDATE_MODELS=false
# BASETEN_TIMEOUT_SECONDS=300
# BASETEN_TEMPERATURE=0.2
# GMI Cloud serverless LLM APIs. These use an OpenAI-compatible chat completions endpoint.
# LLM_PROVIDER=gmi
# GMI_API_KEY=your_gmi_cloud_api_key_here
# GMI_BASE_URL=https://api.gmi-serving.com/v1
# GMI_MODEL=anthropic/claude-fable-5
# GMI_RESPONSE_FORMAT=json_object
# GMI_VALIDATE_MODELS=false
# GMI_TIMEOUT_SECONDS=300
# Fable rejects temperature; omit this unless a different GMI model supports it.
# GMI_TEMPERATURE=omit
# Fireworks video self-correction reviewer. Requires ffmpeg on the backend host.
# Auto mode uses the working Kimi frame-review model unless a native video deployment is configured.
# FIREWORKS_API_KEY=your_fireworks_api_key_here
# FIREWORKS_BASE_URL=https://api.fireworks.ai/inference/v1
# FIREWORKS_VIDEO_REVIEW_INPUT_MODE=auto
# FIREWORKS_VIDEO_REVIEW_MODEL=kimi-k2p6
# Set these to use Fireworks native video/audio with qwen3-omni-30b-a3b-instruct.
# FIREWORKS_ACCOUNT_ID=your_fireworks_account_id
# FIREWORKS_VIDEO_REVIEW_DEPLOYMENT_ID=your_fireworks_deployment_id
# FIREWORKS_VIDEO_REVIEW_MODEL=qwen3-omni-30b-a3b-instruct
# FIREWORKS_VIDEO_REVIEW_MAX_SECONDS=60
# FIREWORKS_VIDEO_REVIEW_NATIVE_FPS=1
# FIREWORKS_VIDEO_REVIEW_NATIVE_HEIGHT=360
# FIREWORKS_VIDEO_REVIEW_MAX_MEDIA_BYTES=10000000
# Set FIREWORKS_VIDEO_REVIEW_INPUT_MODE=frames to force image-frame fallback.
# FIREWORKS_VIDEO_REVIEW_MAX_FRAMES=8
# FIREWORKS_TIMEOUT_SECONDS=180
# Hugging Face Inference Providers router. This is OpenAI-compatible for chat completions.
# LLM_PROVIDER=huggingface
# HF_TOKEN=your_huggingface_token_here
# HUGGINGFACE_BASE_URL=https://router.huggingface.co/v1
# HUGGINGFACE_MODEL=Qwen/Qwen2.5-Coder-3B-Instruct:nscale
# HUGGINGFACE_RESPONSE_FORMAT=json_object
# HUGGINGFACE_VALIDATE_MODELS=false
# HUGGINGFACE_TIMEOUT_SECONDS=300
# HUGGINGFACE_TEMPERATURE=0.2
# NVIDIA Build / NIM APIs. These use an OpenAI-compatible chat completions endpoint.
# LLM_PROVIDER=nvidia
# NVIDIA_API_KEY=your_nvidia_api_key_here
# NVIDIA_BASE_URL=https://integrate.api.nvidia.com/v1
# NVIDIA_MODEL=qwen/qwen2.5-coder-32b-instruct
# NVIDIA_RESPONSE_FORMAT=json_object
# NVIDIA_VALIDATE_MODELS=false
# NVIDIA_TIMEOUT_SECONDS=300
# NVIDIA_TEMPERATURE=0.2
# Optional Runpod Serverless endpoint verifier.
# Run from the repo root with:
# ./scripts/verify-runpod-serverless.py
# RUNPOD_API_KEY=your_runpod_api_key_here
# RUNPOD_OPENAI_BASE_URL=https://api.runpod.ai/v2/your_endpoint_id_here/openai/v1
# RUNPOD_ENDPOINT_ID=your_endpoint_id_here
# RUNPOD_ENDPOINT_URL=https://api.runpod.ai/v2/your_endpoint_id_here
# For one Runpod endpoint per model, map model IDs to endpoint IDs or endpoint URLs.
# RUNPOD_MODEL_ENDPOINTS={"your-runpod-model-v1":"endpoint_id_1","your-runpod-model-v2":"https://api.runpod.ai/v2/endpoint_id_2"}
# For one endpoint that serves many models, include {model} in RUNPOD_INPUT_TEMPLATE if your worker expects it.
# RUNPOD_TEST_PROMPT=Reply with exactly: runpod serverless ok
# RUNPOD_INPUT_TEMPLATE={"prompt":"{prompt}"}
# RUNPOD_TIMEOUT_SECONDS=1200
# RUNPOD_WAIT_MS=90000
# RUNPOD_POLL_TIMEOUT_SECONDS=1200
# RUNPOD_POLL_INTERVAL_SECONDS=5
# RUNPOD_PARTI_SEED_TIMEOUT_SECONDS=1200
# RUNPOD_EXECUTION_TIMEOUT_MS=1200000
# RUNPOD_TTL_MS=1200000
# RUNPOD_MODEL=your_optional_model_id_here
# RUNPOD_TEMPERATURE=0.2
# Structured calls default to 8192 output tokens with a 6000 floor for large
# schemas (MechanicalNotes) so big JSON records are not truncated mid-string.
# RUNPOD_MAX_TOKENS=8192
# Grammar-constrained JSON on the vLLM worker (requires vLLM >= 0.6.3). Default
# is json_object; switch to json_schema only after a live smoke test.
# RUNPOD_RESPONSE_FORMAT=json_schema
# Backward-compatible Gemini aliases are still supported.
# GEMINI_API_KEY=your_gemini_api_key_here
# GOOGLE_API_KEY=your_google_api_key_here
# GEMINI_MODEL=gemini-3.5-flash
# STRICT_GEMINI=true
# GEMINI_FALLBACK_MODEL=gemini-2.5-flash
# Optional agent-to-agent TCP JSONL socket. REST, WebSocket, and MCP routes are always mounted.
JOB_METADATA_BACKEND=auto
JOB_METADATA_DB_PATH=./blueprint_jobs.db
A2A_SOCKET_ENABLED=false
A2A_SOCKET_HOST=127.0.0.1
A2A_SOCKET_PORT=8766