go-ollama: first release v0.1.0
This commit is contained in:
54
list_models.go
Normal file
54
list_models.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package ollama
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type ListModelsResponse struct {
|
||||
Models []struct {
|
||||
Name string `json:"name"`
|
||||
Model string `json:"model"`
|
||||
RemoteModel string `json:"remote_model"`
|
||||
RemoteHost string `json:"remote_host"`
|
||||
ModifiedAt string `json:"modified_at"`
|
||||
Size int `json:"size"`
|
||||
Digest string `json:"digest"`
|
||||
Details struct {
|
||||
Format string `json:"format"`
|
||||
Family string `json:"family"`
|
||||
Families []string `json:"families"`
|
||||
ParameterSize string `json:"parameter_size"`
|
||||
QuantizationLevel string `json:"quantization_level"`
|
||||
} `json:"details"`
|
||||
} `json:"models"`
|
||||
}
|
||||
|
||||
func (o Ollama) ListModels() (ListModelsResponse, int, error) {
|
||||
req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/tags", o.baseUrl), nil)
|
||||
if err != nil {
|
||||
return ListModelsResponse{}, -1, err
|
||||
}
|
||||
|
||||
for key, val := range o.customHeaders {
|
||||
req.Header.Set(key, val)
|
||||
}
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return ListModelsResponse{}, -1, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
return ListModelsResponse{}, resp.StatusCode, errors.New("status code is not 200")
|
||||
}
|
||||
|
||||
var respBody ListModelsResponse
|
||||
if err := json.NewDecoder(resp.Body).Decode(&respBody); err != nil {
|
||||
return ListModelsResponse{}, -1, err
|
||||
}
|
||||
return respBody, resp.StatusCode, nil
|
||||
}
|
||||
Reference in New Issue
Block a user