39 lines
896 B
Go
39 lines
896 B
Go
package llm
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"net/http"
|
||
)
|
||
|
||
type OllamaTagsResponse struct {
|
||
Models []struct {
|
||
Name string `json:"name"`
|
||
} `json:"models"`
|
||
}
|
||
|
||
// Получить список моделей с указанного хоста
|
||
func GetModelsFromHost(host string) ([]string, error) {
|
||
resp, err := http.Get(host + "/api/tags")
|
||
if err != nil {
|
||
return nil, fmt.Errorf("ошибка запроса к %s/api/tags: %w", host, err)
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
if resp.StatusCode != http.StatusOK {
|
||
return nil, fmt.Errorf("Ollama вернула статус %s", resp.Status)
|
||
}
|
||
|
||
var data OllamaTagsResponse
|
||
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
|
||
return nil, fmt.Errorf("ошибка разбора JSON: %w", err)
|
||
}
|
||
|
||
out := make([]string, 0, len(data.Models))
|
||
for _, m := range data.Models {
|
||
out = append(out, m.Name)
|
||
}
|
||
|
||
return out, nil
|
||
}
|