Releases: pinecone-io/go-pinecone
Release list
Release v1.1.1
Fixes
- Fix
normalizeHost, allow for non-secure connections by @austin-denoble in #74
Chores
- [Docs] Return error for serverless index creation failure by @jseldess in #71
- [Chore] Refactor sparse vector integration tests by @austin-denoble in #72
Full Changelog: v1.1.0...v1.1.1
Release v1.1.0
Features
Inference API
You can now try out Pinecone's Inference API, which is currently in public preview. See the README for more details.
ctx := context.Background()
pc, err := pinecone.NewClient(pinecone.NewClientParams{
ApiKey: "YOUR_API_KEY",
})
if err != nil {
log.Fatalf("Failed to create Client: %v", err)
}
embeddingModel := "multilingual-e5-large"
documents := []string{
"Turkey is a classic meat to eat at American Thanksgiving."
"Many people enjoy the beautiful mosques in Turkey."
}
docParameters := pinecone.EmbedParameters{
InputType: "passage",
Truncate: "END",
}
docEmbeddingsResponse, err := pc.Inference.Embed(ctx, &pinecone.EmbedRequest{
Model: embeddingModel,
TextInputs: documents,
Parameters: docParameters,
})
if err != nil {
log.Fatalf("Failed to embed documents: %v", err)
}
fmt.Printf("docs embedding response: %+v", docEmbeddingsResponse)
// << Upsert documents into Pinecone >>Changes overview
- Refactor Integration Tests by @austin-denoble in #65
- Change "client" to "SDK" by @jseldess in #64
- Add GH
releaseworkflow andbump-versionaction, fix hard-coded client version by @austin-denoble in #66 - Implement Inference API by @austin-denoble in #67
- Fix runner in
releaseworkflow by @austin-denoble in #69 - Pass
currentVersioninreleaseworkflow by @austin-denoble in #70
New Contributors
Full Changelog: v1.0.0...v1.1.0
Release v1.0.0
Features
API Versioning
This first major release of the Pinecone Go SDK depends on API version 2024-07. This v1 SDK release line will continue to receive fixes as long as the 2024-07 API version is in support. Learn more about Pinecone API versioning here.
Configure Index
You can now configure an index using client.ConfigureIndex with the pinecone.ConfigureIndexParams struct. This can be used to adjust the Replicas or PodType of a pods-based index, or enabling or disabling deletion protection for all index types.
package main
import (
"context"
"github.com/pinecone-io/go-pinecone/pinecone"
"log"
"os"
)
func main() {
ctx := context.Background()
clientParams := pinecone.NewClientParams{
ApiKey: os.Getenv("PINECONE_API_KEY"),
}
pc, err := pinecone.NewClient(clientParams)
if err != nil {
log.Fatalf("Failed to create Client: %v", err)
}
// To scale the size of your pods-based index from "x2" to "x4":
_, err := pc.ConfigureIndex(ctx, "my-pod-index", pinecone.ConfigureIndexParams{PodType: "p1.x4"})
if err != nil {
log.Fatalf("Failed to configure index: %v\n", err)
}
// To scale the number of replicas to 4:
_, err := pc.ConfigureIndex(ctx, "my-pod-index", pinecone.ConfigureIndexParams{Replicas: 4})
if err != nil {
log.Fatalf("Failed to configure index: %v\n", err)
}Deletion Protection
Use deletion protection to prevent your most important indexes from accidentally being deleted. This feature is available for both serverless and pod indexes.
package main
import (
"context"
"github.com/pinecone-io/go-pinecone/pinecone"
"log"
"os"
)
func main() {
ctx := context.Background()
clientParams := pinecone.NewClientParams{
ApiKey: os.Getenv("PINECONE_API_KEY"),
}
pc, err := pinecone.NewClient(clientParams)
if err != nil {
log.Fatalf("Failed to create Client: %v", err)
}
// create a new index with deletion protection enabled
idx, err := pc.CreateServerlessIndex(ctx, &pinecone.CreateServerlessIndexRequest{
Name: "my-protected-index",
Dimension: 3,
Metric: pinecone.Cosine,
Cloud: pinecone.Aws,
Region: "us-east-1",
DeletionProtection: "enabled",
})
if err != nil {
log.Fatalf("Failed to create index: %v\n", err)
}
// To enable deletion protection for an existing index
_, err := pc.ConfigureIndex(ctx, "my-index", pinecone.ConfigureIndexParams{DeletionProtection: "enabled"})
if err != nil {
log.Fatalf("Failed to configure index: %v\n", err)
}
}For users of the unstable pre-v1.0.0 SDK: see the README for details on which operations and types have changed. At a high level:
pinecone.NewClientaccepts additional configuration options throughpinecone.NewClientParams.- Creating an
IndexConnectionwhen working with the data plane has been simplified to a singleclient.Indexmethod which takes in apinecone.NewIndexConnParamsstruct to configure the connection. - When working with an
IndexConnection, types such asFetchVectorsResponseandQueryVectorsResponsewill now contain theNamespaceof the source index.
Changes Overview
- update Go documentation link by @junefish in #29
- Update codegen dependencies to fixed versions by @aulorbe in #32
- Add docstrings for index_connection.go by @aulorbe in #31
- Add docstrings for client.go by @aulorbe in #27
- Allow configuration of
gRPC.ClientConnthroughgrpc.DialOption, refactorClient.Index(), bumpgrpcdep to 1.64.0 by @austin-denoble in #35 - Add ConfigureIndex method by @aulorbe in #34
- Add docstrings to models.go by @aulorbe in #37
- Rename Filter to MetadataFilter for clarity by @aulorbe in #39
- Add Reference documentation status badge by @rockwotj in #40
- Add unit tests for index_connection.go by @aulorbe in #38
- Add unit tests for client.go by @aulorbe in #36
- Add
codegen/build-clients.shscript, updatecodegen/apissubmodule by @austin-denoble in #49 - Centralize Go test suite by @aulorbe in #48
- Implement support for
DeletionProtectionby @austin-denoble in #50 - Add
Namespaceto List, Query, and Fetch vector responses by @austin-denoble in #52 - Update README by @aulorbe in #51
- Update issue templates by @anawishnoff in #54
- Block blank issues without templates by @anawishnoff in #53
- Add error handling for missing required fields in passed structs by @aulorbe in #55
- Add
Hostnormalization when buildingIndexConnectionby @austin-denoble in #56 - Auto-adding needs-triage label to all new issues by @anawishnoff in #57
New Contributors
- @junefish made their first contribution in #29
- @aulorbe made their first contribution in #32
- @rockwotj made their first contribution in #40
- @anawishnoff made their first contribution in #54
Full Changelog: v0.5.0...v1.0.0
v0.5.0
Features
- Optional configuration values for applying custom headers or metadata for REST or gRPC operations by @austin-denoble in #18
- Configure
apiKey,additionalHeaders, andhostthrough environment variables by @austin-denoble in #22 - Add error handling to REST operations in
Client, add newPineconeErrorstruct by @austin-denoble in #23
Additional Client Configuration options
You can now pass your own http.Client directly through NewClientParams with RestClient, along with setting Headers, and Host values. You can also pass metadata to the underlying gRPC client when creating an IndexConnection by using IndexWithAdditionalMetadata().
import (
"context"
"github.com/pinecone-io/go-pinecone/pinecone"
)
apiKey := "your-api-key"
headers := map[string]string{"X-Your-Header": "header-value"}
client, err := NewClient(NewClientParams{ApiKey: apiKey, Headers: headers})
if err != nil {
return nil, err
}
// perform client operations
index := client.DescribeIndex(context.Background(), "my-index")
// create an IndexConnection with metadata
metadata := map[string]string{"X-Your-Header": "header-value"}
indexConn := client.IndexWithAdditionalMetadata(index.Host, "my-namespace", metadata)
// perform index operations
indexStats := indexConn.DescribeIndexStats(context.Background())You can also use environment variables to set ApiKey, Headers, and Host:
PINECONE_API_KEYPINECONE_ADDITIONAL_HEADERSPINECONE_CONTROLLER_HOST
Values provided through the environment will be overwritten if you also pass them in NewClientParams to NewClient.
Fixes
- Receive and pass
context.Contextby value rather than as a pointer inIndexConnectionmethods by @austin-denoble in #20
Chores
- Add json marshaling annotations to various structs by @austin-denoble in #21
- Bump
getPackageVersion()to v0.5.0, and allow:in source tag normalization by @austin-denoble in #24
New Contributors
- @austin-denoble made their first contribution in #20
Full Changelog: v0.4.1...v0.5.0
v0.5-alpha.0
v0.4.1
What's Changed
- Adds optional source_tag to User-Agent by @ssmith-pc in #16
Source tag
The SDK now optionally allows setting a source tag when constructing a Pinecone client. The source tag allows requests to be associated with the source tag provided.
import "github.com/pinecone-io/go-pinecone/pinecone"
client, err := pinecone.NewClient(pinecone.NewClientParams{
ApiKey: "my-api-key",
SourceTag: "foo",
})
// requests initiated from client connection are associated with source tag "foo"New Contributors
- @ssmith-pc made their first contribution in #16
Full Changelog: v0.4.0...v0.4.1
v0.4.0
v0.3.0 Release
This switches the GRPC bindings to use the vector_service.proto API instead of the now-deprecated core.proto API.