mirror of
https://github.com/immich-app/immich.git
synced 2025-03-01 15:11:21 +01:00
fix(server): stricter dim size check for pgvecto.rs migration (#5767)
* stricter dim size check * remove unused import * added null check
This commit is contained in:
parent
00771899da
commit
4f38a283b4
1 changed files with 8 additions and 7 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
import { getCLIPModelInfo } from '@app/domain/smart-info/smart-info.constant';
|
||||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||||
|
|
||||||
export class UsePgVectors1700713871511 implements MigrationInterface {
|
export class UsePgVectors1700713871511 implements MigrationInterface {
|
||||||
|
@ -8,13 +9,11 @@ export class UsePgVectors1700713871511 implements MigrationInterface {
|
||||||
SELECT CARDINALITY(embedding::real[]) as dimsize
|
SELECT CARDINALITY(embedding::real[]) as dimsize
|
||||||
FROM asset_faces
|
FROM asset_faces
|
||||||
LIMIT 1`);
|
LIMIT 1`);
|
||||||
const clipDimQuery = await queryRunner.query(`
|
|
||||||
SELECT CARDINALITY("clipEmbedding"::real[]) as dimsize
|
|
||||||
FROM smart_info
|
|
||||||
LIMIT 1`);
|
|
||||||
|
|
||||||
const faceDimSize = faceDimQuery?.[0]?.['dimsize'] ?? 512;
|
const faceDimSize = faceDimQuery?.[0]?.['dimsize'] ?? 512;
|
||||||
const clipDimSize = clipDimQuery?.[0]?.['dimsize'] ?? 512;
|
|
||||||
|
const clipModelNameQuery = await queryRunner.query(`SELECT value FROM system_config WHERE key = 'machineLearning.clip.modelName'`);
|
||||||
|
const clipModelName: string = clipModelNameQuery?.[0]?.['value'] ?? 'ViT-B-32__openai';
|
||||||
|
const clipDimSize = getCLIPModelInfo(clipModelName.replace(/"/g, '')).dimSize;
|
||||||
|
|
||||||
await queryRunner.query('CREATE EXTENSION IF NOT EXISTS vectors');
|
await queryRunner.query('CREATE EXTENSION IF NOT EXISTS vectors');
|
||||||
|
|
||||||
|
@ -32,7 +31,9 @@ export class UsePgVectors1700713871511 implements MigrationInterface {
|
||||||
INSERT INTO smart_search("assetId", embedding)
|
INSERT INTO smart_search("assetId", embedding)
|
||||||
SELECT si."assetId", si."clipEmbedding"
|
SELECT si."assetId", si."clipEmbedding"
|
||||||
FROM smart_info si
|
FROM smart_info si
|
||||||
WHERE "clipEmbedding" IS NOT NULL`);
|
WHERE "clipEmbedding" IS NOT NULL
|
||||||
|
AND CARDINALITY("clipEmbedding"::real[]) = ${clipDimSize}
|
||||||
|
AND array_position(si."clipEmbedding", NULL) IS NULL`);
|
||||||
|
|
||||||
await queryRunner.query(`ALTER TABLE smart_info DROP COLUMN IF EXISTS "clipEmbedding"`);
|
await queryRunner.query(`ALTER TABLE smart_info DROP COLUMN IF EXISTS "clipEmbedding"`);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue