This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user