Improve runtime error messages
build-push / docker (push) Has been cancelled

This commit is contained in:
AI Assistant
2026-03-13 10:44:00 +09:00
parent 189802b2f0
commit d0fca7374d
3 changed files with 30 additions and 15 deletions
+1 -1
View File
@@ -164,7 +164,7 @@ func (s *SearchService) search(query, categories, engine, source string) ([]Sear
} `json:"results"`
}
if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil {
return nil, err
return nil, fmt.Errorf("searxng JSON decode failed for query %q: %w", query, err)
}
results := make([]SearchResult, 0, len(payload.Results))
+10 -9
View File
@@ -65,12 +65,13 @@ Keep the original language when possible. User query: ` + query,
endpoint := "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=" + g.APIKey
resp, err := g.Client.Post(endpoint, "application/json", bytes.NewReader(rawBody))
if err != nil {
return []string{query}, err
return []string{query}, fmt.Errorf("gemini query expansion request failed: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode >= 300 {
return []string{query}, fmt.Errorf("gemini returned status %d for query expansion", resp.StatusCode)
data, _ := io.ReadAll(io.LimitReader(resp.Body, 2048))
return []string{query}, fmt.Errorf("gemini query expansion returned status %d: %s", resp.StatusCode, strings.TrimSpace(string(data)))
}
var payload struct {
@@ -83,15 +84,15 @@ Keep the original language when possible. User query: ` + query,
} `json:"candidates"`
}
if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil {
return []string{query}, err
return []string{query}, fmt.Errorf("gemini query expansion response decode failed: %w", err)
}
if len(payload.Candidates) == 0 || len(payload.Candidates[0].Content.Parts) == 0 {
return []string{query}, nil
return []string{query}, fmt.Errorf("gemini query expansion returned no candidates")
}
var parsed QueryExpansion
if err := json.Unmarshal([]byte(payload.Candidates[0].Content.Parts[0].Text), &parsed); err != nil {
return []string{query}, err
return []string{query}, fmt.Errorf("gemini query expansion JSON parse failed: %w", err)
}
queries := []string{query}
@@ -159,7 +160,7 @@ Mark only the best matches as recommended=true. Keep reasons concise. Recommend
if resp.StatusCode >= 300 {
data, _ := io.ReadAll(io.LimitReader(resp.Body, 2048))
return nil, fmt.Errorf("gemini returned status %d: %s", resp.StatusCode, string(data))
return nil, fmt.Errorf("gemini vision returned status %d: %s", resp.StatusCode, strings.TrimSpace(string(data)))
}
var payload struct {
@@ -172,10 +173,10 @@ Mark only the best matches as recommended=true. Keep reasons concise. Recommend
} `json:"candidates"`
}
if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil {
return nil, err
return nil, fmt.Errorf("gemini vision response decode failed: %w", err)
}
if len(payload.Candidates) == 0 || len(payload.Candidates[0].Content.Parts) == 0 {
return nil, fmt.Errorf("gemini returned no candidates")
return nil, fmt.Errorf("gemini vision returned no candidates")
}
var parsed struct {
@@ -186,7 +187,7 @@ Mark only the best matches as recommended=true. Keep reasons concise. Recommend
} `json:"recommendations"`
}
if err := json.Unmarshal([]byte(payload.Candidates[0].Content.Parts[0].Text), &parsed); err != nil {
return nil, err
return nil, fmt.Errorf("gemini vision JSON parse failed: %w", err)
}
recommendations := make([]AIRecommendation, 0, len(parsed.Recommendations))