Browse Source
UAT-001 resolved - fal.ai API 400 error fixed - Removed buildCategoryFilter() causing multiple category params - Models now filtered client-side via isRelevantModel() SUMMARY: .planning/phases/02-model-discovery/02-02-FIX-SUMMARY.mdhandoff-20260429-1057
3 changed files with 200 additions and 0 deletions
@ -0,0 +1,84 @@ |
|||
--- |
|||
phase: 02-model-discovery |
|||
plan: 02-FIX |
|||
type: fix |
|||
subsystem: api |
|||
tags: [fal.ai, api, providers, models] |
|||
|
|||
# Dependency graph |
|||
requires: |
|||
- phase: 02-model-discovery |
|||
provides: fal.ai provider and models API route |
|||
provides: |
|||
- Working fal.ai models endpoint that returns 200 instead of 400 |
|||
affects: [02-model-discovery, provider-testing] |
|||
|
|||
# Tech tracking |
|||
tech-stack: |
|||
added: [] |
|||
patterns: [client-side-filtering] |
|||
|
|||
key-files: |
|||
created: [] |
|||
modified: |
|||
- src/app/api/providers/fal/models/route.ts |
|||
- src/lib/providers/fal.ts |
|||
|
|||
key-decisions: |
|||
- "Fetch all active models without category filter, filter client-side" |
|||
- "fal.ai API only accepts single category param - multiple params cause 400" |
|||
|
|||
patterns-established: |
|||
- "Post-fetch filtering: When API doesn't support multiple filter values, fetch broader and filter client-side" |
|||
|
|||
issues-created: [] |
|||
|
|||
# Metrics |
|||
duration: 5min |
|||
completed: 2026-01-09 |
|||
--- |
|||
|
|||
# Phase 02 Fix: fal.ai API 400 Error Summary |
|||
|
|||
**Removed multiple category params from fal.ai API requests to fix 400 error - models now filtered client-side** |
|||
|
|||
## Performance |
|||
|
|||
- **Duration:** 5 min |
|||
- **Started:** 2026-01-09 |
|||
- **Completed:** 2026-01-09 |
|||
- **Tasks:** 1 |
|||
- **Files modified:** 2 |
|||
|
|||
## Accomplishments |
|||
- Fixed UAT-001: fal.ai models endpoint now returns 200 with models array |
|||
- Removed buildCategoryFilter() function from both route.ts and fal.ts |
|||
- Models still correctly filtered to relevant categories (text-to-image, image-to-image, text-to-video, image-to-video) |
|||
|
|||
## Task Commits |
|||
|
|||
1. **Task 1: Fix UAT-001 - Multiple category parameters causing 400 error** - `2fe312d` (fix) |
|||
|
|||
## Files Created/Modified |
|||
- `src/app/api/providers/fal/models/route.ts` - Removed buildCategoryFilter(), simplified URL to use only status=active |
|||
- `src/lib/providers/fal.ts` - Same fix applied to listModels() and searchModels() methods |
|||
|
|||
## Decisions Made |
|||
- Fetch all active models without category filter, rely on existing isRelevantModel() function to filter results |
|||
- This approach is simpler than making 4 parallel API calls (one per category) |
|||
- fal.ai returns a manageable number of models, so client-side filtering is efficient |
|||
|
|||
## Deviations from Plan |
|||
None - plan executed exactly as written |
|||
|
|||
## Issues Encountered |
|||
None |
|||
|
|||
## Next Phase Readiness |
|||
- fal.ai provider is now fully functional |
|||
- Ready to proceed with additional provider implementations or UI integration |
|||
|
|||
--- |
|||
*Phase: 02-model-discovery* |
|||
*Plan: 02-FIX* |
|||
*Completed: 2026-01-09* |
|||
@ -0,0 +1,87 @@ |
|||
--- |
|||
phase: 02-model-discovery |
|||
plan: 02-FIX |
|||
type: fix |
|||
--- |
|||
|
|||
<objective> |
|||
Fix 1 UAT issue from plan 02-02. |
|||
|
|||
Source: 02-02-ISSUES.md |
|||
Priority: 0 critical, 1 major, 0 minor |
|||
</objective> |
|||
|
|||
<execution_context> |
|||
@~/.claude/get-shit-done/workflows/execute-phase.md |
|||
@~/.claude/get-shit-done/templates/summary.md |
|||
</execution_context> |
|||
|
|||
<context> |
|||
@.planning/STATE.md |
|||
@.planning/ROADMAP.md |
|||
|
|||
**Issues being fixed:** |
|||
@.planning/phases/02-model-discovery/02-02-ISSUES.md |
|||
|
|||
**Original plan for reference:** |
|||
@.planning/phases/02-model-discovery/02-02-PLAN.md |
|||
</context> |
|||
|
|||
<tasks> |
|||
|
|||
<task type="auto"> |
|||
<name>Task 1: Fix UAT-001 - Multiple category parameters causing 400 error</name> |
|||
<files>src/app/api/providers/fal/models/route.ts, src/lib/providers/fal.ts</files> |
|||
<action> |
|||
Fix the fal.ai API route to handle multiple categories correctly. |
|||
|
|||
**Root cause:** The `buildCategoryFilter()` function creates `category=text-to-image&category=image-to-image&...` but fal.ai API only accepts a single category parameter. |
|||
|
|||
**Fix approach:** Fetch all models without category filter and filter client-side. |
|||
|
|||
1. In route.ts: |
|||
- Remove `buildCategoryFilter()` function entirely |
|||
- Remove category params from URL construction (line 130) |
|||
- Keep only `status=active` in base URL |
|||
- Rely on existing `isRelevantModel()` filter (line 172) to filter results |
|||
|
|||
2. In fal.ts (provider): |
|||
- Apply same fix to `listModels()` and `searchModels()` functions |
|||
- Remove any category URL params, filter results after fetch |
|||
|
|||
**Why this approach:** |
|||
- Simpler than making 4 parallel API calls per category |
|||
- fal.ai returns manageable number of models |
|||
- Filtering is already implemented via `isRelevantModel()` |
|||
- No additional latency from multiple requests |
|||
</action> |
|||
<verify> |
|||
curl -X GET "http://localhost:3000/api/providers/fal/models" returns JSON with success:true and models array |
|||
</verify> |
|||
<done> |
|||
- API route returns 200 with models array |
|||
- Models are filtered to only image/video categories |
|||
- No 400 errors from fal.ai |
|||
</done> |
|||
</task> |
|||
|
|||
</tasks> |
|||
|
|||
<verification> |
|||
Before declaring plan complete: |
|||
- [ ] `curl http://localhost:3000/api/providers/fal/models` returns success:true |
|||
- [ ] Response contains models with capabilities: text-to-image, image-to-image, text-to-video, image-to-video |
|||
- [ ] No models with other categories (audio, 3D, etc.) in response |
|||
- [ ] TypeScript compiles: `npx tsc --noEmit` |
|||
- [ ] Build succeeds: `npm run build` |
|||
</verification> |
|||
|
|||
<success_criteria> |
|||
- UAT-001 resolved - API route returns models without 400 error |
|||
- Models still filtered to relevant image/video categories |
|||
- No regression in other functionality |
|||
</success_criteria> |
|||
|
|||
<output> |
|||
After completion, create `.planning/phases/02-model-discovery/02-02-FIX-SUMMARY.md` |
|||
</output> |
|||
@ -0,0 +1,29 @@ |
|||
# UAT Issues: Phase 02 Plan 02 |
|||
|
|||
**Tested:** 2026-01-09 |
|||
**Source:** .planning/phases/02-model-discovery/02-02-SUMMARY.md |
|||
**Tester:** User via /gsd:verify-work |
|||
|
|||
## Open Issues |
|||
|
|||
[None] |
|||
|
|||
## Resolved Issues |
|||
|
|||
### UAT-001: fal.ai API route returns 400 error due to multiple category parameters |
|||
|
|||
**Discovered:** 2026-01-09 |
|||
**Phase/Plan:** 02-02 |
|||
**Severity:** Major |
|||
**Resolved:** 2026-01-09 - Fixed in 02-02-FIX.md |
|||
**Commit:** 2fe312d |
|||
|
|||
**Description:** The fal.ai models API route constructs a URL with multiple `category=` parameters (text-to-image, image-to-image, text-to-video, image-to-video), but fal.ai's API only accepts a single category parameter. This causes a 400 validation error. |
|||
|
|||
**Fix:** Removed `buildCategoryFilter()` function. Now fetches all active models without category filter and relies on existing `isRelevantModel()` function to filter results client-side. |
|||
|
|||
--- |
|||
|
|||
*Phase: 02-model-discovery* |
|||
*Plan: 02* |
|||
*Tested: 2026-01-09* |
|||
Loading…
Reference in new issue