url_builder.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package vertex
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. const (
  7. DefaultAPIVersion = "v1"
  8. OpenSourceAPIVersion = "v1beta1"
  9. PublisherGoogle = "google"
  10. PublisherAnthropic = "anthropic"
  11. )
  12. func normalizeVertexBaseURL(baseURL string) string {
  13. return strings.TrimRight(strings.TrimSpace(baseURL), "/")
  14. }
  15. func normalizeVertexRegion(region string) string {
  16. region = strings.TrimSpace(region)
  17. if region == "" {
  18. return "global"
  19. }
  20. return region
  21. }
  22. func appendVertexAPIVersion(baseURL, version string) string {
  23. version = strings.Trim(strings.TrimSpace(version), "/")
  24. if version == "" {
  25. return baseURL
  26. }
  27. if strings.HasSuffix(baseURL, "/"+version) {
  28. return baseURL
  29. }
  30. return baseURL + "/" + version
  31. }
  32. func BuildAPIBaseURL(baseURL, version, projectID, region string) string {
  33. if normalized := normalizeVertexBaseURL(baseURL); normalized != "" {
  34. normalized = appendVertexAPIVersion(normalized, version)
  35. region = normalizeVertexRegion(region)
  36. if strings.TrimSpace(projectID) != "" {
  37. normalized = fmt.Sprintf("%s/projects/%s/locations/%s", normalized, projectID, region)
  38. }
  39. return normalized
  40. }
  41. region = normalizeVertexRegion(region)
  42. if strings.TrimSpace(projectID) == "" {
  43. if region == "global" {
  44. return fmt.Sprintf("https://aiplatform.googleapis.com/%s", version)
  45. }
  46. return fmt.Sprintf("https://%s-aiplatform.googleapis.com/%s", region, version)
  47. }
  48. if region == "global" {
  49. return fmt.Sprintf("https://aiplatform.googleapis.com/%s/projects/%s/locations/global", version, projectID)
  50. }
  51. return fmt.Sprintf("https://%s-aiplatform.googleapis.com/%s/projects/%s/locations/%s", region, version, projectID, region)
  52. }
  53. func BuildPublisherModelURL(baseURL, version, projectID, region, publisher, modelName, action string) string {
  54. return fmt.Sprintf(
  55. "%s/publishers/%s/models/%s:%s",
  56. BuildAPIBaseURL(baseURL, version, projectID, region),
  57. publisher,
  58. modelName,
  59. action,
  60. )
  61. }
  62. func BuildGoogleModelURL(baseURL, version, projectID, region, modelName, action string) string {
  63. return BuildPublisherModelURL(baseURL, version, projectID, region, PublisherGoogle, modelName, action)
  64. }
  65. func BuildAnthropicModelURL(baseURL, version, projectID, region, modelName, action string) string {
  66. return BuildPublisherModelURL(baseURL, version, projectID, region, PublisherAnthropic, modelName, action)
  67. }
  68. func BuildOpenSourceChatCompletionsURL(baseURL, projectID, region string) string {
  69. return fmt.Sprintf(
  70. "%s/endpoints/openapi/chat/completions",
  71. BuildAPIBaseURL(baseURL, OpenSourceAPIVersion, projectID, region),
  72. )
  73. }