in vertex/vertex.go [57:107]
func vertexMiddleware(region, projectID string) sdkoption.Middleware {
return func(r *http.Request, next sdkoption.MiddlewareNext) (*http.Response, error) {
if r.Body != nil {
body, err := io.ReadAll(r.Body)
if err != nil {
return nil, err
}
r.Body.Close()
if !gjson.GetBytes(body, "anthropic_version").Exists() {
body, _ = sjson.SetBytes(body, "anthropic_version", DefaultVersion)
}
if r.URL.Path == "/v1/messages" && r.Method == http.MethodPost {
if projectID == "" {
return nil, fmt.Errorf("no projectId was given and it could not be resolved from credentials")
}
model := gjson.GetBytes(body, "model").String()
stream := gjson.GetBytes(body, "stream").Bool()
body, _ = sjson.DeleteBytes(body, "model")
specifier := "rawPredict"
if stream {
specifier = "streamRawPredict"
}
r.URL.Path = fmt.Sprintf("/v1/projects/%s/locations/%s/publishers/anthropic/models/%s:%s", projectID, region, model, specifier)
}
if r.URL.Path == "/v1/messages/count_tokens" && r.Method == http.MethodPost {
if projectID == "" {
return nil, fmt.Errorf("no projectId was given and it could not be resolved from credentials")
}
r.URL.Path = fmt.Sprintf("/v1/projects/%s/locations/%s/publishers/anthropic/models/count-tokens:rawPredict", projectID, region)
}
reader := bytes.NewReader(body)
r.Body = io.NopCloser(reader)
r.GetBody = func() (io.ReadCloser, error) {
_, err := reader.Seek(0, 0)
return io.NopCloser(reader), err
}
r.ContentLength = int64(len(body))
}
return next(r)
}
}