|
1 | 1 | using System.Net; |
| 2 | +using System.Runtime.Serialization; |
2 | 3 | using System.Security.Claims; |
3 | 4 | using Microsoft.Extensions.DependencyInjection; |
4 | 5 | using Microsoft.Extensions.DependencyInjection.Extensions; |
@@ -355,10 +356,28 @@ public List<KeyValuePair<string, OpenAiProviderBase>> GetModelProviders(ChatComp |
355 | 356 | } |
356 | 357 |
|
357 | 358 | [ExcludeMetadata, Route("/chat/models")] |
358 | | -public class ChatModels : IGet, IReturn<string[]> |
| 359 | +public class ChatModels : IGet, IReturn<ModelInfo[]> |
359 | 360 | { |
360 | 361 | } |
361 | 362 |
|
| 363 | +[DataContract] |
| 364 | +public class ModelInfo |
| 365 | +{ |
| 366 | + [DataMember] |
| 367 | + public string Id { get; set; } |
| 368 | + [DataMember] |
| 369 | + public string Provider { get; set; } |
| 370 | + [DataMember(Name = "provider_model")] |
| 371 | + public string ProviderModel { get; set; } |
| 372 | + [DataMember] |
| 373 | + public ModelPrice? Pricing { get; set; } |
| 374 | +} |
| 375 | +public class ModelPrice |
| 376 | +{ |
| 377 | + public string? Input { get; set; } |
| 378 | + public string? Output { get; set; } |
| 379 | +} |
| 380 | + |
362 | 381 | [ExcludeMetadata, Route("/chat/config")] |
363 | 382 | public class ChatConfig : IGet, IReturn<string> |
364 | 383 | { |
@@ -492,12 +511,27 @@ public async Task<object> Get(ChatModels request) |
492 | 511 | { |
493 | 512 | var (feature, error) = await AssertAccessAsync(); |
494 | 513 | if (error != null) return error; |
495 | | - var models = new HashSet<string>(); |
| 514 | + var existingModels = new HashSet<string>(); |
| 515 | + var ret = new List<ModelInfo>(); |
496 | 516 | foreach (var entry in feature.Providers) |
497 | 517 | { |
498 | | - models.AddDistinctRange(entry.Value.Models.Keys); |
| 518 | + var providerId = entry.Key; |
| 519 | + var provider = entry.Value; |
| 520 | + foreach (var model in provider.Models) |
| 521 | + { |
| 522 | + if (!existingModels.Add(model.Key)) |
| 523 | + continue; |
| 524 | + existingModels.Add(model.Key); |
| 525 | + ret.Add(new ModelInfo |
| 526 | + { |
| 527 | + Id = model.Key, |
| 528 | + Provider = providerId, |
| 529 | + ProviderModel = model.Value, |
| 530 | + Pricing = provider.Pricing?.GetValueOrDefault(model.Key) ?? provider.DefaultPricing, |
| 531 | + }); |
| 532 | + } |
499 | 533 | } |
500 | | - return models; |
| 534 | + return ret; |
501 | 535 | } |
502 | 536 |
|
503 | 537 | public async Task<object> Get(ChatConfig request) |
|
0 commit comments