diff options
| -rw-r--r-- | internal/audio/openai_provider.go | 3 | ||||
| -rw-r--r-- | internal/audio/provider.go | 3 | ||||
| -rw-r--r-- | internal/image/nanobanana.go | 2 | ||||
| -rw-r--r-- | internal/image/openai.go | 10 | ||||
| -rw-r--r-- | internal/image/search.go | 6 |
5 files changed, 16 insertions, 8 deletions
diff --git a/internal/audio/openai_provider.go b/internal/audio/openai_provider.go index 1700baf..bf5ac58 100644 --- a/internal/audio/openai_provider.go +++ b/internal/audio/openai_provider.go @@ -12,6 +12,9 @@ import ( "github.com/sashabaranov/go-openai" ) +// Compile-time check that OpenAIProvider implements the Provider interface. +var _ Provider = (*OpenAIProvider)(nil) + // OpenAIProvider implements Provider interface for OpenAI TTS type OpenAIProvider struct { client *openai.Client diff --git a/internal/audio/provider.go b/internal/audio/provider.go index 4fdccfb..31b1180 100644 --- a/internal/audio/provider.go +++ b/internal/audio/provider.go @@ -75,6 +75,9 @@ func NewProvider(config *Config) (Provider, error) { } } +// Compile-time check that ProviderWithFallback implements the Provider interface. +var _ Provider = (*ProviderWithFallback)(nil) + // ProviderWithFallback wraps a primary provider with a fallback option type ProviderWithFallback struct { primary Provider diff --git a/internal/image/nanobanana.go b/internal/image/nanobanana.go index 93afe06..a35e4cf 100644 --- a/internal/image/nanobanana.go +++ b/internal/image/nanobanana.go @@ -157,7 +157,7 @@ func (c *NanoBananaClient) Download(ctx context.Context, url string) (io.ReadClo return nil, err } - resp, err := http.DefaultClient.Do(req) + resp, err := imageHTTPClient.Do(req) if err != nil { return nil, err } diff --git a/internal/image/openai.go b/internal/image/openai.go index e322d32..8edb182 100644 --- a/internal/image/openai.go +++ b/internal/image/openai.go @@ -13,6 +13,14 @@ import ( "github.com/sashabaranov/go-openai" ) +// Compile-time check that OpenAIClient implements the ImageSearcher interface. +var _ ImageSearcher = (*OpenAIClient)(nil) + +// imageHTTPClient is a shared HTTP client with a generous timeout for image +// downloads. http.DefaultClient has no timeout, which can block goroutines +// indefinitely on slow or unresponsive servers. +var imageHTTPClient = &http.Client{Timeout: 60 * time.Second} + // OpenAIClient implements ImageSearcher for OpenAI DALL-E image generation type OpenAIClient struct { client *openai.Client @@ -190,7 +198,7 @@ func (c *OpenAIClient) Download(ctx context.Context, url string) (io.ReadCloser, return nil, err } - resp, err := http.DefaultClient.Do(req) + resp, err := imageHTTPClient.Do(req) if err != nil { return nil, err } diff --git a/internal/image/search.go b/internal/image/search.go index 53004c1..80274eb 100644 --- a/internal/image/search.go +++ b/internal/image/search.go @@ -81,9 +81,3 @@ func (e *RateLimitError) Error() string { return e.Provider + ": rate limit exceeded" } -// DownloadImage is a utility function to download an image to a file -func DownloadImage(ctx context.Context, searcher ImageSearcher, url string, outputPath string) error { - // Implementation will be in a separate download.go file - // This is just the interface definition - return nil -} |
