REMOVE TABLE IF EXISTS chat_session; REMOVE TABLE IF EXISTS refers_to; REMOVE FUNCTION fn::vector_search; DEFINE FUNCTION IF NOT EXISTS fn::vector_search($query: array, $match_count: int, $sources:bool, $show_notes:bool) { let $source_embedding_search = IF $sources {( SELECT source as item_id, content, vector::similarity::cosine(embedding, $query) as similarity FROM source_embedding LIMIT $match_count)} ELSE { [] }; let $source_insight_search = IF $sources {( SELECT source as item_id, content, vector::similarity::cosine(embedding, $query) as similarity FROM source_insight LIMIT $match_count)} ELSE { [] }; let $note_content_search = IF $show_notes {( SELECT id as item_id, content, vector::similarity::cosine(embedding, $query) as similarity FROM note LIMIT $match_count)} ELSE { [] }; let $source_chunk_results = array::union($source_embedding_search, $source_insight_search); let $source_results = array::union($source_chunk_results, $source_insight_search); let $note_results = $note_content_search; let $final_results = array::union($source_results, $note_results ); RETURN (SELECT item_id, math::max(similarity) as similarity from $final_results group by item_id ORDER BY similarity DESC LIMIT $match_count); }; REMOVE FUNCTION fn::text_search; DEFINE FUNCTION IF NOT EXISTS fn::text_search($query_text: string, $match_count: int, $sources:bool, $show_notes:bool) { let $source_title_search = IF $sources {( SELECT id as item_id, math::max(search::score(1)) AS relevance FROM source WHERE title @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $source_embedding_search = IF $sources {( SELECT source as item_id, math::max(search::score(1)) AS relevance FROM source_embedding WHERE content @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $source_full_search = IF $sources {( SELECT source as item_id, math::max(search::score(1)) AS relevance FROM source WHERE full_text @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $source_insight_search = IF $sources {( SELECT source as item_id, math::max(search::score(1)) AS relevance FROM source_insight WHERE content @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $note_title_search = IF $show_notes {( SELECT id as item_id, math::max(search::score(1)) AS relevance FROM note WHERE title @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $note_content_search = IF $show_notes {( SELECT id as item_id, math::max(search::score(1)) AS relevance FROM note WHERE content @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $source_chunk_results = array::union($source_embedding_search, $source_full_search); let $source_asset_results = array::union($source_title_search, $source_insight_search); let $source_results = array::union($source_chunk_results, $source_asset_results ); let $note_results = array::union($note_title_search, $note_content_search ); let $final_results = array::union($source_results, $note_results ); RETURN (SELECT item_id, math::max(relevance) as relevance from $final_results group by item_id ORDER BY relevance DESC LIMIT $match_count); };