@@ -18,6 +18,7 @@ type VendorUsageResult struct {
1818 OK bool `json:"ok"`
1919 Vendor string `json:"vendor,omitempty"`
2020 Template string `json:"templateType,omitempty"`
21+ Text string `json:"text,omitempty"`
2122 Usage usage.Result `json:"usage,omitempty"`
2223 Error string `json:"error,omitempty"`
2324}
@@ -50,6 +51,17 @@ func resolveVendorCredentials(vendor profile.Profile) (baseURL, apiKey, template
5051 }
5152 baseURL = strings .TrimSpace (vendor .BaseURL )
5253 apiKey = strings .TrimSpace (vendor .APIKey )
54+ if baseURL == "" || apiKey == "" {
55+ for _ , model := range vendor .Models {
56+ modelBaseURL := strings .TrimSpace (model .BaseURL )
57+ modelAPIKey := strings .TrimSpace (model .APIKey )
58+ if modelBaseURL != "" && modelAPIKey != "" {
59+ baseURL = modelBaseURL
60+ apiKey = modelAPIKey
61+ break
62+ }
63+ }
64+ }
5365 if baseURL == "" || apiKey == "" {
5466 return "" , "" , "" , fmt .Errorf ("vendor base URL and API key are required" )
5567 }
@@ -65,7 +77,13 @@ func resolveVendorCredentials(vendor profile.Profile) (baseURL, apiKey, template
6577 return baseURL , apiKey , templateType , nil
6678}
6779
68- // QueryVendorUsage queries upstream quota/balance for one persisted API vendor.
80+ func querySubscriptionVendorUsage (vendor profile.Profile ) usage.Result {
81+ flat := vendor
82+ profile .HydrateSubscriptionCredentials (& flat )
83+ return usage .QuerySubscriptionUsage (flat .SubscriptionProviderID , flat .APIKey , flat .AccountID )
84+ }
85+
86+ // QueryVendorUsage queries upstream quota/balance for one persisted API or subscription vendor.
6987func QueryVendorUsage (vendorName string ) VendorUsageResult {
7088 name := strings .TrimSpace (vendorName )
7189 if name == "" {
@@ -79,6 +97,17 @@ func QueryVendorUsage(vendorName string) VendorUsageResult {
7997 if ! ok {
8098 return VendorUsageResult {OK : false , Error : fmt .Sprintf ("vendor not found: %s" , name )}
8199 }
100+ if strings .EqualFold (strings .TrimSpace (vendor .Kind ), "subscription" ) || strings .TrimSpace (vendor .SubscriptionProviderID ) != "" {
101+ result := querySubscriptionVendorUsage (vendor )
102+ return VendorUsageResult {
103+ OK : result .Success ,
104+ Vendor : name ,
105+ Template : "subscription" ,
106+ Text : usage .FormatResult (result ),
107+ Usage : result ,
108+ Error : result .Error ,
109+ }
110+ }
82111 baseURL , apiKey , templateType , err := resolveVendorCredentials (vendor )
83112 if err != nil {
84113 return VendorUsageResult {OK : false , Vendor : name , Error : err .Error ()}
@@ -88,6 +117,7 @@ func QueryVendorUsage(vendorName string) VendorUsageResult {
88117 OK : result .Success ,
89118 Vendor : name ,
90119 Template : templateType ,
120+ Text : usage .FormatResult (result ),
91121 Usage : result ,
92122 Error : result .Error ,
93123 }
0 commit comments