## Create Vector Store

`client.VectorStores.New(ctx, body) (*VectorStore, error)`

**post** `/v5/vector-stores/create`

Create a new vector store for storing and querying document embeddings.

The vector store name must be unique within your account and follow naming conventions (3-63 characters,
alphanumeric with hyphens/underscores). Once created, the embedding configuration and dimensions
are immutable and cannot be changed. To use a different model, you must create a new vector store.

**Embedding Configuration:** Provide `embedding_config` (for base or custom model deployments),
`embedding_model` (shorthand for a base model), or `dimensions` only (raw embeddings).

- With `embedding_config` or `embedding_model`: dimensions are auto-derived, and documents can be
  upserted with text content (auto-embedded) or with pre-computed embeddings.
- With `dimensions` only: the store accepts only pre-computed embeddings. Semantic/hybrid queries
  are not supported (lexical search only).

**Indexed Fields:** Optionally specify metadata fields to index at creation time. Only indexed fields
can be used for filtering -- indexing is required, not just a performance optimization. Additional indexed
fields can be added later using the configure endpoint, but cannot be removed once added. Keep in mind
that each indexed field increases write latency and storage overhead, so only index fields you actively filter on.

### Parameters

- `body VectorStoreNewParams`

  - `Name param.Field[string]`

    A unique name for the vector store within the account

  - `Dimensions param.Field[int64]`

    Dimension size of embedding vectors. Required when neither 'embedding_config' nor 'embedding_model' is set. Automatically derived when an embedding model is provided.

  - `EmbeddingConfig param.Field[EmbeddingConfigUnion]`

    The embedding configuration. Either 'base' type with an embedding_model, or 'models_api' type with a model_deployment_id for custom models.

  - `EmbeddingModel param.Field[EmbeddingModelName]`

    The base embedding model to use. Shorthand for embedding_config with type 'base'. Provide either embedding_config or embedding_model, not both.

  - `IndexedMetadataFields param.Field[map[string, string]]`

    Dictionary mapping metadata field names to their types for efficient filtering. Only STRING, NUMBER, and BOOLEAN types can be indexed.

    - `const VectorStoreNewParamsIndexedMetadataFieldString VectorStoreNewParamsIndexedMetadataField = "string"`

    - `const VectorStoreNewParamsIndexedMetadataFieldNumber VectorStoreNewParamsIndexedMetadataField = "number"`

    - `const VectorStoreNewParamsIndexedMetadataFieldBoolean VectorStoreNewParamsIndexedMetadataField = "boolean"`

### Returns

- `type VectorStore struct{…}`

  Response model for vector store operations.

  - `ID string`

    The unique identifier of the vector store

  - `CreatedAt Time`

    Timestamp of creation

  - `EmbeddingDimensions int64`

    Dimensionality of the embedding vectors

  - `Name string`

    The name of the vector store

  - `UpdatedAt Time`

    Timestamp of last update

  - `EmbeddingConfig EmbeddingConfigUnion`

    Embedding configuration identifying the model and its type. None for raw-embedding-only stores.

    - `type EmbeddingConfigModelsAPI struct{…}`

      - `ModelDeploymentID string`

        The ID of the deployment of the created model in the Models API V3.

      - `Type ModelsAPI`

        The type of the embedding configuration.

        - `const ModelsAPIModelsAPI ModelsAPI = "models_api"`

    - `type EmbeddingConfigBase struct{…}`

      - `EmbeddingModel EmbeddingModelName`

        The name of the base embedding model to use. Either a known base model (EmbeddingModelName) or, in ray-serve deployments with NATIVE_OPENAI_EMBEDDING_GATEWAY enabled, any model id served by the OpenAI-compatible inference proxy (e.g. 'nomic-embed-text-v1.5'). For fully custom deployments, use type 'models_api' with a model_deployment_id.

        - `type EmbeddingModelName string`

          - `const EmbeddingModelNameSentenceTransformersAllMiniLmL12V2 EmbeddingModelName = "sentence-transformers/all-MiniLM-L12-v2"`

          - `const EmbeddingModelNameSentenceTransformersMultiQaDistilbertCosV1 EmbeddingModelName = "sentence-transformers/multi-qa-distilbert-cos-v1"`

          - `const EmbeddingModelNameOpenAITextEmbeddingAda002 EmbeddingModelName = "openai/text-embedding-ada-002"`

          - `const EmbeddingModelNameOpenAITextEmbedding3Small EmbeddingModelName = "openai/text-embedding-3-small"`

          - `const EmbeddingModelNameOpenAITextEmbedding3Large EmbeddingModelName = "openai/text-embedding-3-large"`

          - `const EmbeddingModelNameEmbedEnglishV3_0 EmbeddingModelName = "embed-english-v3.0"`

          - `const EmbeddingModelNameEmbedEnglishLightV3_0 EmbeddingModelName = "embed-english-light-v3.0"`

          - `const EmbeddingModelNameEmbedMultilingualV3_0 EmbeddingModelName = "embed-multilingual-v3.0"`

          - `const EmbeddingModelNameGeminiTextEmbedding005 EmbeddingModelName = "gemini/text-embedding-005"`

          - `const EmbeddingModelNameGeminiTextMultilingualEmbedding002 EmbeddingModelName = "gemini/text-multilingual-embedding-002"`

          - `const EmbeddingModelNameGeminiGeminiEmbedding001 EmbeddingModelName = "gemini/gemini-embedding-001"`

        - `string`

      - `Type EmbeddingConfigBaseType`

        The type of the embedding configuration.

        - `const EmbeddingConfigBaseTypeBase EmbeddingConfigBaseType = "base"`

  - `IndexedMetadataFields map[string, string]`

    Dictionary mapping metadata field names to their types

    - `const VectorStoreIndexedMetadataFieldString VectorStoreIndexedMetadataField = "string"`

    - `const VectorStoreIndexedMetadataFieldNumber VectorStoreIndexedMetadataField = "number"`

    - `const VectorStoreIndexedMetadataFieldBoolean VectorStoreIndexedMetadataField = "boolean"`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/scaleapi/sgp-dev-go"
  "github.com/scaleapi/sgp-dev-go/option"
)

func main() {
  client := sgpdev.NewClient(
    option.WithAPIKey("My API Key"),
    option.WithAccountID("My Account ID"),
  )
  vectorStore, err := client.VectorStores.New(context.TODO(), sgpdev.VectorStoreNewParams{
    Name: "name",
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", vectorStore.ID)
}
```

#### Response

```json
{
  "id": "id",
  "created_at": "2019-12-27T18:11:19.117Z",
  "embedding_dimensions": 0,
  "name": "name",
  "updated_at": "2019-12-27T18:11:19.117Z",
  "embedding_config": {
    "model_deployment_id": "model_deployment_id",
    "type": "models_api"
  },
  "indexed_metadata_fields": {
    "foo": "string"
  }
}
```
