mirror of
https://github.com/immich-app/immich.git
synced 2025-05-30 19:54:52 -04: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,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…
x
Reference in New Issue
Block a user