Skip to content

Commit fc19118

Browse files
committed
Migration for WS client engine (Play based) + Version 0.1.4
1 parent c2f028e commit fc19118

File tree

7 files changed

+51
-40
lines changed

7 files changed

+51
-40
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Pinecone Scala Client 🗂️
2-
[![version](https://img.shields.io/badge/version-0.1.3-green.svg)](https://cequence.io) [![License](https://img.shields.io/badge/License-MIT-lightgrey.svg)](https://opensource.org/licenses/MIT) ![GitHub Stars](https://img.shields.io/github/stars/cequence-io/pinecone-scala?style=social) [![Twitter Follow](https://img.shields.io/twitter/follow/0xbnd?style=social)](https://twitter.com/0xbnd)
2+
[![version](https://img.shields.io/badge/version-0.1.4-green.svg)](https://cequence.io) [![License](https://img.shields.io/badge/License-MIT-lightgrey.svg)](https://opensource.org/licenses/MIT) ![GitHub Stars](https://img.shields.io/github/stars/cequence-io/pinecone-scala?style=social) [![Twitter Follow](https://img.shields.io/twitter/follow/0xbnd?style=social)](https://twitter.com/0xbnd)
33

44
This is an intuitive async Scala client for Pinecone API supporting all the available vector and index/collection operations/endpoints, provided in two convenient services called [PineconeVectorService](./pinecone-core/src/main/scala/io/cequence/pineconescala/service/PineconeVectorService.scala) and [PineconeIndexService](./pinecone-core/src/main/scala/io/cequence/pineconescala/service/PineconeIndexService.scala). The supported calls are:
55

@@ -22,7 +22,7 @@ The currently supported Scala versions are **2.12, 2.13**, and **3**.
2222
To pull the library you have to add the following dependency to your *build.sbt*
2323

2424
```
25-
"io.cequence" %% "pinecone-scala-client" % "0.1.3"
25+
"io.cequence" %% "pinecone-scala-client" % "0.1.4"
2626
```
2727

2828
or to *pom.xml* (if you use maven)
@@ -31,7 +31,7 @@ or to *pom.xml* (if you use maven)
3131
<dependency>
3232
<groupId>io.cequence</groupId>
3333
<artifactId>pinecone-scala-client_2.12</artifactId>
34-
<version>0.1.3</version>
34+
<version>0.1.4</version>
3535
</dependency>
3636
```
3737

@@ -428,7 +428,7 @@ pinecone-scala-client {
428428
}
429429
```
430430

431-
2. _I got an exception like `com.typesafe.config.ConfigException$UnresolvedSubstitution: pinecone-scala-client.conf @ jar:file:.../io/cequence/pinecone-scala-client_2.13/0.1.3/pinecone-scala-client_2.13-0.1.3.jar!/pinecone-scala-client.conf: 4: Could not resolve substitution to a value: ${PINECONE_SCALA_CLIENT_API_KEY}`. What should I do?_
431+
2. _I got an exception like `com.typesafe.config.ConfigException$UnresolvedSubstitution: pinecone-scala-client.conf @ jar:file:.../io/cequence/pinecone-scala-client_2.13/0.1.4/pinecone-scala-client_2.13-0.1.4.jar!/pinecone-scala-client.conf: 4: Could not resolve substitution to a value: ${PINECONE_SCALA_CLIENT_API_KEY}`. What should I do?_
432432

433433
Set the env. variable `PINECONE_SCALA_CLIENT_API_KEY`. If you don't have one register [here](https://app.pinecone.io/?sessionType=signup).
434434

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ val scala33 = "3.3.1"
88

99
ThisBuild / organization := "io.cequence"
1010
ThisBuild / scalaVersion := scala212
11-
ThisBuild / version := "0.1.3"
11+
ThisBuild / version := "0.1.4"
1212
ThisBuild / isSnapshot := false
1313

1414
lazy val core = (project in file("pinecone-core"))

pinecone-client/src/main/scala/io/cequence/pineconescala/service/PineconeIndexServiceImpl.scala

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@ import io.cequence.pineconescala.JsonFormats._
66
import io.cequence.pineconescala.PineconeScalaClientException
77
import io.cequence.pineconescala.domain.IndexEnv.PodEnv
88
import io.cequence.pineconescala.domain.response._
9-
import io.cequence.pineconescala.domain.settings.IndexSettings.{
10-
CreatePodBasedIndexSettings,
11-
CreateServerlessIndexSettings
12-
}
9+
import io.cequence.pineconescala.domain.settings.IndexSettings.{CreatePodBasedIndexSettings, CreateServerlessIndexSettings}
1310
import io.cequence.pineconescala.domain.settings._
1411
import io.cequence.pineconescala.domain.{Metric, PodType}
1512
import io.cequence.wsclient.JsonUtil.JsonOps
1613
import io.cequence.wsclient.ResponseImplicits._
1714
import io.cequence.wsclient.domain.{RichResponse, WsRequestContext}
18-
import io.cequence.wsclient.service.ws.{Timeouts, WSRequestHelper}
15+
import io.cequence.wsclient.service.{WSClientEngine, WSClientWithEngineBase}
16+
import io.cequence.wsclient.service.WSClientWithEngineTypes.WSClientWithEngine
17+
import io.cequence.wsclient.service.ws.{PlayWSClientEngine, Timeouts}
1918
import play.api.libs.json.JsValue
2019

2120
import scala.concurrent.{ExecutionContext, Future}
@@ -29,13 +28,11 @@ private final class ServerlessIndexServiceImpl(
2928
) extends PineconeIndexServiceImpl[CreateServerlessIndexSettings](
3029
apiKey,
3130
None,
31+
coreUrl = "https://api.pinecone.io/",
3232
explTimeouts
3333
)(ec, materializer)
3434
with PineconeServerlessIndexService {
3535

36-
override protected val coreUrl: String =
37-
"https://api.pinecone.io/"
38-
3936
override protected def indexesEndpoint: EndPoint = EndPoint.indexes
4037

4138
/**
@@ -90,13 +87,11 @@ private final class PineconePodPineconeBasedImpl(
9087
) extends PineconeIndexServiceImpl[CreatePodBasedIndexSettings](
9188
apiKey,
9289
Some(environment),
90+
coreUrl = s"https://controller.${environment.environment}.pinecone.io/",
9391
explTimeouts
9492
)(ec, materializer)
9593
with PineconePodBasedIndexService {
9694

97-
override protected val coreUrl =
98-
s"https://controller.${environment.environment}.pinecone.io/"
99-
10095
override protected def indexesEndpoint: EndPoint = EndPoint.databases
10196

10297
/**
@@ -198,19 +193,24 @@ private final class PineconePodPineconeBasedImpl(
198193
abstract class PineconeIndexServiceImpl[S <: IndexSettings](
199194
apiKey: String,
200195
environment: Option[PodEnv],
196+
coreUrl: String,
201197
explicitTimeouts: Option[Timeouts] = None
202198
)(
203199
implicit val ec: ExecutionContext,
204200
val materializer: Materializer
205201
) extends PineconeIndexService[S]
206-
with WSRequestHelper {
202+
with WSClientWithEngine {
207203

208204
override protected type PEP = EndPoint
209205
override protected type PT = Tag
210206

211-
override protected val requestContext = WsRequestContext(
212-
authHeaders = Seq(("Api-Key", apiKey)),
213-
explTimeouts = explicitTimeouts
207+
// we use play-ws backend
208+
override protected val engine: WSClientEngine = PlayWSClientEngine(
209+
coreUrl,
210+
requestContext = WsRequestContext(
211+
authHeaders = Seq(("Api-Key", apiKey)),
212+
explTimeouts = explicitTimeouts
213+
)
214214
)
215215

216216
def isPodBasedIndex: Boolean = environment.isDefined

pinecone-client/src/main/scala/io/cequence/pineconescala/service/PineconeInferenceServiceImpl.scala

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ package io.cequence.pineconescala.service
33
import akka.stream.Materializer
44
import com.typesafe.config.Config
55
import io.cequence.pineconescala.domain.response.GenerateEmbeddingsResponse
6-
import io.cequence.pineconescala.domain.settings.{GenerateEmbeddingsSettings, IndexSettings}
6+
import io.cequence.pineconescala.domain.settings.GenerateEmbeddingsSettings
77
import io.cequence.wsclient.ResponseImplicits._
8-
import io.cequence.wsclient.service.ws.{Timeouts, WSRequestHelper}
8+
import io.cequence.wsclient.service.ws.{PlayWSClientEngine, Timeouts}
99
import io.cequence.pineconescala.JsonFormats._
1010
import io.cequence.pineconescala.PineconeScalaClientException
1111
import io.cequence.wsclient.domain.WsRequestContext
12+
import io.cequence.wsclient.service.WSClientEngine
13+
import io.cequence.wsclient.service.WSClientWithEngineTypes.WSClientWithEngine
1214

1315
import scala.concurrent.{ExecutionContext, Future}
1416

@@ -19,18 +21,21 @@ private class PineconeInferenceServiceImpl(
1921
implicit val ec: ExecutionContext,
2022
val materializer: Materializer
2123
) extends PineconeInferenceService
22-
with WSRequestHelper {
24+
with WSClientWithEngine {
2325

2426
override protected type PEP = EndPoint
2527
override protected type PT = Tag
26-
override val coreUrl: String = "https://api.pinecone.io/"
2728

28-
override protected val requestContext = WsRequestContext(
29-
authHeaders = Seq(
30-
("Api-Key", apiKey),
31-
("X-Pinecone-API-Version", "2024-07")
32-
),
33-
explTimeouts = explicitTimeouts
29+
// we use play-ws backend
30+
override protected val engine: WSClientEngine = PlayWSClientEngine(
31+
coreUrl = "https://api.pinecone.io/",
32+
requestContext = WsRequestContext(
33+
authHeaders = Seq(
34+
("Api-Key", apiKey),
35+
("X-Pinecone-API-Version", "2024-07")
36+
),
37+
explTimeouts = explicitTimeouts
38+
)
3439
)
3540

3641
/**

pinecone-client/src/main/scala/io/cequence/pineconescala/service/PineconeVectorServiceImpl.scala

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import io.cequence.pineconescala.domain.{PVector, SparseVector}
1010
import io.cequence.wsclient.JsonUtil.JsonOps
1111
import io.cequence.wsclient.ResponseImplicits._
1212
import io.cequence.wsclient.domain.WsRequestContext
13-
import io.cequence.wsclient.service.ws.{Timeouts, WSRequestHelper}
13+
import io.cequence.wsclient.service.WSClientEngine
14+
import io.cequence.wsclient.service.WSClientWithEngineTypes.WSClientWithEngine
15+
import io.cequence.wsclient.service.ws.{PlayWSClientEngine, Timeouts}
1416
import play.api.libs.json.Json
1517

1618
import scala.concurrent.{ExecutionContext, Future}
@@ -26,20 +28,24 @@ import scala.concurrent.{ExecutionContext, Future}
2628
*/
2729
private class PineconeVectorServiceImpl(
2830
apiKey: String,
29-
override val coreUrl: String,
31+
coreUrl: String,
3032
explicitTimeouts: Option[Timeouts] = None
3133
)(
3234
implicit val ec: ExecutionContext,
3335
val materializer: Materializer
3436
) extends PineconeVectorService
35-
with WSRequestHelper {
37+
with WSClientWithEngine {
3638

3739
override protected type PEP = EndPoint
3840
override protected type PT = Tag
3941

40-
override protected val requestContext = WsRequestContext(
41-
authHeaders = Seq(("Api-Key", apiKey)),
42-
explTimeouts = explicitTimeouts
42+
// we use play-ws backend
43+
override protected val engine: WSClientEngine = PlayWSClientEngine(
44+
coreUrl,
45+
requestContext = WsRequestContext(
46+
authHeaders = Seq(("Api-Key", apiKey)),
47+
explTimeouts = explicitTimeouts
48+
)
4349
)
4450

4551
override def describeIndexStats: Future[IndexStats] =

pinecone-client/src/test/scala/io/cequence/pineconescala/service/ServerlessPineconeVectorServiceImplSpec.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ class ServerlessPineconeVectorServiceImplSpec
5959
vectors = Seq(vector1, vector2),
6060
namespace = namespace
6161
)
62-
_ = Thread.sleep(1000)
63-
_ = Thread.sleep(1000)
64-
_ = Thread.sleep(1000)
62+
63+
_ = Thread.sleep(5000)
64+
6565
fetchedVector <- service.fetch(
6666
ids = testIds,
6767
namespace = namespace

project/Dependencies.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
object Dependencies {
22

33
object Versions {
4-
val wsClient = "0.4.2"
4+
val wsClient = "0.5.0"
55
}
66
}

0 commit comments

Comments
 (0)