integrate with models.dev

This commit is contained in:
Dax Raad
2025-06-05 14:59:07 -04:00
parent 1384a5e3e6
commit db2bb32bcf
11 changed files with 212 additions and 180 deletions

View File

@@ -401,10 +401,25 @@
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Provider.Info"
}
"type": "object",
"properties": {
"providers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Provider.Info"
}
},
"default": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"providers",
"default"
]
}
}
}
@@ -1080,13 +1095,9 @@
"name": {
"type": "string"
},
"options": {
"type": "object",
"additionalProperties": {}
},
"models": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/Provider.Model"
}
}
@@ -1106,6 +1117,12 @@
"name": {
"type": "string"
},
"attachment": {
"type": "boolean"
},
"reasoning": {
"type": "boolean"
},
"cost": {
"type": "object",
"properties": {
@@ -1129,24 +1146,27 @@
"outputCached"
]
},
"contextWindow": {
"type": "number"
},
"maxOutputTokens": {
"type": "number"
},
"attachment": {
"type": "boolean"
},
"reasoning": {
"type": "boolean"
"limit": {
"type": "object",
"properties": {
"context": {
"type": "number"
},
"output": {
"type": "number"
}
},
"required": [
"context",
"output"
]
}
},
"required": [
"id",
"attachment",
"cost",
"contextWindow",
"attachment"
"limit"
]
}
}

View File

@@ -203,26 +203,27 @@ type MessageToolInvocationToolResult struct {
// ProviderInfo defines model for Provider.Info.
type ProviderInfo struct {
Id string `json:"id"`
Models []ProviderModel `json:"models"`
Name string `json:"name"`
Options *map[string]interface{} `json:"options,omitempty"`
Id string `json:"id"`
Models map[string]ProviderModel `json:"models"`
Name string `json:"name"`
}
// ProviderModel defines model for Provider.Model.
type ProviderModel struct {
Attachment bool `json:"attachment"`
ContextWindow float32 `json:"contextWindow"`
Cost struct {
Attachment bool `json:"attachment"`
Cost struct {
Input float32 `json:"input"`
InputCached float32 `json:"inputCached"`
Output float32 `json:"output"`
OutputCached float32 `json:"outputCached"`
} `json:"cost"`
Id string `json:"id"`
MaxOutputTokens *float32 `json:"maxOutputTokens,omitempty"`
Name *string `json:"name,omitempty"`
Reasoning *bool `json:"reasoning,omitempty"`
Id string `json:"id"`
Limit struct {
Context float32 `json:"context"`
Output float32 `json:"output"`
} `json:"limit"`
Name *string `json:"name,omitempty"`
Reasoning *bool `json:"reasoning,omitempty"`
}
// PermissionInfo defines model for permission.info.
@@ -1815,7 +1816,10 @@ func (r PostPathGetResponse) StatusCode() int {
type PostProviderListResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *[]ProviderInfo
JSON200 *struct {
Default map[string]string `json:"default"`
Providers []ProviderInfo `json:"providers"`
}
}
// Status returns HTTPResponse.Status
@@ -2299,7 +2303,10 @@ func ParsePostProviderListResponse(rsp *http.Response) (*PostProviderListRespons
switch {
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200:
var dest []ProviderInfo
var dest struct {
Default map[string]string `json:"default"`
Providers []ProviderInfo `json:"providers"`
}
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
return nil, err
}