55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package ollama
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
type ListRunningModelsResponse struct {
|
|
Models []struct {
|
|
Name string `json:"name"`
|
|
Model string `json:"model"`
|
|
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"`
|
|
ExpiresAt string `json:"expires_at"`
|
|
SizeVram string `json:"size_vram"`
|
|
ContextLength int `json:"context_length"`
|
|
} `json:"models"`
|
|
}
|
|
|
|
func (o Ollama) ListRunningModels() (ListRunningModelsResponse, error) {
|
|
req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/ps", o.baseUrl), nil)
|
|
if err != nil {
|
|
return ListRunningModelsResponse{}, err
|
|
}
|
|
|
|
for key, val := range o.customHeaders {
|
|
req.Header.Set(key, val)
|
|
}
|
|
|
|
resp, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return ListRunningModelsResponse{}, err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
return ListRunningModelsResponse{}, errors.New("status code is not 200")
|
|
}
|
|
|
|
var respBody ListRunningModelsResponse
|
|
if err := json.NewDecoder(resp.Body).Decode(&respBody); err != nil {
|
|
return ListRunningModelsResponse{}, err
|
|
}
|
|
return respBody, nil
|
|
}
|