---
phase: 03-generate-node-refactor
plan: 02
type: execute
---
Implement provider-specific image generation in API route.
Purpose: Route generation requests to correct provider (Gemini, Replicate, fal.ai) based on selected model.
Output: Working generate endpoint that dispatches to provider implementations.
~/.claude/get-shit-done/workflows/execute-phase.md
~/.claude/get-shit-done/templates/summary.md
@.planning/PROJECT.md
@.planning/STATE.md
@.planning/phases/03-generate-node-refactor/03-01-SUMMARY.md
@src/app/api/generate/route.ts
@src/lib/providers/types.ts
@src/lib/providers/replicate.ts
@src/lib/providers/fal.ts
**Tech available:** ProviderInterface.generate(), provider registry
**Constraints:** Preserve existing Gemini logic, image output only
Task 1: Implement Replicate provider generate() method
src/lib/providers/replicate.ts
Implement generate() that currently throws "not implemented":
1. POST to https://api.replicate.com/v1/predictions with { version: modelId, input: { prompt } }
2. Poll GET /predictions/{id} until status is "succeeded" or "failed"
3. Fetch output image URL and convert to base64 data URL
4. Return GenerationOutput with type: "image"
5. Skip image inputs for now (Phase 5 adds URL server)
TypeScript compiles
Replicate generate() calls prediction API and returns image
Task 2: Implement fal.ai provider generate() method
src/lib/providers/fal.ts
Implement generate():
1. POST to https://fal.run/{modelId} with { prompt, ...parameters }
2. Use "Key {apiKey}" auth header
3. Extract image URL from response, convert to base64
4. Return GenerationOutput with type: "image"
TypeScript compiles
fal.ai generate() calls fal.run and returns image
Task 3: Update generate API route for multi-provider dispatch
src/app/api/generate/route.ts
1. Accept both formats:
- Legacy: { model, prompt, images, aspectRatio, resolution }
- New: { selectedModel, prompt, images, parameters }
2. If selectedModel provided and provider !== "gemini":
- Get provider from registry
- Get API key from request headers (X-Replicate-API-Key, X-Fal-API-Key)
- Call provider.generate()
- Return result
3. Otherwise use existing Gemini logic
4. Extract Gemini code into helper function for clarity
npm run build, test Gemini generation still works
API route dispatches to correct provider, Gemini unchanged
- [ ] `npm run build` succeeds
- [ ] Gemini generation works as before
- [ ] Replicate provider has generate() implementation
- [ ] fal.ai provider has generate() implementation
- Generate API routes requests to correct provider
- Provider generate() methods implemented
- Existing Gemini functionality preserved