https://github.com/Dripfarm/SVDB
Swift Vector Database. On-device, local vector database for building the next-generation of user experiences
https://github.com/Dripfarm/SVDB
embeddings llm swift vector-database vector-db
Last synced: 8 months ago
JSON representation
Swift Vector Database. On-device, local vector database for building the next-generation of user experiences
- Host: GitHub
- URL: https://github.com/Dripfarm/SVDB
- Owner: Dripfarm
- Created: 2023-08-04T20:30:08.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2023-08-07T17:35:26.000Z (almost 3 years ago)
- Last Synced: 2025-01-28T04:06:40.011Z (over 1 year ago)
- Topics: embeddings, llm, swift, vector-database, vector-db
- Language: Swift
- Homepage:
- Size: 18.6 KB
- Stars: 155
- Watchers: 5
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Swift Vector Database (SVDB)
A new fast local on-device vector database for Swift Apps.
Built for those building the next-generation of user experiences only possible with on-device intelligence.
Local on-device vector databases are just the beginning.
## Installation
To install it using the Swift Package Manager, either directly add it to your project using Xcode 11, or specify it as dependency in the Package.swift file:
```
// ...
dependencies: [
.package(url: "https://github.com/Dripfarm/SVDB.git", from: "1.0.0"),
],
//...
```
## Usage
### 1. Create Embeddings
```
let document = "cat"
```
**ChatGPT:**
I find [This Swift OpenAI package to be the best](https://github.com/MacPaw/OpenAI)
```
import OpenAI
func embed(text: String) async -> [Double]? {
let query = EmbeddingsQuery(model: .textEmbeddingAda, input: text)
let result = try! await openAI.embeddings(query: query)
return result.data.first?.embedding
}
let wordEmbedding = embed(text: document)
```
**NLEmbeddings**
```
import NaturalLanguage
let embedding: NLEmbedding? = NLEmbedding.wordEmbedding(for: .english)
let wordEmedding = embedding?.vector(for: document) //returns double array
```
### 2. Add Documents
```
let animalCollection = SVDB.shared.collection("animals")
SVDB.shared.addDocument(text: document, embedding: wordEmbedding)
```
### 3. Search
```
let dogEmedding = embedding?.vector(for: "dog")
let results = animalCollection.search(query: dogEmedding)
```
## Demo
Check out the demo [Demo](https://github.com/Dripfarm/SVDB/tree/master/SVDBDemo)
## Todo
Not sure. I want to make it easier to add documents and take care of the embeddings for you. Any suggestions?