diff --git a/internal/web/uploads.go b/internal/web/uploads.go
index 8ef6a43..836b493 100644
--- a/internal/web/uploads.go
+++ b/internal/web/uploads.go
@@ -275,24 +275,21 @@ func titleFromFilename(name string) string {
// definition the start-up validation uses, not a second string match here (#52).
//
// The endpoint is one alias, except for the two-engine path (ADR-034), which writes
-// " + , reconciled by ". Every alias in it is judged on its own, so a
-// composite of local models is local and one naming a cloud alias names that provider.
+// " + , reconciled by ". Every word of it that is not that format's own
+// connector is judged as an alias, so a composite of local models is local, and anything
+// else (a cloud alias, one with no provider prefix, one with a space in it) is not.
func cloudProvider(endpoint string) (string, bool) {
- if strings.TrimSpace(endpoint) == "" {
- return "", false
- }
- aliases := []string{}
for _, tok := range strings.Fields(endpoint) {
- if tok = strings.Trim(tok, ","); strings.Contains(tok, "/") {
- aliases = append(aliases, tok)
+ tok = strings.Trim(tok, ",")
+ switch tok {
+ case "", "+", "reconciled", "by":
+ continue
}
- }
- if len(aliases) == 0 {
- aliases = append(aliases, strings.TrimSpace(endpoint))
- }
- for _, a := range aliases {
- if !config.IsLocalModel(a) {
- provider, _, _ := strings.Cut(a, "/")
+ if !config.IsLocalModel(tok) {
+ provider, _, _ := strings.Cut(tok, "/")
+ if provider == "" {
+ provider = tok
+ }
return provider, true
}
}
diff --git a/internal/web/uploads_cloud_note_test.go b/internal/web/uploads_cloud_note_test.go
index 7e68187..f703e76 100644
--- a/internal/web/uploads_cloud_note_test.go
+++ b/internal/web/uploads_cloud_note_test.go
@@ -82,3 +82,24 @@ func TestUploadStatus_AReconciledEndpointNamingACloudEngineStillNamesTheCloudPro
assert.Contains(t, b, "cloud service (berget)")
}
+
+// An alias without a provider prefix is not a local model, wherever it sits in the
+// composite: it must never be dropped from the judgement (PR #58 re-review).
+func TestUploadStatus_AReconciledEndpointWithAnUnprefixedAliasIsNotCalledLocal(t *testing.T) {
+ for _, endpoint := range []string{
+ "iguana/kb-whisper + whisper-1, reconciled by iguana/gemma4-26b",
+ "iguana/kb-whisper + whisper 1, reconciled by iguana/gemma4-26b",
+ "iguana/kb-whisper + berget / x, reconciled by iguana/gemma4-26b",
+ } {
+ t.Run(endpoint, func(t *testing.T) {
+ app, _ := newUploadApp(t, audioOK, 200<<20)
+ id := seedUpload(t, userID, "m", "done", "Synthetic transcript text.")
+ setEndpoint(t, id, endpoint)
+
+ b := body(t, do(t, app, get("/uploads/"+id+"/status")))
+
+ assert.Contains(t, b, "left the homelab")
+ assert.NotContains(t, b, "cloud service ()", "the note names a provider")
+ })
+ }
+}