Spaces:
Configuration error
Configuration error
| package clients | |
| import ( | |
| "bytes" | |
| "encoding/json" | |
| "fmt" | |
| "io" | |
| "net/http" | |
| ) | |
| // Define a struct to hold the store API client | |
| type StoreClient struct { | |
| BaseURL string | |
| Client *http.Client | |
| } | |
| type SetRequest struct { | |
| Keys [][]float32 `json:"keys"` | |
| Values []string `json:"values"` | |
| } | |
| type GetRequest struct { | |
| Keys [][]float32 `json:"keys"` | |
| } | |
| type GetResponse struct { | |
| Keys [][]float32 `json:"keys"` | |
| Values []string `json:"values"` | |
| } | |
| type DeleteRequest struct { | |
| Keys [][]float32 `json:"keys"` | |
| } | |
| type FindRequest struct { | |
| TopK int `json:"topk"` | |
| Key []float32 `json:"key"` | |
| } | |
| type FindResponse struct { | |
| Keys [][]float32 `json:"keys"` | |
| Values []string `json:"values"` | |
| Similarities []float32 `json:"similarities"` | |
| } | |
| // Constructor for StoreClient | |
| func NewStoreClient(baseUrl string) *StoreClient { | |
| return &StoreClient{ | |
| BaseURL: baseUrl, | |
| Client: &http.Client{}, | |
| } | |
| } | |
| // Implement Set method | |
| func (c *StoreClient) Set(req SetRequest) error { | |
| return c.doRequest("stores/set", req) | |
| } | |
| // Implement Get method | |
| func (c *StoreClient) Get(req GetRequest) (*GetResponse, error) { | |
| body, err := c.doRequestWithResponse("stores/get", req) | |
| if err != nil { | |
| return nil, err | |
| } | |
| var resp GetResponse | |
| err = json.Unmarshal(body, &resp) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return &resp, nil | |
| } | |
| // Implement Delete method | |
| func (c *StoreClient) Delete(req DeleteRequest) error { | |
| return c.doRequest("stores/delete", req) | |
| } | |
| // Implement Find method | |
| func (c *StoreClient) Find(req FindRequest) (*FindResponse, error) { | |
| body, err := c.doRequestWithResponse("stores/find", req) | |
| if err != nil { | |
| return nil, err | |
| } | |
| var resp FindResponse | |
| err = json.Unmarshal(body, &resp) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return &resp, nil | |
| } | |
| // Helper function to perform a request without expecting a response body | |
| func (c *StoreClient) doRequest(path string, data interface{}) error { | |
| jsonData, err := json.Marshal(data) | |
| if err != nil { | |
| return err | |
| } | |
| req, err := http.NewRequest("POST", c.BaseURL+"/"+path, bytes.NewBuffer(jsonData)) | |
| if err != nil { | |
| return err | |
| } | |
| req.Header.Set("Content-Type", "application/json") | |
| resp, err := c.Client.Do(req) | |
| if err != nil { | |
| return err | |
| } | |
| defer resp.Body.Close() | |
| if resp.StatusCode != http.StatusOK { | |
| return fmt.Errorf("API request to %s failed with status code %d", path, resp.StatusCode) | |
| } | |
| return nil | |
| } | |
| // Helper function to perform a request and parse the response body | |
| func (c *StoreClient) doRequestWithResponse(path string, data interface{}) ([]byte, error) { | |
| jsonData, err := json.Marshal(data) | |
| if err != nil { | |
| return nil, err | |
| } | |
| req, err := http.NewRequest("POST", c.BaseURL+"/"+path, bytes.NewBuffer(jsonData)) | |
| if err != nil { | |
| return nil, err | |
| } | |
| req.Header.Set("Content-Type", "application/json") | |
| resp, err := c.Client.Do(req) | |
| if err != nil { | |
| return nil, err | |
| } | |
| defer resp.Body.Close() | |
| if resp.StatusCode != http.StatusOK { | |
| return nil, fmt.Errorf("API request to %s failed with status code %d", path, resp.StatusCode) | |
| } | |
| body, err := io.ReadAll(resp.Body) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return body, nil | |
| } | |