feat: establish unified administration and model context baseline
This commit is contained in:
@@ -24,11 +24,10 @@ const (
|
||||
var renameProjectionDirectory = os.Rename
|
||||
|
||||
type runtimeCatalog struct {
|
||||
SchemaVersion int `json:"schemaVersion"`
|
||||
DefaultSession string `json:"defaultSession"`
|
||||
DefaultMetadataGeneration string `json:"defaultMetadataGeneration,omitempty"`
|
||||
Embedding config.ModelCatalogEmbedding `json:"embedding"`
|
||||
Models []runtimeCatalogModel `json:"models"`
|
||||
SchemaVersion int `json:"schemaVersion"`
|
||||
DefaultInteraction string `json:"defaultInteraction"`
|
||||
Embedding config.ModelCatalogEmbedding `json:"embedding"`
|
||||
Models []runtimeCatalogModel `json:"models"`
|
||||
}
|
||||
|
||||
type runtimeCatalogModel struct {
|
||||
@@ -74,19 +73,33 @@ type piSettings struct {
|
||||
|
||||
// Render builds every projection in memory so no partial candidate can be published.
|
||||
func Render(installation config.Installation) (map[string][]byte, error) {
|
||||
if err := installation.ModelCatalog.NormalizeDefaults(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
models := installation.ModelCatalog.RuntimeModels()
|
||||
hasMetadata := false
|
||||
for _, model := range models {
|
||||
hasMetadata = hasMetadata || model.MetadataGeneration != nil
|
||||
}
|
||||
runtimeModels := make([]runtimeCatalogModel, 0, len(models))
|
||||
customProviders := make(map[string]piProvider)
|
||||
enabled := make([]string, 0)
|
||||
for _, model := range models {
|
||||
sessionAdapter, metadataAdapter := model.SessionAdapter, model.MetadataAdapter
|
||||
if model.Session == nil {
|
||||
sessionAdapter = nil
|
||||
}
|
||||
if model.MetadataGeneration == nil {
|
||||
metadataAdapter = nil
|
||||
}
|
||||
runtimeModels = append(runtimeModels, runtimeCatalogModel{
|
||||
ID: model.ID, Provider: model.Provider, Model: model.Model, Label: model.Label,
|
||||
UpstreamModel: model.UpstreamModel, Endpoint: model.Endpoint,
|
||||
Authentication: model.Authentication, SessionAdapter: model.SessionAdapter,
|
||||
MetadataAdapter: model.MetadataAdapter, Session: model.Session,
|
||||
Authentication: model.Authentication, SessionAdapter: sessionAdapter,
|
||||
MetadataAdapter: metadataAdapter, Session: model.Session,
|
||||
MetadataGeneration: model.MetadataGeneration,
|
||||
})
|
||||
if model.Session == nil {
|
||||
if model.Session == nil || (hasMetadata && model.MetadataGeneration == nil) {
|
||||
continue
|
||||
}
|
||||
if model.SessionAdapter == nil || model.SessionAdapter.Mode != "openai_compatible" {
|
||||
@@ -117,9 +130,8 @@ func Render(installation config.Installation) (map[string][]byte, error) {
|
||||
sort.Strings(enabled)
|
||||
|
||||
catalogBytes, err := marshalJSON(runtimeCatalog{
|
||||
SchemaVersion: 1, DefaultSession: installation.ModelCatalog.Defaults.Session,
|
||||
DefaultMetadataGeneration: installation.ModelCatalog.Defaults.MetadataGeneration,
|
||||
Embedding: installation.ModelCatalog.Embedding, Models: runtimeModels,
|
||||
SchemaVersion: 2, DefaultInteraction: installation.ModelCatalog.Defaults.Interaction,
|
||||
Embedding: installation.ModelCatalog.Embedding, Models: runtimeModels,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("render runtime model catalog: %w", err)
|
||||
@@ -294,7 +306,7 @@ func renderCompose(installation config.Installation, fingerprint string) []byte
|
||||
embedding-model-init:
|
||||
environment:
|
||||
OLLAMA_MODEL: %s
|
||||
`, strconv.Quote(fingerprint), strconv.Quote(installation.ModelCatalog.Defaults.Session),
|
||||
`, strconv.Quote(fingerprint), strconv.Quote(installation.ModelCatalog.Defaults.Interaction),
|
||||
strconv.Quote(embedding.ID), strconv.Quote(embeddingModelName(embedding.ID)), strconv.Quote(strconv.Itoa(embedding.Dimensions)),
|
||||
strconv.Quote(installation.GeneratedModelCatalogPath()), strconv.Quote(installation.GeneratedPiModelsPath()),
|
||||
strconv.Quote(installation.GeneratedPiSettingsPath()), strconv.Quote(embedding.ID),
|
||||
|
||||
Reference in New Issue
Block a user