diff --git a/app/MindWork AI Studio/Provider/Google/Model.cs b/app/MindWork AI Studio/Provider/Google/Model.cs
deleted file mode 100644
index f1a53282..00000000
--- a/app/MindWork AI Studio/Provider/Google/Model.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-namespace AIStudio.Provider.Google;
-
-public readonly record struct Model(string Name, string DisplayName);
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Provider/Google/ModelsResponse.cs b/app/MindWork AI Studio/Provider/Google/ModelsResponse.cs
deleted file mode 100644
index 01cb81f9..00000000
--- a/app/MindWork AI Studio/Provider/Google/ModelsResponse.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace AIStudio.Provider.Google;
-
-///
-/// A data model for the response from the model endpoint.
-///
-///
-public readonly record struct ModelsResponse(IList Models);
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Provider/Google/ProviderGoogle.cs b/app/MindWork AI Studio/Provider/Google/ProviderGoogle.cs
index eba53dce..9509a32c 100644
--- a/app/MindWork AI Studio/Provider/Google/ProviderGoogle.cs
+++ b/app/MindWork AI Studio/Provider/Google/ProviderGoogle.cs
@@ -260,6 +260,45 @@ public class ProviderGoogle() : BaseProvider(LLMProviders.GOOGLE, "https://gener
private sealed record GoogleEmbeddingResponse
{
public List? Embedding { get; set; }
+ try
+ {
+ var modelResponse = await response.Content.ReadFromJsonAsync(token);
+ if (modelResponse == default || modelResponse.Data.Count is 0)
+ {
+ LOGGER.LogError("Google model list response did not contain a valid data array.");
+ return [];
+ }
+
+ return modelResponse.Data
+ .Where(model => !string.IsNullOrWhiteSpace(model.Id))
+ .Select(model => new Model(this.NormalizeModelId(model.Id), model.DisplayName))
+ .ToArray();
+ }
+ catch (Exception e)
+ {
+ LOGGER.LogError("Failed to parse Google model list response: '{Message}'.", e.Message);
+ return [];
+ }
+ }
+
+ private bool IsEmbeddingModel(string modelId)
+ {
+ return modelId.Contains("embedding", StringComparison.OrdinalIgnoreCase) ||
+ modelId.Contains("embed", StringComparison.OrdinalIgnoreCase);
+ }
+
+ private Model WithDisplayNameFallback(Model model)
+ {
+ return string.IsNullOrWhiteSpace(model.DisplayName)
+ ? new Model(model.Id, model.Id)
+ : model;
+ }
+
+ private string NormalizeModelId(string modelId)
+ {
+ return modelId.StartsWith("models/", StringComparison.OrdinalIgnoreCase)
+ ? modelId["models/".Length..]
+ : modelId;
}
private sealed record GoogleEmbedding