| 251 | } |
| 252 | |
| 253 | func (m *modelAPI) ListModels(ctx context.Context) ([]string, error) { |
| 254 | cmd := exec.CommandContext(ctx, m.path, "ls", "--json") |
| 255 | err := m.prepare(ctx, cmd) |
| 256 | if err != nil { |
| 257 | return nil, err |
| 258 | } |
| 259 | |
| 260 | output, err := cmd.CombinedOutput() |
| 261 | if err != nil { |
| 262 | return nil, fmt.Errorf("error checking available models: %w", err) |
| 263 | } |
| 264 | |
| 265 | type AvailableModel struct { |
| 266 | Id string `json:"id"` |
| 267 | Tags []string `json:"tags"` |
| 268 | Created int `json:"created"` |
| 269 | } |
| 270 | |
| 271 | models := []AvailableModel{} |
| 272 | err = json.Unmarshal(output, &models) |
| 273 | if err != nil { |
| 274 | return nil, fmt.Errorf("error unmarshalling available models: %w", err) |
| 275 | } |
| 276 | var availableModels []string |
| 277 | for _, model := range models { |
| 278 | availableModels = append(availableModels, model.Tags...) |
| 279 | } |
| 280 | return availableModels, nil |
| 281 | } |
| 282 | |
| 283 | // supportsRuntimeFlags checks if the docker model version supports runtime flags |
| 284 | // Runtime flags are supported in version >= v1.0.6 |