| 04-enrichment |
01 |
api |
| unsplash |
| httpx |
| image-resolution |
| cache |
| csv |
| settings |
|
| phase |
provides |
| 01-core-generation-pipeline |
CSVBuilder con colonne _image_keyword, Settings schema, GenerationPipeline con JobStatus |
|
| phase |
provides |
| 02-prompt-control-output-review |
Export router con download CSV con edits |
|
|
| UnsplashService con search, cache disco, traduzione IT->EN, retry, rate limit awareness |
| Campo unsplash_api_key in Settings schema e router (mascherato, None-preserving) |
| CSVBuilder con image_url_map opzionale per risoluzione keyword -> URL Unsplash |
| GenerationPipeline integra UnsplashService dopo batch LLM e salva image_url_map nel job JSON |
| Export router riutilizza image_url_map dal job originale per CSV con edits |
|
|
| added |
patterns |
| httpx (async HTTP client per Unsplash API) |
|
| Fallback trasparente |
| keyword non risolvibili restano testuali senza bloccare l'export |
|
| Cache in-memory + disco con persistenza tra riavvii (unsplash_cache.json) |
| Risoluzione batch post-LLM |
| Unsplash chiamato UNA SOLA VOLTA dopo il batch completo |
|
| image_url_map salvato nel job JSON per riuso in export con edits (no re-chiamata Unsplash) |
| None-preserving merge per nuovi campi API key (stesso pattern di api_key esistente) |
|
|
| created |
modified |
| backend/services/unsplash_service.py |
|
| backend/schemas/settings.py |
| backend/routers/settings.py |
| backend/services/csv_builder.py |
| backend/services/generation_pipeline.py |
| backend/routers/export.py |
|
|
| Risoluzione Unsplash avviene UNA SOLA VOLTA dopo il batch LLM, non ad ogni download CSV |
| image_url_map salvato nel job JSON: riusato da export con edits senza re-chiamare Unsplash |
| generate_single NON risolve Unsplash: velocita' e riuso map del job originale |
| Dizionario statico IT->EN con ~30 keyword B2B per traduzione (no API translation) |
| Fallback trasparente: keyword non risolte restano testuali, nessun errore bloccante |
| Rate limit: se X-Ratelimit-Remaining < 5, stop batch corrente con keyword restanti non risolte |
| No retry su 401/403 (API key invalida), 1 retry su errori di rete |
|
| UnsplashService chiuso con close() nel finally block dopo ogni risoluzione batch |
| _resolve_image() come metodo privato CSVBuilder per separare logica di risoluzione |
| Optional[dict[str, str]] come tipo per image_url_map in tutto il sistema |
|
5min |
2026-03-09 |