conductor-oss/conductor · error · RuntimeException
Failed to download from {url}
Error message
Failed to download from {url} What it means
GeminiVertex.downloadFromUrl() catches any checked Exception (IOException, etc.) during the media URL download and wraps it with this message. RuntimeException (including error 192) is rethrown unchanged first. The original exception is preserved as the cause. This covers all transport-layer failures during media download from Gemini-provided URLs.
Source
Thrown at ai/src/main/java/org/conductoross/conductor/ai/providers/gemini/GeminiVertex.java:199
}
}
builder.media(mediaList);
}
return builder.build();
}
private byte[] downloadFromUrl(String url) {
okhttp3.Request request = new okhttp3.Request.Builder().url(url).get().build();
try (okhttp3.Response response = httpClient.newCall(request).execute()) {
if (response.body() == null) {
throw new RuntimeException("Empty response downloading from " + url);
}
return response.body().bytes();
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new RuntimeException("Failed to download from " + url, e);
}
}
@Override
public LLMResponse generateAudio(AudioGenRequest request) {
GeminiApi.SpeechConfig speechConfig =
new GeminiApi.SpeechConfig(
new GeminiApi.VoiceConfig(
new GeminiApi.PrebuiltVoiceConfig(request.getVoice())));
GeminiApi.GenerationConfig genConfig =
new GeminiApi.GenerationConfig(
null,
null,
null,
request.getMaxTokens(),
request.getStopWords(),
request.getFrequencyPenalty(),
null,View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Inspect getCause() for the specific IOException.
- Implement retry logic — media downloads from signed URLs are often transient-failure recoverable if the URL hasn't expired.
- Increase OkHttp readTimeout for video/media downloads (videos can be large).
- Verify network connectivity to the Google Cloud Storage / CDN domain in the URL.
Defensive patterns
Strategy: retry
Validate before calling
// Validate network reachability before download
void validateDownloadUrl(String url) {
try {
new java.net.URL(url).openConnection().connect();
} catch (java.io.IOException e) {
throw new IllegalArgumentException(
"Cannot reach media URL: " + url, e);
}
} Try / catch
try {
return vertex.downloadFromUrl(url);
} catch (RuntimeException e) {
if (!e.getMessage().startsWith("Empty response")
&& e.getCause() instanceof java.io.IOException) {
// Transient network error — retry with backoff
Thread.sleep(3000);
return vertex.downloadFromUrl(url);
}
throw e;
} Prevention
- Verify the Conductor host can reach Google Cloud Storage / CDN domains.
- Configure OkHttp with a read timeout large enough for video files.
- Implement retry with exponential backoff for transient IOException causes.
- Log the cause exception to distinguish DNS failures from TLS errors from timeouts.
When it happens
Trigger: IOException during the OkHttp GET to the Gemini-provided media URL: connection timeout, SSL handshake failure, connection reset, DNS resolution failure for the Google storage/CDN host.
Common situations: Network partition or firewall blocking Google Cloud Storage / CDN hosts. OkHttp readTimeout too short for large video files. Transient network blip during download. Proxy misconfiguration stripping or mangling the download request.
Related errors
- Gemini generateContent failed: {message}
- Failed to download image from {url}
- Gemini generateImages failed: {message}
- Gemini embedContent failed
- Empty response downloading from {url}
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/03e7f67c5e3cd6d0.
Report an issue: GitHub.