edgequake_llm/imagegen/
factory.rs1use std::sync::Arc;
4
5use crate::imagegen::error::{ImageGenError, Result};
6use crate::imagegen::providers::{
7 FalImageGen, GeminiImageGenProvider, MockImageGenProvider, VertexAIImageGen,
8};
9use crate::imagegen::traits::ImageGenProvider;
10
11pub struct ImageGenFactory;
13
14impl ImageGenFactory {
15 pub fn from_env() -> Result<Arc<dyn ImageGenProvider>> {
17 if std::env::var("GEMINI_API_KEY").is_ok() {
18 return Ok(Arc::new(GeminiImageGenProvider::from_env()?));
19 }
20
21 if std::env::var("GOOGLE_CLOUD_PROJECT").is_ok() {
22 return Ok(Arc::new(GeminiImageGenProvider::from_env_vertex_ai()?));
23 }
24
25 if std::env::var("FAL_KEY").is_ok() {
26 return Ok(Arc::new(FalImageGen::from_env()?));
27 }
28
29 Err(ImageGenError::ConfigError(
30 "no image generation credentials found; set GEMINI_API_KEY, GOOGLE_CLOUD_PROJECT, or FAL_KEY".to_string(),
31 ))
32 }
33
34 pub fn gemini_from_env() -> Result<GeminiImageGenProvider> {
36 GeminiImageGenProvider::from_env()
37 }
38
39 pub fn gemini_vertex_from_env() -> Result<GeminiImageGenProvider> {
41 GeminiImageGenProvider::from_env_vertex_ai()
42 }
43
44 pub fn vertex_imagen_from_env() -> Result<VertexAIImageGen> {
46 VertexAIImageGen::from_env()
47 }
48
49 pub fn fal_from_env() -> Result<FalImageGen> {
51 FalImageGen::from_env()
52 }
53
54 pub fn mock() -> MockImageGenProvider {
56 MockImageGenProvider::default()
57 }
58}