From c0fec68e434bff65eb11731f18dd85be19dce6e8 Mon Sep 17 00:00:00 2001 From: Varun Raj Date: Tue, 24 Dec 2024 23:40:48 +0530 Subject: [PATCH] feat: base setup for search photos Signed-off-by: Varun Raj --- bun.lockb | Bin 398205 -> 407641 bytes package.json | 11 ++- src/components/find/FindInput.tsx | 58 ++++++++++++++++ src/components/find/findInputStyle.ts | 40 +++++++++++ src/components/find/findMentionStyle.ts | 3 + src/config/constants/sidebarNavs.tsx | 7 +- src/config/environment.ts | 3 +- src/config/routes.ts | 5 +- src/handlers/api/asset.handler.ts | 7 +- src/helpers/asset.helper.ts | 2 +- src/helpers/data.helper.ts | 14 ++++ src/helpers/gemini.helper.ts | 87 ++++++++++++++++++++++++ src/pages/api/find/search.ts | 42 ++++++++++++ src/pages/find/index.tsx | 67 ++++++++++++++++++ 14 files changed, 338 insertions(+), 8 deletions(-) create mode 100644 src/components/find/FindInput.tsx create mode 100644 src/components/find/findInputStyle.ts create mode 100644 src/components/find/findMentionStyle.ts create mode 100644 src/helpers/gemini.helper.ts create mode 100644 src/pages/api/find/search.ts create mode 100644 src/pages/find/index.tsx diff --git a/bun.lockb b/bun.lockb index 2f76eacce8d3e002ce4d51ffcbd4cd3714bad4f8..9e16cf7de14e87de0ce979db92fe812e655e10ef 100755 GIT binary patch delta 87411 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≷|9pVw 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 Re-O}P>!$9-lKz_H{{zc*nQ{OC diff --git a/package.json b/package.json index aea774c..53e14c1 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "url": "https://varunraj.in" }, "dependencies": { + "@google/generative-ai": "^0.21.0", "@radix-ui/react-accordion": "^1.2.1", "@radix-ui/react-avatar": "^1.1.0", "@radix-ui/react-checkbox": "^1.1.2", @@ -44,24 +45,27 @@ "date-fns": "^3.6.0", "drizzle-orm": "^0.33.0", "leaflet": "^1.9.4", - "leaflet-defaulticon-compatibility":"0.1.2", + "leaflet-defaulticon-compatibility": "0.1.2", "lucide-react": "^0.428.0", "next": "14.2.5", "next-themes": "^0.3.0", "pg": "^8.12.0", "qs": "^6.13.0", + "rc-mentions": "^2.18.0", "react": "^18", "react-calendar-heatmap": "^1.9.0", "react-day-picker": "9.0.8", "react-dom": "^18", "react-grid-gallery": "^1.0.1", "react-leaflet": "^4.2.1", + "react-mentions": "^4.4.10", "react-query": "^3.39.3", "recharts": "^2.12.7", "sass": "^1.77.8", "tailwind-merge": "^2.5.2", "tailwindcss-animate": "^1.0.7", - "yet-another-react-lightbox": "^3.21.4" + "yet-another-react-lightbox": "^3.21.4", + "zod": "^3.24.1" }, "devDependencies": { "@semantic-release/commit-analyzer": "^13.0.0", @@ -70,11 +74,12 @@ "@semantic-release/npm": "^12.0.1", "@semantic-release/release-notes-generator": "^14.0.1", "@types/jsonwebtoken": "^9.0.6", - "@types/leaflet":"^1.9.15", + "@types/leaflet": "^1.9.15", "@types/node": "^20", "@types/pg": "^8.11.6", "@types/react": "^18", "@types/react-dom": "^18", + "@types/react-mentions": "^4.4.1", "autoprefixer": "^10.4.20", "drizzle-kit": "^0.24.0", "eslint": "^8", diff --git a/src/components/find/FindInput.tsx b/src/components/find/FindInput.tsx new file mode 100644 index 0000000..3fe6ec2 --- /dev/null +++ b/src/components/find/FindInput.tsx @@ -0,0 +1,58 @@ +import React, { useState } from 'react' +import style from './findInputStyle' +import { MentionsInput, Mention } from 'react-mentions' +import { searchPeople } from '@/handlers/api/people.handler'; +import mentionStyle from './findMentionStyle'; +import { PERSON_THUBNAIL_PATH } from '@/config/routes'; +import Image from 'next/image'; + +interface FindInputProps { + onSearch: (query: string) => void; +} + +export default function FindInput({ onSearch }: FindInputProps) { + + const [query, setQuery] = useState(""); + + const handleSearchPeople = async (e: any, callback: any) => { + if (!e.length) return []; + return searchPeople(e).then((people) => people.map((person: any) => ({ + id: person.id, + display: person.name, + }))).then((people) => callback(people)); + } + + return ( + { + if (e.key === 'Enter') { + onSearch(query); + } + }} + onChange={(e) => setQuery(e.target.value)}> + ( +

+ + {highlightedDisplay.display} +
+ )} + /> + + ) +} diff --git a/src/components/find/findInputStyle.ts b/src/components/find/findInputStyle.ts new file mode 100644 index 0000000..9e6a587 --- /dev/null +++ b/src/components/find/findInputStyle.ts @@ -0,0 +1,40 @@ +const findInputStyle = { + control: { + backgroundColor: '#fff', + fontSize: 14, + fontWeight: 'normal', + }, + + + '&singleLine': { + display: 'inline-block', + + highlighter: { + padding: '10px', + border: '2px inset transparent', + }, + input: { + width: "100%", + padding: '10px', + borderRadius: '4px', + border: '1px solid #e0e0e0', + }, + }, + + suggestions: { + list: { + backgroundColor: 'white', + border: '1px solid rgba(0,0,0,0.15)', + fontSize: 14, + }, + item: { + padding: '5px 15px', + borderBottom: '1px solid rgba(0,0,0,0.15)', + '&focused': { + backgroundColor: '#cee4e5', + }, + }, + }, +} + +export default findInputStyle; \ No newline at end of file diff --git a/src/components/find/findMentionStyle.ts b/src/components/find/findMentionStyle.ts new file mode 100644 index 0000000..802b1e4 --- /dev/null +++ b/src/components/find/findMentionStyle.ts @@ -0,0 +1,3 @@ +export default { + backgroundColor: '#cee4e5', +} \ No newline at end of file diff --git a/src/config/constants/sidebarNavs.tsx b/src/config/constants/sidebarNavs.tsx index 7f1eebe..7b35b65 100644 --- a/src/config/constants/sidebarNavs.tsx +++ b/src/config/constants/sidebarNavs.tsx @@ -1,4 +1,4 @@ -import { Album, GalleryHorizontal, GalleryVerticalEnd, Home, Image, LocateOff, MapPinX, User } from "lucide-react"; +import { Album, GalleryHorizontal, GalleryVerticalEnd, Home, Image, LocateOff, MapPinX, Search, User } from "lucide-react"; export const sidebarNavs = [ { @@ -26,4 +26,9 @@ export const sidebarNavs = [ link: "/albums", icon: , }, + { + title: "Find", + link: "/find", + icon: , + }, ]; diff --git a/src/config/environment.ts b/src/config/environment.ts index e68cc52..a6ac9d1 100644 --- a/src/config/environment.ts +++ b/src/config/environment.ts @@ -5,7 +5,8 @@ export const ENV = { DATABASE_URL: (process.env.DATABASE_URL || `postgresql://${process.env.DB_USERNAME}:${process.env.DB_PASSWORD}@${(process.env.DB_HOST || 'immich_postgres')}:${(process.env.DB_PORT || '5432')}/${process.env.DB_DATABASE_NAME}`), JWT_SECRET: process.env.JWT_SECRET as string, SECURE_COOKIE: process.env.SECURE_COOKIE === 'true', - VERSION: process.env.VERSION + VERSION: process.env.VERSION, + GEMINI_API_KEY: process.env.GEMINI_API_KEY as string, }; diff --git a/src/config/routes.ts b/src/config/routes.ts index 090483c..8d9bffb 100644 --- a/src/config/routes.ts +++ b/src/config/routes.ts @@ -48,4 +48,7 @@ export const HEATMAP_DATA = BASE_API_ENDPOINT + "/analytics/statistics/heatmap"; export const GET_FILTERS = BASE_API_ENDPOINT + "/filters/asset-filters"; // Person -export const GET_PERSON_INFO = (personId: string) => BASE_API_ENDPOINT + "/people/" + personId + "/info"; \ No newline at end of file +export const GET_PERSON_INFO = (personId: string) => BASE_API_ENDPOINT + "/people/" + personId + "/info"; + +// Find +export const FIND_ASSETS = BASE_API_ENDPOINT + "/find/search"; \ No newline at end of file diff --git a/src/handlers/api/asset.handler.ts b/src/handlers/api/asset.handler.ts index 664f4b5..b04cced 100644 --- a/src/handlers/api/asset.handler.ts +++ b/src/handlers/api/asset.handler.ts @@ -1,5 +1,6 @@ import { ADD_ASSETS_ALBUMS_PATH, + FIND_ASSETS, LIST_ALBUMS_PATH, LIST_MISSING_LOCATION_ASSETS_PATH, LIST_MISSING_LOCATION_DATES_PATH, @@ -45,4 +46,8 @@ export interface IUpdateAssetsParams { export const updateAssets = async (params: IUpdateAssetsParams) => { return API.put(UPDATE_ASSETS_PATH, params); } - \ No newline at end of file + + +export const findAssets = async (query: string) => { + return API.post(FIND_ASSETS, { query }); +} \ No newline at end of file diff --git a/src/helpers/asset.helper.ts b/src/helpers/asset.helper.ts index a8236fa..b36bc3d 100644 --- a/src/helpers/asset.helper.ts +++ b/src/helpers/asset.helper.ts @@ -11,4 +11,4 @@ export const cleanUpAsset = (asset: IAsset): IAsset => { previewUrl: ASSET_PREVIEW_PATH(asset.id), videoURL: ASSET_VIDEO_PATH(asset.id), } -} \ No newline at end of file +} diff --git a/src/helpers/data.helper.ts b/src/helpers/data.helper.ts index d201cb7..939493a 100644 --- a/src/helpers/data.helper.ts +++ b/src/helpers/data.helper.ts @@ -3,4 +3,18 @@ export const stringToBoolean = (value: string | boolean): boolean => { return value; } return value === 'true'; +} + +export const removeNullOrUndefinedProperties = (obj: any) => { + return Object.fromEntries(Object.entries(obj).filter(([_, v]) => { + if (Array.isArray(v)) { + return v.length > 0; + } + + if (typeof v === 'number') { + return v !== null && v !== undefined && v !== 0; + } + + return v !== null && v !== undefined && v !== '' && v !== 'null' && v !== 'undefined' && v !== 'null' && v !== 'undefined' + })); } \ No newline at end of file diff --git a/src/helpers/gemini.helper.ts b/src/helpers/gemini.helper.ts new file mode 100644 index 0000000..7eb89c0 --- /dev/null +++ b/src/helpers/gemini.helper.ts @@ -0,0 +1,87 @@ +import { ENV } from "@/config/environment"; +import { GoogleGenerativeAI, SchemaType } from "@google/generative-ai"; +import { z } from "zod"; +import { removeNullOrUndefinedProperties } from "./data.helper"; + +const gemini = new GoogleGenerativeAI(ENV.GEMINI_API_KEY); +const model = gemini.getGenerativeModel({ model: "gemini-1.5-flash" }); + +interface FindQuery { + query: string; + personIds?: string[]; + city?: string; + size?: number; + model?: string; + createdAfter?: string; + state?: string; +} +const responseSchema = { + type: SchemaType.OBJECT, + properties: { + query: { type: SchemaType.STRING, description: "Gist of the query. Remove the details of tags" }, + personIds: { type: SchemaType.ARRAY, + description: "List of person ids that match the query which starts with @", + items: { type: SchemaType.STRING } + }, + city: { type: SchemaType.STRING, + description: "City of the query" + }, + size: { + type: SchemaType.INTEGER, + description: "Size of the file in bytes" + }, + country: { + type: SchemaType.STRING, + description: "Any reference to a country (United States, Canada, etc) in the query, return full country name" + }, + state: { + type: SchemaType.STRING, + description: "Any reference to a state (California, New York, etc) in the query" + }, + takenAfter: { + type: SchemaType.STRING, + description: "Extract the date from the query and return it in the format YYYY-MM-DD but only if it is a valid date" + }, + takenBefore: { + type: SchemaType.STRING, + description: "Extract the date from the query and return it in the format YYYY-MM-DD but only if it is a valid date" + }, + model: { + type: SchemaType.STRING, + description: "Name of the device that the query is about" + }, + }, + required: ["query"], +}; + +export const parseFindQuery = async (query: string): Promise => { + + const prompt = ` + Parse the following query and return the query and tags: ${query} + Additional Information For Parsing: + today's date is ${new Date().toISOString().split('T')[0]} + `; + + const { response } = await model.generateContent({ + contents: [ + { + role: "user", + parts: [ + { + text: prompt, + }, + ], + }, + ], + generationConfig: { + responseMimeType: "application/json", + responseSchema, + } + }); + + const parsedResponse = JSON.parse(response.text()) as FindQuery; + const cleanedResponse = { + ...parsedResponse + }; + return removeNullOrUndefinedProperties(cleanedResponse) as any as FindQuery; +} diff --git a/src/pages/api/find/search.ts b/src/pages/api/find/search.ts new file mode 100644 index 0000000..b76fe55 --- /dev/null +++ b/src/pages/api/find/search.ts @@ -0,0 +1,42 @@ +import { db } from '@/config/db'; +import { ENV } from '@/config/environment'; +import { getCurrentUser } from '@/handlers/serverUtils/user.utils'; +import { parseFindQuery } from '@/helpers/gemini.helper'; +import { assetFaces, assets, person } from '@/schema'; +import { and, eq, inArray } from 'drizzle-orm'; +import { NextApiRequest, NextApiResponse } from 'next'; + +export default async function search(req: NextApiRequest, res: NextApiResponse) { + const { query } = req.body; + const currentUser = await getCurrentUser(req); + const parsedQuery = await parseFindQuery(query as string); + const url = ENV.IMMICH_URL + "/api/search/smart"; + + return fetch(url, { + method: 'POST', + body: JSON.stringify(parsedQuery), + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${currentUser?.accessToken}` + } + }).then(response => { + if (response.status !== 200) { + return res.json({ + assets: [], + filters: parsedQuery, + error: "Failed to fetch assets", + errorData: response.json() + }); + } + return response.json(); + }) + .then(data => { + res.status(200).json({ + assets: data.assets.items, + filters: parsedQuery + }); + }).catch(err => { + res.status(500).json({ error: err.message }); + }); + +} \ No newline at end of file diff --git a/src/pages/find/index.tsx b/src/pages/find/index.tsx new file mode 100644 index 0000000..88f5318 --- /dev/null +++ b/src/pages/find/index.tsx @@ -0,0 +1,67 @@ +import FindInput from '@/components/find/FindInput'; +import PageLayout from '@/components/layouts/PageLayout'; +import Header from '@/components/shared/Header'; +import Loader from '@/components/ui/loader'; +import { ASSET_THUMBNAIL_PATH } from '@/config/routes'; +import { findAssets } from '@/handlers/api/asset.handler'; +import { IAsset } from '@/types/asset'; +import Image from 'next/image'; +import React, { useState } from 'react' + + +export default function FindPage() { + const [assets, setAssets] = useState([]); + const [loading, setLoading] = useState(false); + const handleSearch = (query: string) => { + setLoading(true); + findAssets(query) + .then(({ assets }) => { + setAssets(assets); + }) + .finally(() => { + setLoading(false); + }); + } + + const renderContent = () => { + if (assets.length === 0) { + return
+ No results found +
+ } + else if (loading) { + return
+ +
+ } + return ( +
+ {assets.map((asset) => ( +
+ {asset.id} +
+ ))} +
+ ) + } + + return ( + +
+
+ +
+ {renderContent()} + + ) +}