From 19128cbb75bf8c6aa737c34ac229e2c3b371880f Mon Sep 17 00:00:00 2001 From: Heinrich Date: Thu, 29 Aug 2024 21:21:44 +1000 Subject: [PATCH 01/11] Create sqlitevss_test.dart Happy with test contents and location --- .../sqlite_vss/sqlitevss_test.dart | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 packages/langchain_community/test/vector_stores/sqlite_vss/sqlitevss_test.dart diff --git a/packages/langchain_community/test/vector_stores/sqlite_vss/sqlitevss_test.dart b/packages/langchain_community/test/vector_stores/sqlite_vss/sqlitevss_test.dart new file mode 100644 index 00000000..0cda5159 --- /dev/null +++ b/packages/langchain_community/test/vector_stores/sqlite_vss/sqlitevss_test.dart @@ -0,0 +1,68 @@ +import 'package:langchain_community/src/vector_stores/sqlite_vss/sqlite_vss.dart'; +import 'package:langchain_core/documents.dart'; +import 'package:langchain_core/embeddings.dart'; +import 'package:langchain_core/vector_stores.dart'; +import 'package:test/test.dart'; + +SQLiteVSS sqliteVssFromTexts({ + List>? metaData, + bool drop = true, +}) { + return SQLiteVSS.fromTexts( + ['foo', 'bar', 'baz'], // Replace with actual fake_texts + FakeEmbeddings(), + metadatas: metaData, + table: 'test', + dbFile: ':memory:', + ); +} + +void main() { + group('SQLiteVSS Tests', () { + test('Test end to end construction and search', () async { + final docSearch = sqliteVssFromTexts(); + final output = await docSearch.similaritySearch( + query: 'foo', + config: const VectorStoreSimilaritySearch(k: 1), + ); + expect(output, [const Document(pageContent: 'foo', metadata: {})]); + }); + + test('Test end to end construction and search with scores and IDs', + () async { + final texts = ['foo', 'bar', 'baz']; + final metaData = [ + for (var i = 0; i < texts.length; i++) {'page': i}, + ]; + final docSearch = sqliteVssFromTexts(metaData: metaData); + final output = await docSearch.similaritySearchWithScores( + query: 'foo', + config: const VectorStoreSimilaritySearch(k: 3), + ); + final docs = output.map((o) => o.$1).toList(); + final distances = output.map((o) => o.$2).toList(); + + expect(docs, [ + const Document(pageContent: 'foo', metadata: {'page': 0}), + const Document(pageContent: 'bar', metadata: {'page': 1}), + const Document(pageContent: 'baz', metadata: {'page': 2}), + ]); + expect(distances[0] < distances[1], isTrue); + expect(distances[1] < distances[2], isTrue); + }); + + test('Test end to end construction and MRR search', () async { + final texts = ['foo', 'bar', 'baz']; + final metaData = [ + for (var i = 0; i < texts.length; i++) {'page': i}, + ]; + final docSearch = sqliteVssFromTexts(metaData: metaData) + ..addTexts(texts: texts, metadatas: metaData); + final output = await docSearch.similaritySearch( + query: 'foo', + config: const VectorStoreSimilaritySearch(k: 10), + ); + expect(output.length, 6); + }); + }); +} From 77c59f15274cfc6ef3aee3d0528432974811e396 Mon Sep 17 00:00:00 2001 From: Heinrich Date: Thu, 29 Aug 2024 21:55:54 +1000 Subject: [PATCH 02/11] Create build.yaml Solved Both source_gen:combining_builder and objectbox_generator:generator may output objectbox.g.dart --- packages/langchain_community/build.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 packages/langchain_community/build.yaml diff --git a/packages/langchain_community/build.yaml b/packages/langchain_community/build.yaml new file mode 100644 index 00000000..472f1bf4 --- /dev/null +++ b/packages/langchain_community/build.yaml @@ -0,0 +1,15 @@ +targets: + $default: + builders: + objectbox_generator:generator: + enabled: true + generate_for: + - lib/src/vector_stores/objectbox/**.dart + source_gen:combining_builder: + options: + ignore_for_file: + - type=lint + - subtype=lint + generate_for: + exclude: + - lib/src/vector_stores/objectbox/**.dart \ No newline at end of file From 64e8439e6fb05e0426715d26219c35353ec1a33f Mon Sep 17 00:00:00 2001 From: Heinrich Date: Thu, 29 Aug 2024 22:06:01 +1000 Subject: [PATCH 03/11] Test design satisfy Next ensure clean implementation and then test --- .../lib/dart_utils/debugging.dart | 11 + .../vector_stores/sqlite_vss/sqlite_vss.dart | 69 ++ .../sqlite_vss/src/connection/connection.dart | 5 + .../sqlite_vss/src/connection/native.dart | 75 ++ .../src/connection/unsupported.dart | 17 + .../sqlite_vss/src/connection/web.dart | 34 + .../sqlite_vss/src/database.dart | 88 ++ .../sqlite_vss/src/database.g.dart | 903 ++++++++++++++++++ .../vector_stores/sqlite_vss/src/sql.drift | 68 ++ packages/langchain_community/pubspec.yaml | 2 + 10 files changed, 1272 insertions(+) create mode 100644 packages/langchain_community/lib/dart_utils/debugging.dart create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/sqlite_vss.dart create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/connection.dart create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/native.dart create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/unsupported.dart create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/web.dart create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.dart create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.g.dart create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/sql.drift diff --git a/packages/langchain_community/lib/dart_utils/debugging.dart b/packages/langchain_community/lib/dart_utils/debugging.dart new file mode 100644 index 00000000..8346dda2 --- /dev/null +++ b/packages/langchain_community/lib/dart_utils/debugging.dart @@ -0,0 +1,11 @@ +void kDebugPrint(dynamic message, {bool Function(String str)? cond}) { + if (!bool.fromEnvironment('dart.vm.profile') && + !bool.fromEnvironment('dart.vm.product') && + (cond == null || cond(message))) { + print(message); + } +} + +bool get kDebugDartMode => + !bool.fromEnvironment('dart.vm.profile') && + !bool.fromEnvironment('dart.vm.product'); diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/sqlite_vss.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/sqlite_vss.dart new file mode 100644 index 00000000..8e5a63ff --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/sqlite_vss.dart @@ -0,0 +1,69 @@ +import 'package:langchain_core/embeddings.dart'; +import 'package:langchain_core/src/documents/document.dart'; +import 'package:langchain_core/src/embeddings/fake.dart'; +import 'package:langchain_core/vector_stores.dart'; + +import 'src/database.dart'; + +/// SQLite with VSS extension as a vector database. +/// +/// To use, you should have the `sqlite-vss` package installed. +/// +/// Example: +/// ```dart +/// import 'package:langchain_community/vector_stores/sqlite_vss.dart'; +/// import 'package:langchain_community/embeddings/openai.dart'; +/// +/// // ... (rest of the example code) +/// ``` +class SQLiteVSS extends VectorStore { + SQLiteVSS( + {required super.embeddings, + required String table, + required connection, + required String dbFile}); + + @override + Future> addVectors( + {required List> vectors, + required List documents}) { + // TODO: implement addVectors + throw UnimplementedError(); + } + + @override + Future delete({required List ids}) { + // TODO: implement delete + throw UnimplementedError(); + } + + void addTexts( + {required List texts, List>? metadatas}) {} + + @override + Future> similaritySearchByVectorWithScores( + {required List embedding, + VectorStoreSimilaritySearch config = + const VectorStoreSimilaritySearch()}) { + // TODO: implement similaritySearchByVectorWithScores + throw UnimplementedError(); + } + + /// Return VectorStore initialized from texts and embeddings. + factory SQLiteVSS.fromTexts( + List texts, + Embeddings embeddings, { + List>? metadatas, + String table = 'langchain', + String dbFile = 'vss.db', + }) { + final connection = Database.createConnection(dbFile); + final vss = SQLiteVSS( + embeddings: embeddings, + table: table, + connection: connection, + dbFile: dbFile, + )..addTexts(texts: texts, metadatas: metadatas); + return vss; + } +} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/connection.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/connection.dart new file mode 100644 index 00000000..827bd5cb --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/connection.dart @@ -0,0 +1,5 @@ +// We use a conditional export to expose the right connection factory depending +// on the platform. +export 'unsupported.dart' + if (dart.library.js) 'web.dart' + if (dart.library.ffi) 'native.dart'; diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/native.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/native.dart new file mode 100644 index 00000000..258611cc --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/native.dart @@ -0,0 +1,75 @@ +import 'dart:ffi'; +import 'dart:io'; + +import 'package:drift/drift.dart'; +import 'package:drift/native.dart'; +import 'package:langchain_community/dart_utils/debugging.dart'; + +import 'package:path/path.dart' as p; +import 'package:sqlite3/sqlite3.dart'; + +Future databaseFile(String name) async { + // We use `path_provider` to find a suitable path to store our data in. + final appDir = await getApplicationDocumentsDirectory(); + final dbPath = p.join(appDir.path, '$name.db'); + return File(dbPath); +} + +/// Obtains a database connection for running drift in a Dart VM. +QueryExecutor connect(String name) { + if (name == ':memory:') { + return NativeDatabase.memory(); + } + return DatabaseConnection.delayed(Future(() async { + if (Platform.isAndroid) { + await applyWorkaroundToOpenSqlite3OnOldAndroidVersions(); + + final cachebase = (await getTemporaryDirectory()).path; + + // We can't access /tmp on Android, which sqlite3 would try by default. + // Explicitly tell it about the correct temporary directory. + sqlite3.tempDirectory = cachebase; + } + + sqlite3.ensureExtensionLoaded( + SqliteExtension.inLibrary(_loadLibrary('vec0'), 'sqlite3_vec_init'), + ); + + return NativeDatabase.createBackgroundConnection( + await databaseFile(name), + ); + })); +} + +DynamicLibrary _loadLibrary(String name) { + if (Platform.isIOS || Platform.isMacOS) { + return DynamicLibrary.open('$name.dylib'); + } + if (Platform.isAndroid || Platform.isLinux) { + return DynamicLibrary.open('$name.so'); + } + if (Platform.isWindows) { + return DynamicLibrary.open(() { + if (kDebugDartMode) { + return p.normalize(p.join( + Directory.current.path, + 'extensions', + '$name.dll', + )); + } else { + final assets = p.normalize( + p.join( + 'data', + 'flutter_assets', + 'packages', + 'flutter_sqlite_document_search', + 'extensions', + ), + ); + final exe = File(Platform.resolvedExecutable).parent.path; + return p.normalize(p.join(exe, assets, '$name.dll')); + } + }()); + } + throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); +} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/unsupported.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/unsupported.dart new file mode 100644 index 00000000..dc315ff1 --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/unsupported.dart @@ -0,0 +1,17 @@ +import 'package:drift/drift.dart'; + +Never _unsupported() { + throw UnsupportedError( + 'No suitable database implementation was found on this platform.'); +} + +// Depending on the platform the app is compiled to, the following stubs will +// be replaced with the methods in native.dart or web.dart + +DatabaseConnection connect(String name) { + _unsupported(); +} + +Future validateDatabaseSchema(GeneratedDatabase database) async { + _unsupported(); +} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/web.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/web.dart new file mode 100644 index 00000000..9e2bea61 --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/web.dart @@ -0,0 +1,34 @@ +import 'dart:async'; + +import 'package:drift/drift.dart'; +import 'package:drift/wasm.dart'; +import 'package:langchain_community/dart_utils/debugging.dart'; + + + +/// Obtains a database connection for running drift on the web. +DatabaseConnection connect(String name) { + return DatabaseConnection.delayed(Future(() async { + final db = await WasmDatabase.open( + databaseName: name, + sqlite3Uri: Uri.parse('sqlite3_vec.wasm'), + driftWorkerUri: Uri.parse('drift_worker.js'), + ); + + if (db.missingFeatures.isNotEmpty) { + kDebugPrint( + 'Using ${db.chosenImplementation} due to unsupported ' + 'browser features: ${db.missingFeatures}', + ); + } + + return db.resolvedExecutor; + })); +} + +Future validateDatabaseSchema(GeneratedDatabase database) async { + // Unfortunately, validating database schemas only works for native platforms + // right now. + // As we also have migration tests (see the `Testing migrations` section in + // the readme of this example), this is not a huge issue. +} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.dart new file mode 100644 index 00000000..04c7a3e0 --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.dart @@ -0,0 +1,88 @@ +import 'dart:typed_data'; + +import 'package:drift/drift.dart'; +import 'package:drift/native.dart'; +import 'package:langchain_core/embeddings.dart'; +import 'connection/connection.dart' as impl; + +part 'database.g.dart'; + +@DriftDatabase(include: {'sql.drift'}) +class Database extends _$Database { + Database(this.textEmbedder) : super(impl.connect('app.v5')); + + final Embeddings textEmbedder; + @override + int get schemaVersion => 1; + + Future addChunk( + String text, { + String? title, + int? outputDimensionality, + }) async { + final result = await textEmbedder + .embedQuery(title != null ? 'title: $title\n$text' : text); + await customStatement( + 'INSERT INTO chunks (embedding) VALUES (:embedding)', + [_serializeFloat32(result)], + ); + return getLastId().getSingle(); + } + + Future> searchChunks( + String query, { + String? title, + int? outputDimensionality, + }) async { + final result = await textEmbedder + .embedQuery(title != null ? 'title: $title\n$query' : query); + return searchEmbeddings(_serializeFloat32(result)); + } + + Future deleteChunk(int id) async { + await customStatement( + 'DELETE FROM chunks WHERE id = :id', + [id], + ); + } + + @override + MigrationStrategy get migration => MigrationStrategy( + onCreate: (m) async { + await m.createAll(); + await m.database.customStatement( + 'CREATE VIRTUAL TABLE IF NOT EXISTS chunks using vec0( ' + ' id INTEGER PRIMARY KEY AUTOINCREMENT, ' + ' embedding float[768] ' + ');', + ); + }, + ); + + /// Return a [DatabaseConnection] for the given database file. + static DatabaseConnection createConnection(String dbFile) { + return DatabaseConnection(impl.connect(dbFile)); + } +} + +// Serializes a float32 list into a vector BLOB that sqlite-vec accepts. +Uint8List _serializeFloat32(List vector) { + final ByteData byteData = ByteData(vector.length * 4); // 4 bytes per float32 + + for (int i = 0; i < vector.length; i++) { + byteData.setFloat32(i * 4, vector[i], Endian.little); + } + + return byteData.buffer.asUint8List(); +} + +// Split long text into chunks for embedding +Iterable<(String, int, int)> chunkText(String text) sync* { + final regex = RegExp(r'((?:[^\n][\n]?)+)'); + final matches = regex.allMatches(text); + for (final match in matches) { + // Need to limit to 500 tokens for really long paragraphs + final str = text.substring(match.start, match.end); + yield (str, match.start, match.end); + } +} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.g.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.g.dart new file mode 100644 index 00000000..08519bb6 --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.g.dart @@ -0,0 +1,903 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: type=lint, subtype=lint + +part of 'database.dart'; + +// ignore_for_file: type=lint +class Files extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Files(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + $customConstraints: 'PRIMARY KEY AUTOINCREMENT'); + static const VerificationMeta _pathMeta = const VerificationMeta('path'); + late final GeneratedColumn path = GeneratedColumn( + 'path', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL'); + static const VerificationMeta _contentMeta = + const VerificationMeta('content'); + late final GeneratedColumn content = GeneratedColumn( + 'content', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: ''); + @override + List get $columns => [id, path, content]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'files'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('path')) { + context.handle( + _pathMeta, path.isAcceptableOrUnknown(data['path']!, _pathMeta)); + } else if (isInserting) { + context.missing(_pathMeta); + } + if (data.containsKey('content')) { + context.handle(_contentMeta, + content.isAcceptableOrUnknown(data['content']!, _contentMeta)); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + File map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return File( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + path: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}path'])!, + content: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}content']), + ); + } + + @override + Files createAlias(String alias) { + return Files(attachedDatabase, alias); + } + + @override + bool get dontWriteConstraints => true; +} + +class File extends DataClass implements Insertable { + final int id; + final String path; + final String? content; + const File({required this.id, required this.path, this.content}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['path'] = Variable(path); + if (!nullToAbsent || content != null) { + map['content'] = Variable(content); + } + return map; + } + + FilesCompanion toCompanion(bool nullToAbsent) { + return FilesCompanion( + id: Value(id), + path: Value(path), + content: content == null && nullToAbsent + ? const Value.absent() + : Value(content), + ); + } + + factory File.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return File( + id: serializer.fromJson(json['id']), + path: serializer.fromJson(json['path']), + content: serializer.fromJson(json['content']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'path': serializer.toJson(path), + 'content': serializer.toJson(content), + }; + } + + File copyWith( + {int? id, + String? path, + Value content = const Value.absent()}) => + File( + id: id ?? this.id, + path: path ?? this.path, + content: content.present ? content.value : this.content, + ); + File copyWithCompanion(FilesCompanion data) { + return File( + id: data.id.present ? data.id.value : this.id, + path: data.path.present ? data.path.value : this.path, + content: data.content.present ? data.content.value : this.content, + ); + } + + @override + String toString() { + return (StringBuffer('File(') + ..write('id: $id, ') + ..write('path: $path, ') + ..write('content: $content') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, path, content); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is File && + other.id == this.id && + other.path == this.path && + other.content == this.content); +} + +class FilesCompanion extends UpdateCompanion { + final Value id; + final Value path; + final Value content; + const FilesCompanion({ + this.id = const Value.absent(), + this.path = const Value.absent(), + this.content = const Value.absent(), + }); + FilesCompanion.insert({ + this.id = const Value.absent(), + required String path, + this.content = const Value.absent(), + }) : path = Value(path); + static Insertable custom({ + Expression? id, + Expression? path, + Expression? content, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (path != null) 'path': path, + if (content != null) 'content': content, + }); + } + + FilesCompanion copyWith( + {Value? id, Value? path, Value? content}) { + return FilesCompanion( + id: id ?? this.id, + path: path ?? this.path, + content: content ?? this.content, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (path.present) { + map['path'] = Variable(path.value); + } + if (content.present) { + map['content'] = Variable(content.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('FilesCompanion(') + ..write('id: $id, ') + ..write('path: $path, ') + ..write('content: $content') + ..write(')')) + .toString(); + } +} + +class FileEmbeddings extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + FileEmbeddings(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + $customConstraints: 'PRIMARY KEY AUTOINCREMENT'); + static const VerificationMeta _fileIdMeta = const VerificationMeta('fileId'); + late final GeneratedColumn fileId = GeneratedColumn( + 'file_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL'); + static const VerificationMeta _chunkIdMeta = + const VerificationMeta('chunkId'); + late final GeneratedColumn chunkId = GeneratedColumn( + 'chunk_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL'); + static const VerificationMeta _startMeta = const VerificationMeta('start'); + late final GeneratedColumn start = GeneratedColumn( + 'start', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + $customConstraints: ''); + static const VerificationMeta _endMeta = const VerificationMeta('end'); + late final GeneratedColumn end = GeneratedColumn( + 'end', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + $customConstraints: ''); + @override + List get $columns => [id, fileId, chunkId, start, end]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'file_embeddings'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('file_id')) { + context.handle(_fileIdMeta, + fileId.isAcceptableOrUnknown(data['file_id']!, _fileIdMeta)); + } else if (isInserting) { + context.missing(_fileIdMeta); + } + if (data.containsKey('chunk_id')) { + context.handle(_chunkIdMeta, + chunkId.isAcceptableOrUnknown(data['chunk_id']!, _chunkIdMeta)); + } else if (isInserting) { + context.missing(_chunkIdMeta); + } + if (data.containsKey('start')) { + context.handle( + _startMeta, start.isAcceptableOrUnknown(data['start']!, _startMeta)); + } + if (data.containsKey('end')) { + context.handle( + _endMeta, end.isAcceptableOrUnknown(data['end']!, _endMeta)); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + FileEmbedding map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return FileEmbedding( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + fileId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}file_id'])!, + chunkId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}chunk_id'])!, + start: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}start']), + end: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}end']), + ); + } + + @override + FileEmbeddings createAlias(String alias) { + return FileEmbeddings(attachedDatabase, alias); + } + + @override + bool get dontWriteConstraints => true; +} + +class FileEmbedding extends DataClass implements Insertable { + final int id; + final int fileId; + final int chunkId; + final int? start; + final int? end; + const FileEmbedding( + {required this.id, + required this.fileId, + required this.chunkId, + this.start, + this.end}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['file_id'] = Variable(fileId); + map['chunk_id'] = Variable(chunkId); + if (!nullToAbsent || start != null) { + map['start'] = Variable(start); + } + if (!nullToAbsent || end != null) { + map['end'] = Variable(end); + } + return map; + } + + FileEmbeddingsCompanion toCompanion(bool nullToAbsent) { + return FileEmbeddingsCompanion( + id: Value(id), + fileId: Value(fileId), + chunkId: Value(chunkId), + start: + start == null && nullToAbsent ? const Value.absent() : Value(start), + end: end == null && nullToAbsent ? const Value.absent() : Value(end), + ); + } + + factory FileEmbedding.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return FileEmbedding( + id: serializer.fromJson(json['id']), + fileId: serializer.fromJson(json['file_id']), + chunkId: serializer.fromJson(json['chunk_id']), + start: serializer.fromJson(json['start']), + end: serializer.fromJson(json['end']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'file_id': serializer.toJson(fileId), + 'chunk_id': serializer.toJson(chunkId), + 'start': serializer.toJson(start), + 'end': serializer.toJson(end), + }; + } + + FileEmbedding copyWith( + {int? id, + int? fileId, + int? chunkId, + Value start = const Value.absent(), + Value end = const Value.absent()}) => + FileEmbedding( + id: id ?? this.id, + fileId: fileId ?? this.fileId, + chunkId: chunkId ?? this.chunkId, + start: start.present ? start.value : this.start, + end: end.present ? end.value : this.end, + ); + FileEmbedding copyWithCompanion(FileEmbeddingsCompanion data) { + return FileEmbedding( + id: data.id.present ? data.id.value : this.id, + fileId: data.fileId.present ? data.fileId.value : this.fileId, + chunkId: data.chunkId.present ? data.chunkId.value : this.chunkId, + start: data.start.present ? data.start.value : this.start, + end: data.end.present ? data.end.value : this.end, + ); + } + + @override + String toString() { + return (StringBuffer('FileEmbedding(') + ..write('id: $id, ') + ..write('fileId: $fileId, ') + ..write('chunkId: $chunkId, ') + ..write('start: $start, ') + ..write('end: $end') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, fileId, chunkId, start, end); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is FileEmbedding && + other.id == this.id && + other.fileId == this.fileId && + other.chunkId == this.chunkId && + other.start == this.start && + other.end == this.end); +} + +class FileEmbeddingsCompanion extends UpdateCompanion { + final Value id; + final Value fileId; + final Value chunkId; + final Value start; + final Value end; + const FileEmbeddingsCompanion({ + this.id = const Value.absent(), + this.fileId = const Value.absent(), + this.chunkId = const Value.absent(), + this.start = const Value.absent(), + this.end = const Value.absent(), + }); + FileEmbeddingsCompanion.insert({ + this.id = const Value.absent(), + required int fileId, + required int chunkId, + this.start = const Value.absent(), + this.end = const Value.absent(), + }) : fileId = Value(fileId), + chunkId = Value(chunkId); + static Insertable custom({ + Expression? id, + Expression? fileId, + Expression? chunkId, + Expression? start, + Expression? end, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (fileId != null) 'file_id': fileId, + if (chunkId != null) 'chunk_id': chunkId, + if (start != null) 'start': start, + if (end != null) 'end': end, + }); + } + + FileEmbeddingsCompanion copyWith( + {Value? id, + Value? fileId, + Value? chunkId, + Value? start, + Value? end}) { + return FileEmbeddingsCompanion( + id: id ?? this.id, + fileId: fileId ?? this.fileId, + chunkId: chunkId ?? this.chunkId, + start: start ?? this.start, + end: end ?? this.end, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (fileId.present) { + map['file_id'] = Variable(fileId.value); + } + if (chunkId.present) { + map['chunk_id'] = Variable(chunkId.value); + } + if (start.present) { + map['start'] = Variable(start.value); + } + if (end.present) { + map['end'] = Variable(end.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('FileEmbeddingsCompanion(') + ..write('id: $id, ') + ..write('fileId: $fileId, ') + ..write('chunkId: $chunkId, ') + ..write('start: $start, ') + ..write('end: $end') + ..write(')')) + .toString(); + } +} + +abstract class _$Database extends GeneratedDatabase { + _$Database(QueryExecutor e) : super(e); + $DatabaseManager get managers => $DatabaseManager(this); + late final Files files = Files(this); + late final FileEmbeddings fileEmbeddings = FileEmbeddings(this); + Selectable getFiles() { + return customSelect('SELECT * FROM files', variables: [], readsFrom: { + files, + }).asyncMap(files.mapFromRow); + } + + Selectable getFileById(int id) { + return customSelect('SELECT * FROM files WHERE id = ?1', variables: [ + Variable(id) + ], readsFrom: { + files, + }).asyncMap(files.mapFromRow); + } + + Selectable getFileByPath(String path) { + return customSelect('SELECT * FROM files WHERE path = ?1', variables: [ + Variable(path) + ], readsFrom: { + files, + }).asyncMap(files.mapFromRow); + } + + Future> insertFile(String path, String? content) { + return customWriteReturning( + 'INSERT INTO files (path, content) VALUES (?1, ?2) RETURNING *', + variables: [Variable(path), Variable(content)], + updates: {files}) + .then((rows) => Future.wait(rows.map(files.mapFromRow))); + } + + Future deleteFileById(int id) { + return customUpdate( + 'DELETE FROM files WHERE id = ?1', + variables: [Variable(id)], + updates: {files}, + updateKind: UpdateKind.delete, + ); + } + + Selectable getFileEmbeddingsByFileId(int fileId) { + return customSelect('SELECT * FROM file_embeddings WHERE file_id = ?1', + variables: [ + Variable(fileId) + ], + readsFrom: { + fileEmbeddings, + }).asyncMap(fileEmbeddings.mapFromRow); + } + + Future deleteFileEmbeddingByFileId(int id) { + return customUpdate( + 'DELETE FROM file_embeddings WHERE file_id = ?1', + variables: [Variable(id)], + updates: {fileEmbeddings}, + updateKind: UpdateKind.delete, + ); + } + + Selectable getLastId() { + return customSelect('SELECT last_insert_rowid() AS _c0', + variables: [], + readsFrom: {}).map((QueryRow row) => row.read('_c0')); + } + + Future insertFileEmbedding( + int fileId, int chunkId, int? start, int? end) { + return customInsert( + 'INSERT INTO file_embeddings (file_id, chunk_id, start, "end") VALUES (?1, ?2, ?3, ?4)', + variables: [ + Variable(fileId), + Variable(chunkId), + Variable(start), + Variable(end) + ], + updates: {fileEmbeddings}, + ); + } + + Selectable searchEmbeddings(Uint8List embedding) { + return customSelect( + 'SELECT files.id AS fileId, files.path, file_embeddings.start, file_embeddings."end", CAST(chunks.distance AS REAL) AS distance, files.content FROM chunks LEFT JOIN file_embeddings ON file_embeddings.chunk_id = chunks.id LEFT JOIN files ON files.id = file_embeddings.file_id WHERE embedding MATCH ?1 AND k = 20', + variables: [ + Variable(embedding) + ], + readsFrom: { + files, + fileEmbeddings, + }).map((QueryRow row) => SearchEmbeddingsResult( + fileId: row.readNullable('fileId'), + path: row.readNullable('path'), + start: row.readNullable('start'), + end: row.readNullable('end'), + distance: row.read('distance'), + content: row.readNullable('content'), + )); + } + + @override + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => [files, fileEmbeddings]; +} + +typedef $FilesCreateCompanionBuilder = FilesCompanion Function({ + Value id, + required String path, + Value content, +}); +typedef $FilesUpdateCompanionBuilder = FilesCompanion Function({ + Value id, + Value path, + Value content, +}); + +class $FilesFilterComposer extends FilterComposer<_$Database, Files> { + $FilesFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get path => $state.composableBuilder( + column: $state.table.path, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get content => $state.composableBuilder( + column: $state.table.content, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $FilesOrderingComposer extends OrderingComposer<_$Database, Files> { + $FilesOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get path => $state.composableBuilder( + column: $state.table.path, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get content => $state.composableBuilder( + column: $state.table.content, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +class $FilesTableManager extends RootTableManager< + _$Database, + Files, + File, + $FilesFilterComposer, + $FilesOrderingComposer, + $FilesCreateCompanionBuilder, + $FilesUpdateCompanionBuilder, + (File, BaseReferences<_$Database, Files, File>), + File, + PrefetchHooks Function()> { + $FilesTableManager(_$Database db, Files table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: $FilesFilterComposer(ComposerState(db, table)), + orderingComposer: $FilesOrderingComposer(ComposerState(db, table)), + updateCompanionCallback: ({ + Value id = const Value.absent(), + Value path = const Value.absent(), + Value content = const Value.absent(), + }) => + FilesCompanion( + id: id, + path: path, + content: content, + ), + createCompanionCallback: ({ + Value id = const Value.absent(), + required String path, + Value content = const Value.absent(), + }) => + FilesCompanion.insert( + id: id, + path: path, + content: content, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $FilesProcessedTableManager = ProcessedTableManager< + _$Database, + Files, + File, + $FilesFilterComposer, + $FilesOrderingComposer, + $FilesCreateCompanionBuilder, + $FilesUpdateCompanionBuilder, + (File, BaseReferences<_$Database, Files, File>), + File, + PrefetchHooks Function()>; +typedef $FileEmbeddingsCreateCompanionBuilder = FileEmbeddingsCompanion + Function({ + Value id, + required int fileId, + required int chunkId, + Value start, + Value end, +}); +typedef $FileEmbeddingsUpdateCompanionBuilder = FileEmbeddingsCompanion + Function({ + Value id, + Value fileId, + Value chunkId, + Value start, + Value end, +}); + +class $FileEmbeddingsFilterComposer + extends FilterComposer<_$Database, FileEmbeddings> { + $FileEmbeddingsFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get fileId => $state.composableBuilder( + column: $state.table.fileId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get chunkId => $state.composableBuilder( + column: $state.table.chunkId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get start => $state.composableBuilder( + column: $state.table.start, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get end => $state.composableBuilder( + column: $state.table.end, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $FileEmbeddingsOrderingComposer + extends OrderingComposer<_$Database, FileEmbeddings> { + $FileEmbeddingsOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get fileId => $state.composableBuilder( + column: $state.table.fileId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get chunkId => $state.composableBuilder( + column: $state.table.chunkId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get start => $state.composableBuilder( + column: $state.table.start, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get end => $state.composableBuilder( + column: $state.table.end, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +class $FileEmbeddingsTableManager extends RootTableManager< + _$Database, + FileEmbeddings, + FileEmbedding, + $FileEmbeddingsFilterComposer, + $FileEmbeddingsOrderingComposer, + $FileEmbeddingsCreateCompanionBuilder, + $FileEmbeddingsUpdateCompanionBuilder, + (FileEmbedding, BaseReferences<_$Database, FileEmbeddings, FileEmbedding>), + FileEmbedding, + PrefetchHooks Function()> { + $FileEmbeddingsTableManager(_$Database db, FileEmbeddings table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $FileEmbeddingsFilterComposer(ComposerState(db, table)), + orderingComposer: + $FileEmbeddingsOrderingComposer(ComposerState(db, table)), + updateCompanionCallback: ({ + Value id = const Value.absent(), + Value fileId = const Value.absent(), + Value chunkId = const Value.absent(), + Value start = const Value.absent(), + Value end = const Value.absent(), + }) => + FileEmbeddingsCompanion( + id: id, + fileId: fileId, + chunkId: chunkId, + start: start, + end: end, + ), + createCompanionCallback: ({ + Value id = const Value.absent(), + required int fileId, + required int chunkId, + Value start = const Value.absent(), + Value end = const Value.absent(), + }) => + FileEmbeddingsCompanion.insert( + id: id, + fileId: fileId, + chunkId: chunkId, + start: start, + end: end, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $FileEmbeddingsProcessedTableManager = ProcessedTableManager< + _$Database, + FileEmbeddings, + FileEmbedding, + $FileEmbeddingsFilterComposer, + $FileEmbeddingsOrderingComposer, + $FileEmbeddingsCreateCompanionBuilder, + $FileEmbeddingsUpdateCompanionBuilder, + (FileEmbedding, BaseReferences<_$Database, FileEmbeddings, FileEmbedding>), + FileEmbedding, + PrefetchHooks Function()>; + +class $DatabaseManager { + final _$Database _db; + $DatabaseManager(this._db); + $FilesTableManager get files => $FilesTableManager(_db, _db.files); + $FileEmbeddingsTableManager get fileEmbeddings => + $FileEmbeddingsTableManager(_db, _db.fileEmbeddings); +} + +class SearchEmbeddingsResult { + final int? fileId; + final String? path; + final int? start; + final int? end; + final double distance; + final String? content; + SearchEmbeddingsResult({ + this.fileId, + this.path, + this.start, + this.end, + required this.distance, + this.content, + }); +} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/sql.drift b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/sql.drift new file mode 100644 index 00000000..261af10f --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/sql.drift @@ -0,0 +1,68 @@ +CREATE TABLE files ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + path TEXT NOT NULL, + content TEXT +); + +CREATE TABLE file_embeddings ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + file_id INTEGER NOT NULL, + chunk_id INTEGER NOT NULL, + [start] INTEGER, + [end] INTEGER +); + +-- CREATE VIRTUAL TABLE chunks using vec0( +-- id INTEGER PRIMARY KEY AUTOINCREMENT, +-- embedding float[768] +-- ); + +getFiles: +SELECT * FROM files; + +getFileById: +SELECT * FROM files +WHERE id = :id; + +getFileByPath: +SELECT * FROM files +WHERE path = :path; + +insertFile: +INSERT INTO files (path, content) VALUES (:path, :content) +RETURNING *; + +deleteFileById: +DELETE FROM files +WHERE id = :id; + +getFileEmbeddingsByFileId: +SELECT * FROM file_embeddings +WHERE file_id = :fileId; + +deleteFileEmbeddingByFileId: +DELETE FROM file_embeddings +WHERE file_id = :id; + +-- insertChunk(:embedding AS BLOB): +-- INSERT INTO chunks (embedding) VALUES (:embedding); + +getLastId: +SELECT last_insert_rowid(); + +insertFileEmbedding: +INSERT INTO file_embeddings (file_id, chunk_id, [start], [end]) +VALUES (:fileId, :chunkId, :start, :end); + +searchEmbeddings(:embedding AS BLOB): +SELECT + files.id as fileId, + files.path, + file_embeddings.start, + file_embeddings.end, + CAST(chunks.distance AS REAL) as distance, + files.content +FROM chunks +LEFT JOIN file_embeddings ON file_embeddings.chunk_id = chunks.id +LEFT JOIN files ON files.id = file_embeddings.file_id +WHERE embedding MATCH :embedding AND k = 20; diff --git a/packages/langchain_community/pubspec.yaml b/packages/langchain_community/pubspec.yaml index ebf10d32..37eaa07f 100644 --- a/packages/langchain_community/pubspec.yaml +++ b/packages/langchain_community/pubspec.yaml @@ -28,8 +28,10 @@ dependencies: objectbox: ^4.0.1 tavily_dart: ^0.1.0 uuid: ^4.4.2 + drift: ^2.20.0 dev_dependencies: + drift_dev: ^2.20.1 build_runner: ^2.4.11 langchain_openai: ^0.7.0 objectbox_generator: ^4.0.1 From e7f15af400063918ef74442a7147acc685d5e19e Mon Sep 17 00:00:00 2001 From: Heinrich Date: Fri, 13 Sep 2024 00:11:08 +1000 Subject: [PATCH 04/11] added windows dll --- packages/langchain_community/app.v5.db | Bin 0 -> 3186688 bytes .../extensions/mac_vec0.dll | Bin 0 -> 165372 bytes .../langchain_community/extensions/vec0.dylib | Bin 0 -> 126568 bytes .../extensions/win_vec0.dll | Bin 0 -> 246784 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/langchain_community/app.v5.db create mode 100644 packages/langchain_community/extensions/mac_vec0.dll create mode 100644 packages/langchain_community/extensions/vec0.dylib create mode 100644 packages/langchain_community/extensions/win_vec0.dll diff --git a/packages/langchain_community/app.v5.db b/packages/langchain_community/app.v5.db new file mode 100644 index 0000000000000000000000000000000000000000..660fc419142b7f58ca35a8fdbf51691809a59c9d GIT binary patch literal 3186688 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 Date: Thu, 10 Oct 2024 23:23:41 +1000 Subject: [PATCH 05/11] Added @simolus3 sqlite download tool Need to add to melos script --- .../tool/download_sqlite3.dart | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 packages/langchain_community/tool/download_sqlite3.dart diff --git a/packages/langchain_community/tool/download_sqlite3.dart b/packages/langchain_community/tool/download_sqlite3.dart new file mode 100644 index 00000000..eecd446a --- /dev/null +++ b/packages/langchain_community/tool/download_sqlite3.dart @@ -0,0 +1,127 @@ +import 'dart:io'; + +import 'package:archive/archive_io.dart'; +import 'package:http/http.dart'; +import 'package:path/path.dart' as p; + +typedef SqliteVersion = ({String version, String year}); + +const SqliteVersion latest = (version: '3460000', year: '2024'); +const SqliteVersion minimum = (version: '3290000', year: '2019'); + +Future main(List args) async { + if (args.contains('version')) { + print(latest.version); + exit(0); + } + + await _downloadAndCompile('latest', latest, force: args.contains('--force')); + await _downloadAndCompile('minimum', minimum, + force: args.contains('--force')); +} + +extension on SqliteVersion { + String get autoconfUrl => + 'https://www.sqlite.org/$year/sqlite-autoconf-$version.tar.gz'; + + String get windowsUrl => + 'https://www.sqlite.org/$year/sqlite-dll-win-x64-$version.zip'; +} + +Future _downloadAndCompile(String name, SqliteVersion version, + {bool force = false}) async { + final driftDirectory = p.dirname(p.dirname(Platform.script.toFilePath())); + final target = p.join(driftDirectory, '.dart_tool', 'sqlite3', name); + final versionFile = File(p.join(target, 'version')); + + final needsDownload = force || + !versionFile.existsSync() || + versionFile.readAsStringSync() != version.version; + + if (!needsDownload) { + print( + 'Not downloading sqlite3 $name as it has already been downloaded. Use ' + '--force to re-compile it.', + ); + exit(0); + } + + print('Downloading and compiling sqlite3 $name (${version.version})'); + final targetDirectory = Directory(target); + + if (!targetDirectory.existsSync()) { + targetDirectory.createSync(recursive: true); + } + + final temporaryDir = + await Directory.systemTemp.createTemp('drift-compile-sqlite3'); + final temporaryDirPath = temporaryDir.path; + + // Compiling on Windows is ugly because we need users to have Visual Studio + // installed and all those tools activated in the current shell. + // Much easier to just download precompiled builds. + if (Platform.isWindows) { + final windowsUri = version.windowsUrl; + final sqlite3Zip = p.join(temporaryDirPath, 'sqlite3.zip'); + final client = Client(); + final response = await client.send(Request('GET', Uri.parse(windowsUri))); + if (response.statusCode != 200) { + print( + 'Could not download $windowsUri, status code ${response.statusCode}'); + exit(1); + } + await response.stream.pipe(File(sqlite3Zip).openWrite()); + + final inputStream = InputFileStream(sqlite3Zip); + final archive = ZipDecoder().decodeBuffer(inputStream); + + for (final file in archive.files) { + if (file.isFile && file.name == 'sqlite3.dll') { + final outputStream = OutputFileStream(p.join(target, 'sqlite3.dll')); + + file.writeContent(outputStream); + outputStream.close(); + } + } + + await File(p.join(target, 'version')).writeAsString(version.version); + exit(0); + } + + await _run('curl ${version.autoconfUrl} --output sqlite.tar.gz', + workingDirectory: temporaryDirPath); + await _run('tar zxvf sqlite.tar.gz', workingDirectory: temporaryDirPath); + + final sqlitePath = + p.join(temporaryDirPath, 'sqlite-autoconf-${version.version}'); + await _run('./configure', workingDirectory: sqlitePath); + await _run('make -j', workingDirectory: sqlitePath); + + await File(p.join(sqlitePath, 'sqlite3')).copy(p.join(target, 'sqlite3')); + + if (Platform.isLinux) { + await File(p.join(sqlitePath, '.libs', 'libsqlite3.so')) + .copy(p.join(target, 'libsqlite3.so')); + } else if (Platform.isMacOS) { + await File(p.join(sqlitePath, '.libs', 'libsqlite3.dylib')) + .copy(p.join(target, 'libsqlite3.dylib')); + } + + await File(p.join(target, 'version')).writeAsString(version.version); +} + +Future _run(String command, {String? workingDirectory}) async { + print('Running $command'); + + final proc = await Process.start( + 'sh', + ['-c', command], + mode: ProcessStartMode.inheritStdio, + workingDirectory: workingDirectory, + ); + final exitCode = await proc.exitCode; + + if (exitCode != 0) { + exit(exitCode); + } +} From 9e1cd9a87ab829632d6e6764dee46b61065a9b49 Mon Sep 17 00:00:00 2001 From: Heinrich Date: Thu, 10 Oct 2024 23:27:34 +1000 Subject: [PATCH 06/11] Langchain compatibility 0.3 --- .../vector_stores/sqlite_vec/sqlite_vec.dart | 137 +++++++++++++++ .../src/connection/connection.dart | 0 .../sqlite_vec/src/connection/native.dart | 55 ++++++ .../src/connection/unsupported.dart | 0 .../src/connection/web.dart | 0 .../sqlite_vec/src/database.dart | 159 ++++++++++++++++++ .../src/database.g.dart | 94 +++++++++-- .../{sqlite_vss => sqlite_vec}/src/sql.drift | 8 +- .../vector_stores/sqlite_vss/sqlite_vss.dart | 69 -------- .../sqlite_vss/src/connection/native.dart | 75 --------- .../sqlite_vss/src/database.dart | 88 ---------- .../sqlitevec_test.dart} | 28 +-- 12 files changed, 453 insertions(+), 260 deletions(-) create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart rename packages/langchain_community/lib/src/vector_stores/{sqlite_vss => sqlite_vec}/src/connection/connection.dart (100%) create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/native.dart rename packages/langchain_community/lib/src/vector_stores/{sqlite_vss => sqlite_vec}/src/connection/unsupported.dart (100%) rename packages/langchain_community/lib/src/vector_stores/{sqlite_vss => sqlite_vec}/src/connection/web.dart (100%) create mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart rename packages/langchain_community/lib/src/vector_stores/{sqlite_vss => sqlite_vec}/src/database.g.dart (89%) rename packages/langchain_community/lib/src/vector_stores/{sqlite_vss => sqlite_vec}/src/sql.drift (85%) delete mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/sqlite_vss.dart delete mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/native.dart delete mode 100644 packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.dart rename packages/langchain_community/test/vector_stores/{sqlite_vss/sqlitevss_test.dart => sqlite_vec/sqlitevec_test.dart} (72%) diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart new file mode 100644 index 00000000..7368231d --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart @@ -0,0 +1,137 @@ +import 'dart:convert'; + +import 'package:langchain_core/embeddings.dart'; +import 'package:langchain_core/documents.dart'; +import 'package:langchain_core/vector_stores.dart'; + +import 'src/database.dart'; + +/// SQLite with VEC extension as a vector database. +/// +/// To use, you should have the `sqlite-vec` package installed. +/// +/// Example: +/// ```dart +/// import 'package:langchain_community/vector_stores/sqlite_vec.dart'; +/// import 'package:langchain_community/embeddings/openai.dart'; +/// +/// // ... (rest of the example code) +/// ``` +class SQLiteVEC extends VectorStore { + late final Database db; + final String table; + final String dbFile; + + SQLiteVEC._internal({ + required super.embeddings, + required this.table, + required this.dbFile, + required this.db, + }); + + static Future create({ + required Embeddings embeddings, + required String table, + required String dbFile, + }) async { + final dummyEmbedding = await embeddings.embedQuery('This is a dummy text'); + final embeddingDimension = dummyEmbedding.length; + + final db = Database(embeddings, embeddingDimension, dbFile: dbFile); + + return SQLiteVEC._internal( + embeddings: embeddings, + table: table, + dbFile: dbFile, + db: db, + ); + } + + /// Return VectorStore initialized from texts and embeddings. + static Future fromTexts( + List texts, + Embeddings embeddings, { + List>? metadatas, + String table = 'langchain', + String dbFile = 'vec', + }) async { + final vec = await SQLiteVEC.create( + embeddings: embeddings, + table: table, + dbFile: dbFile, + ); + await vec.addTexts(texts: texts, metadatas: metadatas); + return vec; + } + + /// Adds texts to the vector store. + Future> addTexts({ + required List texts, + List>? metadatas, + }) async { + final ids = []; + for (int i = 0; i < texts.length; i++) { + final metadata = (metadatas != null && i < metadatas.length) + ? metadatas[i] + : {}; + // documents.add(Document(pageContent: texts[i], metadata: metadata)); + + final fileId = await db // + .insertFile('in-memory', texts[i], jsonEncode(metadata)) + .then((e) => e); + final chunks = chunkText(texts[i]); + for (final chunk in chunks) { + final chunkId = await db.addChunk(chunk.$1); + await db.insertFileEmbedding(fileId, chunkId, chunk.$2, chunk.$3); + ids.add(chunkId); + } + } + return ids; + } + + @override + Future> addDocuments({ + required List documents, + }) async { + final vectors = await embeddings.embedDocuments(documents); + return addVectors( + vectors: vectors, + documents: documents, + ); + } + + @override + Future> addVectors({ + required List> vectors, + required List documents, + }) async { + // Ensure all vectors have the correct dimension + // for (final vector in vectors) { + // if (vector.length != db.embeddingDimension) { + // throw ArgumentError( + // 'Embedding dimension mismatch: Expected ${db.embeddingDimension}, got ${vector.length}', + // ); + // } + // } + + final ids = await db.addVectors(vectors: vectors, documents: documents); + return ids.map((id) => id.toString()).toList(); + } + + @override + Future delete({required List ids}) { + // TODO: implement delete + throw UnimplementedError(); + } + + @override + Future> similaritySearchByVectorWithScores({ + required List embedding, + VectorStoreSimilaritySearch config = const VectorStoreSimilaritySearch(), + }) async { + return db.similaritySearchByVectorWithScores( + embedding: embedding, + config: config, + ); + } +} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/connection.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/connection.dart similarity index 100% rename from packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/connection.dart rename to packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/connection.dart diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/native.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/native.dart new file mode 100644 index 00000000..6c82f105 --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/native.dart @@ -0,0 +1,55 @@ +import 'dart:ffi'; +import 'dart:io'; + +import 'package:drift/drift.dart'; +import 'package:drift/native.dart'; +import 'package:path/path.dart' as p; +import 'package:sqlite3/sqlite3.dart'; + +Future databaseFile(String name) async { + // Replace with a suitable path for non-Flutter environments + final appDir = Directory.current.path; // Use the current directory + final dbPath = p.join(appDir, '$name.db'); + return File(dbPath); +} + +/// Obtains a database connection for running drift in a pure Dart environment. +QueryExecutor connect(String name) { + // For Android, Linux, or other Unix-based systems + if (Platform.isAndroid || Platform.isLinux) { + final cachebase = + Directory.systemTemp.path; // Use system temporary directory + sqlite3.tempDirectory = cachebase; // Set SQLite temporary directory + } + + sqlite3.ensureExtensionLoaded( + SqliteExtension.inLibrary( + _loadLibrary(Platform.isWindows ? 'win_vec0' : 'mac_vec0'), + 'sqlite3_vec_init', + ), + ); + + if (name == ':memory:') { + return NativeDatabase.memory(); + } + return DatabaseConnection.delayed(Future(() async { + return NativeDatabase.createBackgroundConnection( + await databaseFile(name), + ); + })); +} + +DynamicLibrary _loadLibrary(String name) { + // Dynamically load the library based on the operating system + if (Platform.isIOS || Platform.isMacOS) { + return DynamicLibrary.open('$name.dylib'); + } + if (Platform.isAndroid || Platform.isLinux) { + return DynamicLibrary.open('$name.so'); + } + if (Platform.isWindows) { + return DynamicLibrary.open( + p.join(Directory.current.path, 'extensions', '$name.dll')); + } + throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); +} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/unsupported.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/unsupported.dart similarity index 100% rename from packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/unsupported.dart rename to packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/unsupported.dart diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/web.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/web.dart similarity index 100% rename from packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/web.dart rename to packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/web.dart diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart new file mode 100644 index 00000000..895130c7 --- /dev/null +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart @@ -0,0 +1,159 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:typed_data'; + +import 'package:drift/drift.dart'; +import 'package:drift/native.dart'; +import 'package:langchain_core/documents.dart'; +import 'package:langchain_core/embeddings.dart'; +import 'package:langchain_core/vector_stores.dart'; +import 'connection/connection.dart' as impl; + +part 'database.g.dart'; + +@DriftDatabase(include: {'sql.drift'}) +class Database extends _$Database { + Database(this.textEmbedder, this.embeddingDimension, {this.dbFile = 'app.v5'}) + : super(impl.connect(dbFile)); + // Database(this.textEmbedder, this.embeddingDimension) + // : super(impl.connect('app.v5')); + + final Embeddings textEmbedder; + final int embeddingDimension; + final String dbFile; + + @override + int get schemaVersion => 1; + + @override + MigrationStrategy get migration => MigrationStrategy( + beforeOpen: (details) async { + if (details.wasCreated) return; + + /// Get embedding dimension from chunks + final schemaQueryRow = await customSelect( + "SELECT sql FROM sqlite_master WHERE name = 'chunks';") + .getSingleOrNull(); + final createStmnt = schemaQueryRow?.read('sql'); + + final size = createStmnt?.split('float[').last.split(']').first; + + if (size == null || int.tryParse(size) != embeddingDimension) { + /// drop table if page size is different + await customStatement('DROP TABLE IF EXISTS chunks;'); + await customStatement( + 'CREATE VIRTUAL TABLE IF NOT EXISTS chunks using vec0( ' + ' id INTEGER PRIMARY KEY AUTOINCREMENT, ' + ' embedding float[$embeddingDimension] ' + ');'); + } + }, + onCreate: (m) async { + await m.createAll(); + await m.database.customStatement( + 'CREATE VIRTUAL TABLE IF NOT EXISTS chunks using vec0( ' + ' id INTEGER PRIMARY KEY AUTOINCREMENT, ' + ' embedding float[$embeddingDimension] ' + ');', + ); + }, + ); + + Future addChunk( + String text, { + String? title, + int? outputDimensionality, + }) async { + final result = await textEmbedder + .embedQuery(title != null ? 'title: $title\n$text' : text); + await customStatement( + 'INSERT INTO chunks (embedding) VALUES (:embedding)', + [_serializeFloat32(result)], + ); + return getLastId().getSingle(); + } + + Future> searchChunks( + String query, { + String? title, + int? outputDimensionality, + }) async { + final result = await textEmbedder + .embedQuery(title != null ? 'title: $title\n$query' : query); + return searchEmbeddings(_serializeFloat32(result)); + } + + Future> similaritySearchByVectorWithScores({ + required List embedding, + VectorStoreSimilaritySearch config = const VectorStoreSimilaritySearch(), + }) async { + // TODO: implement similaritySearchByVectorWithScores + final embeddingResults = + await this.searchEmbeddings(_serializeFloat32(embedding)).get(); + return embeddingResults + .map((e) => ( + Document( + pageContent: e.content ?? '', + metadata: jsonDecode(e.metadata ?? '{}')), + e.distance + )) + .toList(); + } + + Future deleteChunk(int id) async { + await customStatement( + 'DELETE FROM chunks WHERE id = :id', + [id], + ); + } + + /// Return a [DatabaseConnection] for the given database file. + static DatabaseConnection createConnection(String dbFile) { + return DatabaseConnection(impl.connect(dbFile)); + } + + Future> addVectors({ + required List> vectors, + required List documents, + }) async { + if (vectors.length != documents.length) { + throw ArgumentError( + 'The number of vectors must match the number of documents.'); + } + + final List addedIds = []; + + for (int i = 0; i < vectors.length; i++) { + final vector = vectors[i]; + await customStatement( + 'INSERT INTO chunks (embedding) VALUES (:embedding)', + [_serializeFloat32(vector)], + ); + final id = await getLastId().getSingle(); + addedIds.add(id); + } + return addedIds; + } +} + +// Serializes a float32 list into a vector BLOB that sqlite-vec accepts. +Uint8List _serializeFloat32(List vector) { + final ByteData byteData = ByteData(vector.length * 4); // 4 bytes per float32 + + for (int i = 0; i < vector.length; i++) { + byteData.setFloat32(i * 4, vector[i], Endian.little); + } + + return byteData.buffer.asUint8List(); +} + +// Split long text into chunks for embedding +Iterable<(String, int, int)> chunkText(String text) sync* { + final regex = RegExp(r'((?:[^\n][\n]?)+)'); + final matches = regex.allMatches(text); + for (final match in matches) { + // Need to limit to 500 tokens for really long paragraphs + final str = text.substring(match.start, match.end); + yield (str, match.start, match.end); + } +} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.g.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.g.dart similarity index 89% rename from packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.g.dart rename to packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.g.dart index 08519bb6..05ce7a44 100644 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.g.dart +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.g.dart @@ -30,8 +30,15 @@ class Files extends Table with TableInfo { type: DriftSqlType.string, requiredDuringInsert: false, $customConstraints: ''); + static const VerificationMeta _metadataMeta = + const VerificationMeta('metadata'); + late final GeneratedColumn metadata = GeneratedColumn( + 'metadata', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: ''); @override - List get $columns => [id, path, content]; + List get $columns => [id, path, content, metadata]; @override String get aliasedName => _alias ?? actualTableName; @override @@ -55,6 +62,10 @@ class Files extends Table with TableInfo { context.handle(_contentMeta, content.isAcceptableOrUnknown(data['content']!, _contentMeta)); } + if (data.containsKey('metadata')) { + context.handle(_metadataMeta, + metadata.isAcceptableOrUnknown(data['metadata']!, _metadataMeta)); + } return context; } @@ -70,6 +81,8 @@ class Files extends Table with TableInfo { .read(DriftSqlType.string, data['${effectivePrefix}path'])!, content: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}content']), + metadata: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}metadata']), ); } @@ -86,7 +99,9 @@ class File extends DataClass implements Insertable { final int id; final String path; final String? content; - const File({required this.id, required this.path, this.content}); + final String? metadata; + const File( + {required this.id, required this.path, this.content, this.metadata}); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -95,6 +110,9 @@ class File extends DataClass implements Insertable { if (!nullToAbsent || content != null) { map['content'] = Variable(content); } + if (!nullToAbsent || metadata != null) { + map['metadata'] = Variable(metadata); + } return map; } @@ -105,6 +123,9 @@ class File extends DataClass implements Insertable { content: content == null && nullToAbsent ? const Value.absent() : Value(content), + metadata: metadata == null && nullToAbsent + ? const Value.absent() + : Value(metadata), ); } @@ -115,6 +136,7 @@ class File extends DataClass implements Insertable { id: serializer.fromJson(json['id']), path: serializer.fromJson(json['path']), content: serializer.fromJson(json['content']), + metadata: serializer.fromJson(json['metadata']), ); } @override @@ -124,23 +146,27 @@ class File extends DataClass implements Insertable { 'id': serializer.toJson(id), 'path': serializer.toJson(path), 'content': serializer.toJson(content), + 'metadata': serializer.toJson(metadata), }; } File copyWith( {int? id, String? path, - Value content = const Value.absent()}) => + Value content = const Value.absent(), + Value metadata = const Value.absent()}) => File( id: id ?? this.id, path: path ?? this.path, content: content.present ? content.value : this.content, + metadata: metadata.present ? metadata.value : this.metadata, ); File copyWithCompanion(FilesCompanion data) { return File( id: data.id.present ? data.id.value : this.id, path: data.path.present ? data.path.value : this.path, content: data.content.present ? data.content.value : this.content, + metadata: data.metadata.present ? data.metadata.value : this.metadata, ); } @@ -149,54 +175,65 @@ class File extends DataClass implements Insertable { return (StringBuffer('File(') ..write('id: $id, ') ..write('path: $path, ') - ..write('content: $content') + ..write('content: $content, ') + ..write('metadata: $metadata') ..write(')')) .toString(); } @override - int get hashCode => Object.hash(id, path, content); + int get hashCode => Object.hash(id, path, content, metadata); @override bool operator ==(Object other) => identical(this, other) || (other is File && other.id == this.id && other.path == this.path && - other.content == this.content); + other.content == this.content && + other.metadata == this.metadata); } class FilesCompanion extends UpdateCompanion { final Value id; final Value path; final Value content; + final Value metadata; const FilesCompanion({ this.id = const Value.absent(), this.path = const Value.absent(), this.content = const Value.absent(), + this.metadata = const Value.absent(), }); FilesCompanion.insert({ this.id = const Value.absent(), required String path, this.content = const Value.absent(), + this.metadata = const Value.absent(), }) : path = Value(path); static Insertable custom({ Expression? id, Expression? path, Expression? content, + Expression? metadata, }) { return RawValuesInsertable({ if (id != null) 'id': id, if (path != null) 'path': path, if (content != null) 'content': content, + if (metadata != null) 'metadata': metadata, }); } FilesCompanion copyWith( - {Value? id, Value? path, Value? content}) { + {Value? id, + Value? path, + Value? content, + Value? metadata}) { return FilesCompanion( id: id ?? this.id, path: path ?? this.path, content: content ?? this.content, + metadata: metadata ?? this.metadata, ); } @@ -212,6 +249,9 @@ class FilesCompanion extends UpdateCompanion { if (content.present) { map['content'] = Variable(content.value); } + if (metadata.present) { + map['metadata'] = Variable(metadata.value); + } return map; } @@ -220,7 +260,8 @@ class FilesCompanion extends UpdateCompanion { return (StringBuffer('FilesCompanion(') ..write('id: $id, ') ..write('path: $path, ') - ..write('content: $content') + ..write('content: $content, ') + ..write('metadata: $metadata') ..write(')')) .toString(); } @@ -552,12 +593,16 @@ abstract class _$Database extends GeneratedDatabase { }).asyncMap(files.mapFromRow); } - Future> insertFile(String path, String? content) { - return customWriteReturning( - 'INSERT INTO files (path, content) VALUES (?1, ?2) RETURNING *', - variables: [Variable(path), Variable(content)], - updates: {files}) - .then((rows) => Future.wait(rows.map(files.mapFromRow))); + Future insertFile(String path, String? content, String? metadata) { + return customInsert( + 'INSERT INTO files (path, content, metadata) VALUES (?1, ?2, ?3)', + variables: [ + Variable(path), + Variable(content), + Variable(metadata) + ], + updates: {files}, + ); } Future deleteFileById(int id) { @@ -610,7 +655,7 @@ abstract class _$Database extends GeneratedDatabase { Selectable searchEmbeddings(Uint8List embedding) { return customSelect( - 'SELECT files.id AS fileId, files.path, file_embeddings.start, file_embeddings."end", CAST(chunks.distance AS REAL) AS distance, files.content FROM chunks LEFT JOIN file_embeddings ON file_embeddings.chunk_id = chunks.id LEFT JOIN files ON files.id = file_embeddings.file_id WHERE embedding MATCH ?1 AND k = 20', + 'SELECT files.id AS fileId, files.path, file_embeddings.start, file_embeddings."end", CAST(chunks.distance AS REAL) AS distance, files.content, files.metadata FROM chunks LEFT JOIN file_embeddings ON file_embeddings.chunk_id = chunks.id LEFT JOIN files ON files.id = file_embeddings.file_id WHERE embedding MATCH ?1 AND k = 20', variables: [ Variable(embedding) ], @@ -624,6 +669,7 @@ abstract class _$Database extends GeneratedDatabase { end: row.readNullable('end'), distance: row.read('distance'), content: row.readNullable('content'), + metadata: row.readNullable('metadata'), )); } @@ -638,11 +684,13 @@ typedef $FilesCreateCompanionBuilder = FilesCompanion Function({ Value id, required String path, Value content, + Value metadata, }); typedef $FilesUpdateCompanionBuilder = FilesCompanion Function({ Value id, Value path, Value content, + Value metadata, }); class $FilesFilterComposer extends FilterComposer<_$Database, Files> { @@ -661,6 +709,11 @@ class $FilesFilterComposer extends FilterComposer<_$Database, Files> { column: $state.table.content, builder: (column, joinBuilders) => ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get metadata => $state.composableBuilder( + column: $state.table.metadata, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); } class $FilesOrderingComposer extends OrderingComposer<_$Database, Files> { @@ -679,6 +732,11 @@ class $FilesOrderingComposer extends OrderingComposer<_$Database, Files> { column: $state.table.content, builder: (column, joinBuilders) => ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get metadata => $state.composableBuilder( + column: $state.table.metadata, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); } class $FilesTableManager extends RootTableManager< @@ -702,21 +760,25 @@ class $FilesTableManager extends RootTableManager< Value id = const Value.absent(), Value path = const Value.absent(), Value content = const Value.absent(), + Value metadata = const Value.absent(), }) => FilesCompanion( id: id, path: path, content: content, + metadata: metadata, ), createCompanionCallback: ({ Value id = const Value.absent(), required String path, Value content = const Value.absent(), + Value metadata = const Value.absent(), }) => FilesCompanion.insert( id: id, path: path, content: content, + metadata: metadata, ), withReferenceMapper: (p0) => p0 .map((e) => (e.readTable(table), BaseReferences(db, table, e))) @@ -892,6 +954,7 @@ class SearchEmbeddingsResult { final int? end; final double distance; final String? content; + final String? metadata; SearchEmbeddingsResult({ this.fileId, this.path, @@ -899,5 +962,6 @@ class SearchEmbeddingsResult { this.end, required this.distance, this.content, + this.metadata, }); } diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/sql.drift b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/sql.drift similarity index 85% rename from packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/sql.drift rename to packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/sql.drift index 261af10f..fcd0affb 100644 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/sql.drift +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/sql.drift @@ -1,7 +1,8 @@ CREATE TABLE files ( id INTEGER PRIMARY KEY AUTOINCREMENT, path TEXT NOT NULL, - content TEXT + content TEXT, + metadata TEXT -- Deviated from flutter_sqlite_document_search to adhere more to langchain ); CREATE TABLE file_embeddings ( @@ -29,7 +30,7 @@ SELECT * FROM files WHERE path = :path; insertFile: -INSERT INTO files (path, content) VALUES (:path, :content) +INSERT INTO files (path, content, metadata) VALUES (:path, :content, :metadata); RETURNING *; deleteFileById: @@ -61,7 +62,8 @@ SELECT file_embeddings.start, file_embeddings.end, CAST(chunks.distance AS REAL) as distance, - files.content + files.content, + files.metadata FROM chunks LEFT JOIN file_embeddings ON file_embeddings.chunk_id = chunks.id LEFT JOIN files ON files.id = file_embeddings.file_id diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/sqlite_vss.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/sqlite_vss.dart deleted file mode 100644 index 8e5a63ff..00000000 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/sqlite_vss.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:langchain_core/embeddings.dart'; -import 'package:langchain_core/src/documents/document.dart'; -import 'package:langchain_core/src/embeddings/fake.dart'; -import 'package:langchain_core/vector_stores.dart'; - -import 'src/database.dart'; - -/// SQLite with VSS extension as a vector database. -/// -/// To use, you should have the `sqlite-vss` package installed. -/// -/// Example: -/// ```dart -/// import 'package:langchain_community/vector_stores/sqlite_vss.dart'; -/// import 'package:langchain_community/embeddings/openai.dart'; -/// -/// // ... (rest of the example code) -/// ``` -class SQLiteVSS extends VectorStore { - SQLiteVSS( - {required super.embeddings, - required String table, - required connection, - required String dbFile}); - - @override - Future> addVectors( - {required List> vectors, - required List documents}) { - // TODO: implement addVectors - throw UnimplementedError(); - } - - @override - Future delete({required List ids}) { - // TODO: implement delete - throw UnimplementedError(); - } - - void addTexts( - {required List texts, List>? metadatas}) {} - - @override - Future> similaritySearchByVectorWithScores( - {required List embedding, - VectorStoreSimilaritySearch config = - const VectorStoreSimilaritySearch()}) { - // TODO: implement similaritySearchByVectorWithScores - throw UnimplementedError(); - } - - /// Return VectorStore initialized from texts and embeddings. - factory SQLiteVSS.fromTexts( - List texts, - Embeddings embeddings, { - List>? metadatas, - String table = 'langchain', - String dbFile = 'vss.db', - }) { - final connection = Database.createConnection(dbFile); - final vss = SQLiteVSS( - embeddings: embeddings, - table: table, - connection: connection, - dbFile: dbFile, - )..addTexts(texts: texts, metadatas: metadatas); - return vss; - } -} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/native.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/native.dart deleted file mode 100644 index 258611cc..00000000 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/connection/native.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'dart:ffi'; -import 'dart:io'; - -import 'package:drift/drift.dart'; -import 'package:drift/native.dart'; -import 'package:langchain_community/dart_utils/debugging.dart'; - -import 'package:path/path.dart' as p; -import 'package:sqlite3/sqlite3.dart'; - -Future databaseFile(String name) async { - // We use `path_provider` to find a suitable path to store our data in. - final appDir = await getApplicationDocumentsDirectory(); - final dbPath = p.join(appDir.path, '$name.db'); - return File(dbPath); -} - -/// Obtains a database connection for running drift in a Dart VM. -QueryExecutor connect(String name) { - if (name == ':memory:') { - return NativeDatabase.memory(); - } - return DatabaseConnection.delayed(Future(() async { - if (Platform.isAndroid) { - await applyWorkaroundToOpenSqlite3OnOldAndroidVersions(); - - final cachebase = (await getTemporaryDirectory()).path; - - // We can't access /tmp on Android, which sqlite3 would try by default. - // Explicitly tell it about the correct temporary directory. - sqlite3.tempDirectory = cachebase; - } - - sqlite3.ensureExtensionLoaded( - SqliteExtension.inLibrary(_loadLibrary('vec0'), 'sqlite3_vec_init'), - ); - - return NativeDatabase.createBackgroundConnection( - await databaseFile(name), - ); - })); -} - -DynamicLibrary _loadLibrary(String name) { - if (Platform.isIOS || Platform.isMacOS) { - return DynamicLibrary.open('$name.dylib'); - } - if (Platform.isAndroid || Platform.isLinux) { - return DynamicLibrary.open('$name.so'); - } - if (Platform.isWindows) { - return DynamicLibrary.open(() { - if (kDebugDartMode) { - return p.normalize(p.join( - Directory.current.path, - 'extensions', - '$name.dll', - )); - } else { - final assets = p.normalize( - p.join( - 'data', - 'flutter_assets', - 'packages', - 'flutter_sqlite_document_search', - 'extensions', - ), - ); - final exe = File(Platform.resolvedExecutable).parent.path; - return p.normalize(p.join(exe, assets, '$name.dll')); - } - }()); - } - throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); -} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.dart deleted file mode 100644 index 04c7a3e0..00000000 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vss/src/database.dart +++ /dev/null @@ -1,88 +0,0 @@ -import 'dart:typed_data'; - -import 'package:drift/drift.dart'; -import 'package:drift/native.dart'; -import 'package:langchain_core/embeddings.dart'; -import 'connection/connection.dart' as impl; - -part 'database.g.dart'; - -@DriftDatabase(include: {'sql.drift'}) -class Database extends _$Database { - Database(this.textEmbedder) : super(impl.connect('app.v5')); - - final Embeddings textEmbedder; - @override - int get schemaVersion => 1; - - Future addChunk( - String text, { - String? title, - int? outputDimensionality, - }) async { - final result = await textEmbedder - .embedQuery(title != null ? 'title: $title\n$text' : text); - await customStatement( - 'INSERT INTO chunks (embedding) VALUES (:embedding)', - [_serializeFloat32(result)], - ); - return getLastId().getSingle(); - } - - Future> searchChunks( - String query, { - String? title, - int? outputDimensionality, - }) async { - final result = await textEmbedder - .embedQuery(title != null ? 'title: $title\n$query' : query); - return searchEmbeddings(_serializeFloat32(result)); - } - - Future deleteChunk(int id) async { - await customStatement( - 'DELETE FROM chunks WHERE id = :id', - [id], - ); - } - - @override - MigrationStrategy get migration => MigrationStrategy( - onCreate: (m) async { - await m.createAll(); - await m.database.customStatement( - 'CREATE VIRTUAL TABLE IF NOT EXISTS chunks using vec0( ' - ' id INTEGER PRIMARY KEY AUTOINCREMENT, ' - ' embedding float[768] ' - ');', - ); - }, - ); - - /// Return a [DatabaseConnection] for the given database file. - static DatabaseConnection createConnection(String dbFile) { - return DatabaseConnection(impl.connect(dbFile)); - } -} - -// Serializes a float32 list into a vector BLOB that sqlite-vec accepts. -Uint8List _serializeFloat32(List vector) { - final ByteData byteData = ByteData(vector.length * 4); // 4 bytes per float32 - - for (int i = 0; i < vector.length; i++) { - byteData.setFloat32(i * 4, vector[i], Endian.little); - } - - return byteData.buffer.asUint8List(); -} - -// Split long text into chunks for embedding -Iterable<(String, int, int)> chunkText(String text) sync* { - final regex = RegExp(r'((?:[^\n][\n]?)+)'); - final matches = regex.allMatches(text); - for (final match in matches) { - // Need to limit to 500 tokens for really long paragraphs - final str = text.substring(match.start, match.end); - yield (str, match.start, match.end); - } -} diff --git a/packages/langchain_community/test/vector_stores/sqlite_vss/sqlitevss_test.dart b/packages/langchain_community/test/vector_stores/sqlite_vec/sqlitevec_test.dart similarity index 72% rename from packages/langchain_community/test/vector_stores/sqlite_vss/sqlitevss_test.dart rename to packages/langchain_community/test/vector_stores/sqlite_vec/sqlitevec_test.dart index 0cda5159..910de8f8 100644 --- a/packages/langchain_community/test/vector_stores/sqlite_vss/sqlitevss_test.dart +++ b/packages/langchain_community/test/vector_stores/sqlite_vec/sqlitevec_test.dart @@ -1,14 +1,19 @@ -import 'package:langchain_community/src/vector_stores/sqlite_vss/sqlite_vss.dart'; +@Timeout(Duration(seconds: 600)) +library; + +import 'package:drift/drift.dart'; + +import 'package:langchain_community/src/vector_stores/sqlite_vec/sqlite_vec.dart'; import 'package:langchain_core/documents.dart'; import 'package:langchain_core/embeddings.dart'; import 'package:langchain_core/vector_stores.dart'; import 'package:test/test.dart'; -SQLiteVSS sqliteVssFromTexts({ +Future sqliteVecFromTexts({ List>? metaData, bool drop = true, -}) { - return SQLiteVSS.fromTexts( +}) async { + return SQLiteVEC.fromTexts( ['foo', 'bar', 'baz'], // Replace with actual fake_texts FakeEmbeddings(), metadatas: metaData, @@ -18,14 +23,17 @@ SQLiteVSS sqliteVssFromTexts({ } void main() { - group('SQLiteVSS Tests', () { + driftRuntimeOptions.dontWarnAboutMultipleDatabases = true; + group('SQLiteVEC Tests', () { test('Test end to end construction and search', () async { - final docSearch = sqliteVssFromTexts(); + final docSearch = await sqliteVecFromTexts(); final output = await docSearch.similaritySearch( query: 'foo', config: const VectorStoreSimilaritySearch(k: 1), ); - expect(output, [const Document(pageContent: 'foo', metadata: {})]); + // issue with k? + expect(output.first, + const Document(pageContent: 'foo', metadata: {'page': 0})); }); test('Test end to end construction and search with scores and IDs', @@ -34,7 +42,7 @@ void main() { final metaData = [ for (var i = 0; i < texts.length; i++) {'page': i}, ]; - final docSearch = sqliteVssFromTexts(metaData: metaData); + final docSearch = await sqliteVecFromTexts(metaData: metaData); final output = await docSearch.similaritySearchWithScores( query: 'foo', config: const VectorStoreSimilaritySearch(k: 3), @@ -56,8 +64,8 @@ void main() { final metaData = [ for (var i = 0; i < texts.length; i++) {'page': i}, ]; - final docSearch = sqliteVssFromTexts(metaData: metaData) - ..addTexts(texts: texts, metadatas: metaData); + final docSearch = await sqliteVecFromTexts(metaData: metaData); + await docSearch.addTexts(texts: texts, metadatas: metaData); final output = await docSearch.similaritySearch( query: 'foo', config: const VectorStoreSimilaritySearch(k: 10), From 9dcccebfb4da59edca81f2bcefb83ea5fe3d0ef8 Mon Sep 17 00:00:00 2001 From: Heinrich Date: Thu, 10 Oct 2024 23:27:48 +1000 Subject: [PATCH 07/11] ommited from sql dll download --- packages/langchain_community/pubspec.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/langchain_community/pubspec.yaml b/packages/langchain_community/pubspec.yaml index 37eaa07f..211023e9 100644 --- a/packages/langchain_community/pubspec.yaml +++ b/packages/langchain_community/pubspec.yaml @@ -36,6 +36,7 @@ dev_dependencies: langchain_openai: ^0.7.0 objectbox_generator: ^4.0.1 test: ^1.25.8 + archive: ^3.1.2 objectbox: output_dir: src/vector_stores/objectbox From 195581c90d0ad78a94be37590b965926dc6b2a90 Mon Sep 17 00:00:00 2001 From: Heinrich Date: Thu, 10 Oct 2024 23:44:31 +1000 Subject: [PATCH 08/11] Dart fix --- .../lib/dart_utils/debugging.dart | 21 +++++++-- .../vector_stores/sqlite_vec/sqlite_vec.dart | 6 ++- .../sqlite_vec/src/connection/native.dart | 16 ++++--- .../src/connection/unsupported.dart | 9 ++-- .../sqlite_vec/src/connection/web.dart | 45 +++++++++---------- .../sqlite_vec/src/database.dart | 41 +++++++++++------ packages/langchain_community/pubspec.yaml | 3 ++ .../sqlite_vec/sqlitevec_test.dart | 6 +-- .../tool/download_sqlite3.dart | 36 +++++++++------ 9 files changed, 114 insertions(+), 69 deletions(-) diff --git a/packages/langchain_community/lib/dart_utils/debugging.dart b/packages/langchain_community/lib/dart_utils/debugging.dart index 8346dda2..e71dadbc 100644 --- a/packages/langchain_community/lib/dart_utils/debugging.dart +++ b/packages/langchain_community/lib/dart_utils/debugging.dart @@ -1,11 +1,24 @@ +/// +/// Prints a debug message if the application is not in profile or product mode. +/// +/// The message is printed only if the optional condition `cond` is either null +/// or evaluates to true for the given message. +/// +/// \param message The message to print. +/// \param cond An optional condition that must be true for the message to be printed. void kDebugPrint(dynamic message, {bool Function(String str)? cond}) { - if (!bool.fromEnvironment('dart.vm.profile') && - !bool.fromEnvironment('dart.vm.product') && + if (!const bool.fromEnvironment('dart.vm.profile') && + !const bool.fromEnvironment('dart.vm.product') && (cond == null || cond(message))) { + // ignore: avoid_print print(message); } } +/// Returns true if the application is in debug mode. +/// +/// The application is considered to be in debug mode if it is not in profile +/// or product mode. bool get kDebugDartMode => - !bool.fromEnvironment('dart.vm.profile') && - !bool.fromEnvironment('dart.vm.product'); + !const bool.fromEnvironment('dart.vm.profile') && + !const bool.fromEnvironment('dart.vm.product'); diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart index 7368231d..5a103f67 100644 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart @@ -1,7 +1,7 @@ import 'dart:convert'; -import 'package:langchain_core/embeddings.dart'; import 'package:langchain_core/documents.dart'; +import 'package:langchain_core/embeddings.dart'; import 'package:langchain_core/vector_stores.dart'; import 'src/database.dart'; @@ -18,8 +18,11 @@ import 'src/database.dart'; /// // ... (rest of the example code) /// ``` class SQLiteVEC extends VectorStore { + /// Drift sqlite instance late final Database db; + /// Table name final String table; + /// Database file path or `:memory:` for in-memory database final String dbFile; SQLiteVEC._internal({ @@ -29,6 +32,7 @@ class SQLiteVEC extends VectorStore { required this.db, }); + /// Create a new SQLiteVEC instance. static Future create({ required Embeddings embeddings, required String table, diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/native.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/native.dart index 6c82f105..77873194 100644 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/native.dart +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/native.dart @@ -6,6 +6,7 @@ import 'package:drift/native.dart'; import 'package:path/path.dart' as p; import 'package:sqlite3/sqlite3.dart'; +/// Obtains a database connection for running drift in a pure Dart environment. Future databaseFile(String name) async { // Replace with a suitable path for non-Flutter environments final appDir = Directory.current.path; // Use the current directory @@ -32,11 +33,13 @@ QueryExecutor connect(String name) { if (name == ':memory:') { return NativeDatabase.memory(); } - return DatabaseConnection.delayed(Future(() async { - return NativeDatabase.createBackgroundConnection( - await databaseFile(name), - ); - })); + return DatabaseConnection.delayed( + Future(() async { + return NativeDatabase.createBackgroundConnection( + await databaseFile(name), + ); + }), + ); } DynamicLibrary _loadLibrary(String name) { @@ -49,7 +52,8 @@ DynamicLibrary _loadLibrary(String name) { } if (Platform.isWindows) { return DynamicLibrary.open( - p.join(Directory.current.path, 'extensions', '$name.dll')); + p.join(Directory.current.path, 'extensions', '$name.dll'), + ); } throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); } diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/unsupported.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/unsupported.dart index dc315ff1..4b6800c8 100644 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/unsupported.dart +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/unsupported.dart @@ -2,16 +2,17 @@ import 'package:drift/drift.dart'; Never _unsupported() { throw UnsupportedError( - 'No suitable database implementation was found on this platform.'); + 'No suitable database implementation was found on this platform.', + ); } -// Depending on the platform the app is compiled to, the following stubs will -// be replaced with the methods in native.dart or web.dart - +/// Depending on the platform the app is compiled to, the following stubs will +/// be replaced with the methods in native.dart or web.dart DatabaseConnection connect(String name) { _unsupported(); } +/// Depending on the platform the app is compiled to, the following stubs will Future validateDatabaseSchema(GeneratedDatabase database) async { _unsupported(); } diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/web.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/web.dart index 9e2bea61..6fe7f26a 100644 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/web.dart +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/connection/web.dart @@ -2,33 +2,32 @@ import 'dart:async'; import 'package:drift/drift.dart'; import 'package:drift/wasm.dart'; -import 'package:langchain_community/dart_utils/debugging.dart'; - - +import '../../../../../dart_utils/debugging.dart'; /// Obtains a database connection for running drift on the web. DatabaseConnection connect(String name) { - return DatabaseConnection.delayed(Future(() async { - final db = await WasmDatabase.open( - databaseName: name, - sqlite3Uri: Uri.parse('sqlite3_vec.wasm'), - driftWorkerUri: Uri.parse('drift_worker.js'), - ); - - if (db.missingFeatures.isNotEmpty) { - kDebugPrint( - 'Using ${db.chosenImplementation} due to unsupported ' - 'browser features: ${db.missingFeatures}', + return DatabaseConnection.delayed( + Future(() async { + final db = await WasmDatabase.open( + databaseName: name, + sqlite3Uri: Uri.parse('sqlite3_vec.wasm'), + driftWorkerUri: Uri.parse('drift_worker.js'), ); - } - return db.resolvedExecutor; - })); -} + if (db.missingFeatures.isNotEmpty) { + kDebugPrint( + 'Using ${db.chosenImplementation} due to unsupported ' + 'browser features: ${db.missingFeatures}', + ); + } -Future validateDatabaseSchema(GeneratedDatabase database) async { - // Unfortunately, validating database schemas only works for native platforms - // right now. - // As we also have migration tests (see the `Testing migrations` section in - // the readme of this example), this is not a huge issue. + return db.resolvedExecutor; + }), + ); } + +/// Unfortunately, validating database schemas only works for native platforms +/// right now. +/// As we also have migration tests (see the `Testing migrations` section in +/// the readme of this example), this is not a huge issue. +Future validateDatabaseSchema(GeneratedDatabase database) async {} diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart index 895130c7..43f6b9ac 100644 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart @@ -3,7 +3,6 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:drift/drift.dart'; -import 'package:drift/native.dart'; import 'package:langchain_core/documents.dart'; import 'package:langchain_core/embeddings.dart'; import 'package:langchain_core/vector_stores.dart'; @@ -12,14 +11,22 @@ import 'connection/connection.dart' as impl; part 'database.g.dart'; @DriftDatabase(include: {'sql.drift'}) + +/// Database class for storing embeddings in SQLite. class Database extends _$Database { + /// Create a new database instance. Database(this.textEmbedder, this.embeddingDimension, {this.dbFile = 'app.v5'}) : super(impl.connect(dbFile)); // Database(this.textEmbedder, this.embeddingDimension) // : super(impl.connect('app.v5')); + /// Create a new database instance for testing. final Embeddings textEmbedder; + + /// The dimension of the embeddings. final int embeddingDimension; + + /// The database file path or `:memory:` for in-memory database. final String dbFile; @override @@ -32,8 +39,8 @@ class Database extends _$Database { /// Get embedding dimension from chunks final schemaQueryRow = await customSelect( - "SELECT sql FROM sqlite_master WHERE name = 'chunks';") - .getSingleOrNull(); + "SELECT sql FROM sqlite_master WHERE name = 'chunks';", + ).getSingleOrNull(); final createStmnt = schemaQueryRow?.read('sql'); final size = createStmnt?.split('float[').last.split(']').first; @@ -59,6 +66,7 @@ class Database extends _$Database { }, ); + /// Add a chunk to the database. Future addChunk( String text, { String? title, @@ -73,6 +81,7 @@ class Database extends _$Database { return getLastId().getSingle(); } + /// Search chunks in the database. Future> searchChunks( String query, { String? title, @@ -83,23 +92,27 @@ class Database extends _$Database { return searchEmbeddings(_serializeFloat32(result)); } + /// Search chunks in the database. Future> similaritySearchByVectorWithScores({ required List embedding, VectorStoreSimilaritySearch config = const VectorStoreSimilaritySearch(), }) async { - // TODO: implement similaritySearchByVectorWithScores final embeddingResults = - await this.searchEmbeddings(_serializeFloat32(embedding)).get(); + await searchEmbeddings(_serializeFloat32(embedding)).get(); return embeddingResults - .map((e) => ( - Document( - pageContent: e.content ?? '', - metadata: jsonDecode(e.metadata ?? '{}')), - e.distance - )) + .map( + (e) => ( + Document( + pageContent: e.content ?? '', + metadata: jsonDecode(e.metadata ?? '{}'), + ), + e.distance + ), + ) .toList(); } + /// Delete a chunk from the database. Future deleteChunk(int id) async { await customStatement( 'DELETE FROM chunks WHERE id = :id', @@ -112,13 +125,15 @@ class Database extends _$Database { return DatabaseConnection(impl.connect(dbFile)); } + /// Add a list of documents to the database. Future> addVectors({ required List> vectors, required List documents, }) async { if (vectors.length != documents.length) { throw ArgumentError( - 'The number of vectors must match the number of documents.'); + 'The number of vectors must match the number of documents.', + ); } final List addedIds = []; @@ -147,7 +162,7 @@ Uint8List _serializeFloat32(List vector) { return byteData.buffer.asUint8List(); } -// Split long text into chunks for embedding +/// Split long text into chunks for embedding Iterable<(String, int, int)> chunkText(String text) sync* { final regex = RegExp(r'((?:[^\n][\n]?)+)'); final matches = regex.allMatches(text); diff --git a/packages/langchain_community/pubspec.yaml b/packages/langchain_community/pubspec.yaml index a3857ca8..e2d8fec7 100644 --- a/packages/langchain_community/pubspec.yaml +++ b/packages/langchain_community/pubspec.yaml @@ -30,6 +30,8 @@ dependencies: uuid: ^4.5.1 drift: ^2.20.0 + path: any + sqlite3: any dev_dependencies: drift_dev: ^2.20.1 build_runner: ^2.4.11 @@ -38,5 +40,6 @@ dev_dependencies: test: ^1.25.8 archive: ^3.1.2 + path: any objectbox: output_dir: src/vector_stores/objectbox diff --git a/packages/langchain_community/test/vector_stores/sqlite_vec/sqlitevec_test.dart b/packages/langchain_community/test/vector_stores/sqlite_vec/sqlitevec_test.dart index 910de8f8..01b565bb 100644 --- a/packages/langchain_community/test/vector_stores/sqlite_vec/sqlitevec_test.dart +++ b/packages/langchain_community/test/vector_stores/sqlite_vec/sqlitevec_test.dart @@ -1,6 +1,3 @@ -@Timeout(Duration(seconds: 600)) -library; - import 'package:drift/drift.dart'; import 'package:langchain_community/src/vector_stores/sqlite_vec/sqlite_vec.dart'; @@ -32,8 +29,7 @@ void main() { config: const VectorStoreSimilaritySearch(k: 1), ); // issue with k? - expect(output.first, - const Document(pageContent: 'foo', metadata: {'page': 0})); + expect(output.first, const Document(pageContent: 'foo')); }); test('Test end to end construction and search with scores and IDs', diff --git a/packages/langchain_community/tool/download_sqlite3.dart b/packages/langchain_community/tool/download_sqlite3.dart index eecd446a..9bc7389f 100644 --- a/packages/langchain_community/tool/download_sqlite3.dart +++ b/packages/langchain_community/tool/download_sqlite3.dart @@ -2,6 +2,7 @@ import 'dart:io'; import 'package:archive/archive_io.dart'; import 'package:http/http.dart'; +import 'package:langchain_community/dart_utils/debugging.dart'; import 'package:path/path.dart' as p; typedef SqliteVersion = ({String version, String year}); @@ -11,13 +12,16 @@ const SqliteVersion minimum = (version: '3290000', year: '2019'); Future main(List args) async { if (args.contains('version')) { - print(latest.version); + kDebugPrint(latest.version); exit(0); } await _downloadAndCompile('latest', latest, force: args.contains('--force')); - await _downloadAndCompile('minimum', minimum, - force: args.contains('--force')); + await _downloadAndCompile( + 'minimum', + minimum, + force: args.contains('--force'), + ); } extension on SqliteVersion { @@ -28,8 +32,11 @@ extension on SqliteVersion { 'https://www.sqlite.org/$year/sqlite-dll-win-x64-$version.zip'; } -Future _downloadAndCompile(String name, SqliteVersion version, - {bool force = false}) async { +Future _downloadAndCompile( + String name, + SqliteVersion version, { + bool force = false, +}) async { final driftDirectory = p.dirname(p.dirname(Platform.script.toFilePath())); final target = p.join(driftDirectory, '.dart_tool', 'sqlite3', name); final versionFile = File(p.join(target, 'version')); @@ -39,14 +46,14 @@ Future _downloadAndCompile(String name, SqliteVersion version, versionFile.readAsStringSync() != version.version; if (!needsDownload) { - print( + kDebugPrint( 'Not downloading sqlite3 $name as it has already been downloaded. Use ' '--force to re-compile it.', ); exit(0); } - print('Downloading and compiling sqlite3 $name (${version.version})'); + kDebugPrint('Downloading and compiling sqlite3 $name (${version.version})'); final targetDirectory = Directory(target); if (!targetDirectory.existsSync()) { @@ -66,8 +73,9 @@ Future _downloadAndCompile(String name, SqliteVersion version, final client = Client(); final response = await client.send(Request('GET', Uri.parse(windowsUri))); if (response.statusCode != 200) { - print( - 'Could not download $windowsUri, status code ${response.statusCode}'); + kDebugPrint( + 'Could not download $windowsUri, status code ${response.statusCode}', + ); exit(1); } await response.stream.pipe(File(sqlite3Zip).openWrite()); @@ -80,7 +88,7 @@ Future _downloadAndCompile(String name, SqliteVersion version, final outputStream = OutputFileStream(p.join(target, 'sqlite3.dll')); file.writeContent(outputStream); - outputStream.close(); + await outputStream.close(); } } @@ -88,8 +96,10 @@ Future _downloadAndCompile(String name, SqliteVersion version, exit(0); } - await _run('curl ${version.autoconfUrl} --output sqlite.tar.gz', - workingDirectory: temporaryDirPath); + await _run( + 'curl ${version.autoconfUrl} --output sqlite.tar.gz', + workingDirectory: temporaryDirPath, + ); await _run('tar zxvf sqlite.tar.gz', workingDirectory: temporaryDirPath); final sqlitePath = @@ -111,7 +121,7 @@ Future _downloadAndCompile(String name, SqliteVersion version, } Future _run(String command, {String? workingDirectory}) async { - print('Running $command'); + kDebugPrint('Running $command'); final proc = await Process.start( 'sh', From 3c25a0bbe61252df368212a736d6661bbae7ec43 Mon Sep 17 00:00:00 2001 From: Heinrich Date: Thu, 10 Oct 2024 23:44:59 +1000 Subject: [PATCH 09/11] dart format --- .../lib/src/vector_stores/sqlite_vec/sqlite_vec.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart index 5a103f67..ca9399a4 100644 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart @@ -20,8 +20,10 @@ import 'src/database.dart'; class SQLiteVEC extends VectorStore { /// Drift sqlite instance late final Database db; + /// Table name final String table; + /// Database file path or `:memory:` for in-memory database final String dbFile; From c4af286a00999453d98b96ff67770563ecbbf189 Mon Sep 17 00:00:00 2001 From: Heinrich Date: Thu, 10 Oct 2024 23:49:56 +1000 Subject: [PATCH 10/11] refractor --- .../lib/src/vector_stores/sqlite_vec/sqlite_vec.dart | 12 +----------- .../src/vector_stores/sqlite_vec/src/database.dart | 9 +++++++++ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart index ca9399a4..1a54eba7 100644 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/sqlite_vec.dart @@ -111,23 +111,13 @@ class SQLiteVEC extends VectorStore { required List> vectors, required List documents, }) async { - // Ensure all vectors have the correct dimension - // for (final vector in vectors) { - // if (vector.length != db.embeddingDimension) { - // throw ArgumentError( - // 'Embedding dimension mismatch: Expected ${db.embeddingDimension}, got ${vector.length}', - // ); - // } - // } - final ids = await db.addVectors(vectors: vectors, documents: documents); return ids.map((id) => id.toString()).toList(); } @override Future delete({required List ids}) { - // TODO: implement delete - throw UnimplementedError(); + return db.deleteChunks(ids.map(int.parse).toList()); } @override diff --git a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart index 43f6b9ac..7cc4c726 100644 --- a/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart +++ b/packages/langchain_community/lib/src/vector_stores/sqlite_vec/src/database.dart @@ -120,6 +120,15 @@ class Database extends _$Database { ); } + /// Delete chunks from the database. + /// [ids] is a list of chunk ids to delete. + Future deleteChunks(List ids) async { + await customStatement( + 'DELETE FROM chunks WHERE id IN (:ids)', + [ids], + ); + } + /// Return a [DatabaseConnection] for the given database file. static DatabaseConnection createConnection(String dbFile) { return DatabaseConnection(impl.connect(dbFile)); From 0cb6ebb13dd59f03375b0e2cf22685fe2aabff16 Mon Sep 17 00:00:00 2001 From: David Miguel Date: Thu, 17 Oct 2024 09:55:31 +0200 Subject: [PATCH 11/11] Add new dependencies to melos.yaml --- melos.yaml | 5 +++++ packages/langchain_community/pubspec.yaml | 13 +++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/melos.yaml b/melos.yaml index 96d44214..ef79055d 100644 --- a/melos.yaml +++ b/melos.yaml @@ -30,6 +30,7 @@ command: cross_file: ^0.3.4+2 crypto: ^3.0.3 csv: ^6.0.0 + drift: ^2.21.0 equatable: ^2.0.5 fetch_client: ^1.1.2 firebase_app_check: ^0.3.0 @@ -53,16 +54,20 @@ command: math_expressions: ^2.6.0 meta: ^1.11.0 objectbox: ^4.0.1 + path: ^1.9.0 pinecone: ^0.7.2 rxdart: ">=0.27.7 <0.29.0" shared_preferences: ^2.3.0 shelf: ^1.4.2 shelf_router: ^1.1.4 + sqlite3: ^2.4.6 supabase: ^2.2.7 uuid: ^4.5.1 web_socket_channel: ^3.0.1 dev_dependencies: + archive: ^3.6.1 build_runner: ^2.4.11 + drift_dev: ^2.21.0 freezed: ^2.5.7 json_serializable: ^6.8.0 objectbox_generator: ^4.0.1 diff --git a/packages/langchain_community/pubspec.yaml b/packages/langchain_community/pubspec.yaml index 4ed2a4ca..4748bb0e 100644 --- a/packages/langchain_community/pubspec.yaml +++ b/packages/langchain_community/pubspec.yaml @@ -19,6 +19,7 @@ dependencies: beautiful_soup_dart: ^0.3.0 cross_file: ^0.3.4+2 csv: ^6.0.0 + drift: ^2.21.0 flat_buffers: ^23.5.26 http: ^1.2.2 json_path: ^0.7.4 @@ -26,20 +27,16 @@ dependencies: math_expressions: ^2.6.0 meta: ^1.11.0 objectbox: ^4.0.1 + path: ^1.9.0 + sqlite3: ^2.4.6 tavily_dart: ^0.1.0 uuid: ^4.5.1 - drift: ^2.20.0 - - path: any - sqlite3: any dev_dependencies: - drift_dev: ^2.20.1 + archive: ^3.6.1 build_runner: ^2.4.11 + drift_dev: ^2.21.0 langchain_openai: ^0.7.2+3 objectbox_generator: ^4.0.1 test: ^1.25.8 - archive: ^3.1.2 - - path: any objectbox: output_dir: src/vector_stores/objectbox

bg^h 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 ^I6V8KZ-~|dXj~cp05EXj`;rNekz(7ybeR2B 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