-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
44 lines (41 loc) · 2.24 KB
/
Copy path.env.example
File metadata and controls
44 lines (41 loc) · 2.24 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
# Local SQLite database. Created automatically on first `npm run dev`.
DATABASE_URL="file:./dev.db"
# OPTIONAL. Leave unset to run the app in Demo Mode, where every AI feature
# replays a real Claude response recorded against the seed data.
# Set it to run the AI features live.
# ANTHROPIC_API_KEY="sk-ant-..."
# Model overrides (optional — all have sane defaults).
#
# The tiers deliberately use different models. Tier 2 does the visual judgement
# and tier 3 the brief reasoning, so both want the strong model; tier 1 only
# answers "is this usable at all" from one small frame, which is exactly what a
# cheap model is for. At $1/$5 per million tokens against $5/$25, running triage
# on Haiku costs about a fifth as much as running it on Opus, and it discards
# most of the junk before the expensive pass ever sees it.
#
# ANTHROPIC_MODEL="claude-opus-5" # tier 2 vision + tier 3 reasoning
# ANTHROPIC_TRIAGE_MODEL="claude-haiku-4-5-20251001" # tier 1 triage
# ANTHROPIC_FAST_MODEL="claude-sonnet-5" # library search — latency matters most
# ---------------------------------------------------------------------------
# OpenAI-compatible gateway (alternative to ANTHROPIC_API_KEY)
# ---------------------------------------------------------------------------
# Any endpoint speaking the OpenAI chat-completions shape. The committed
# recordings in src/lib/ai/recorded/ were captured through kie.ai this way.
#
# OPENAI_COMPAT_API_KEY="..."
#
# kie.ai routes per model, hence the {model} placeholder. A gateway with one
# fixed path can just omit it.
# OPENAI_COMPAT_BASE_URL="https://api.kie.ai/{model}/v1/chat/completions"
#
# All three tiers default to Gemini 2.5 Flash, and that is a correctness
# decision before it is a cost one. Gemini 3 Pro, given this app's real response
# schema, returned a boolean where a string enum was required, invented a
# verdict outside the allowed set, and filled the tags array with nulls — via
# tool calls AND via response_format. Flash returned the exact declared shape
# every time, and costs a sixth as much. See "Structured output is not a given"
# in the README.
#
# OPENAI_COMPAT_MODEL="gemini-2.5-flash"
# OPENAI_COMPAT_TRIAGE_MODEL="gemini-2.5-flash"
# OPENAI_COMPAT_FAST_MODEL="gemini-2.5-flash"