package ollama import ( "fmt" ) // ConnectionError wraps a network-level error when the Ollama target is unreachable. // Phase 3 uses this to distinguish connection failures (retry-eligible) from HTTP // errors (usually not retryable). // // Why: callers must differentiate "target is down" from "target returned 4xx/5xx" // to decide on retry strategy. // What: wraps a net-level error and satisfies the error and Unwrap interfaces. // Test: create a ConnectionError, verify errors.Is/As can match it. type ConnectionError struct { URL string Err error } func (e *ConnectionError) Error() string { return fmt.Sprintf("connection to ollama target %s failed: %v", e.URL, e.Err) } func (e *ConnectionError) Unwrap() error { return e.Err } // HTTPError represents a non-2xx HTTP response from the Ollama target. // // Why: callers need the status code to distinguish client errors (4xx) from // server errors (5xx) and decide on retry logic. // What: holds the HTTP status code and response body for error diagnosis. // Test: create an HTTPError with status 500, verify Error() includes the code. type HTTPError struct { StatusCode int Body string } func (e *HTTPError) Error() string { return fmt.Sprintf("ollama target returned HTTP %d: %s", e.StatusCode, e.Body) }