/* https://learn.microsoft.com/zh-cn/azure/cognitive-services/openai/chatgpt-quickstart https://learn.microsoft.com/zh-cn/azure/ai-services/openai/reference#chat-completions curl $AZURE_OPENAI_ENDPOINT/openai/deployments/gpt-35-turbo/chat/completions?api-version=2023-03-15-preview \ -H "Content-Type: application/json" \ -H "api-key: $AZURE_OPENAI_KEY" \ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "你好"}] }' https://learn.microsoft.com/zh-cn/rest/api/cognitiveservices/azureopenaistable/models/list?tabs=HTTP curl $AZURE_OPENAI_ENDPOINT/openai/deployments?api-version=2022-12-01 \ -H "Content-Type: application/json" \ -H "api-key: $AZURE_OPENAI_KEY" \ */ package azureopenai import ( "encoding/json" "net/http" "regexp" "strings" ) var ( ENDPOINT string API_KEY string DEPLOYMENT_NAME string ) type ModelsList struct { Data []struct { ScaleSettings struct { ScaleType string `json:"scale_type"` } `json:"scale_settings"` Model string `json:"model"` Owner string `json:"owner"` ID string `json:"id"` Status string `json:"status"` CreatedAt int `json:"created_at"` UpdatedAt int `json:"updated_at"` Object string `json:"object"` } `json:"data"` Object string `json:"object"` } func Models(endpoint, apikey string) (*ModelsList, error) { endpoint = RemoveTrailingSlash(endpoint) var modelsl ModelsList req, _ := http.NewRequest(http.MethodGet, endpoint+"/openai/deployments?api-version=2022-12-01", nil) req.Header.Set("api-key", apikey) resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } defer resp.Body.Close() err = json.NewDecoder(resp.Body).Decode(&modelsl) if err != nil { return nil, err } return &modelsl, nil } func RemoveTrailingSlash(s string) string { const prefix = "openai.azure.com/" if strings.HasSuffix(strings.TrimSpace(s), prefix) && strings.HasSuffix(s, "/") { return s[:len(s)-1] } return s } func GetResourceName(url string) string { re := regexp.MustCompile(`https?://(.+)\.openai\.azure\.com/?`) match := re.FindStringSubmatch(url) if len(match) > 1 { return match[1] } return "" }