);
}
diff --git a/src/db/init.sql b/src/db/init.sql
index be6b435..dba4872 100644
--- a/src/db/init.sql
+++ b/src/db/init.sql
@@ -1,88 +1,86 @@
CREATE EXTENSION IF NOT EXISTS "vector";
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
--- content table
-CREATE TABLE healthcare_providers (
+-- Upravíme tabulku healthcareprovidors
+CREATE TABLE IF NOT EXISTS healthcareprovidors (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- name TEXT NOT NULL,
- url TEXT NOT NULL,
- description TEXT,
- contact_info TEXT,
- DruhZarizeni TEXT,
- OborPece TEXT,
- FormaPece TEXT,
- DruhPece TEXT,
- OdbornyZastupce TEXT,
- address TEXT,
- services TEXT,
- ext_info JSONB
+ nazevzarizeni TEXT,
+ druhzarizeni TEXT,
+ obec TEXT,
+ psc BIGINT,
+ ulice TEXT,
+ cislodomovniorientacni TEXT,
+ kraj TEXT,
+ okres TEXT,
+ poskytovateltelefon TEXT,
+ poskytovateljfax TEXT,
+ poskytovateljmail TEXT,
+ poskytovatelweb TEXT,
+ ico BIGINT,
+ oborpece TEXT,
+ formapece TEXT,
+ druhpece TEXT,
+ odbornyzastupce TEXT,
+ embedding vector(768)
);
--- chunk table
-CREATE TABLE healthcare_providers_chunk (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- chunk_text TEXT,
- metadata JSONB,
- provider_id UUID NOT NULL,
- embedding vector(768),
- FOREIGN KEY (provider_id) REFERENCES healthcare_providers(id)
-);
-
--- hnsw index for query performance
-create index on healthcare_providers_chunk using hnsw (embedding vector_l2_ops);
+-- Vytvoříme index pro vektorové vyhledávání
+CREATE INDEX IF NOT EXISTS healthcareprovidors_embedding_idx ON healthcareprovidors USING hnsw (embedding vector_l2_ops);
--- rpc function for supabase client
-create or replace function match_embeddings (
+-- Upravíme funkci match_embeddings
+CREATE OR REPLACE FUNCTION match_embeddings (
query_embedding vector(768),
match_threshold float,
match_count int
)
-returns table (
+RETURNS TABLE (
id UUID,
- metadata JSONB,
- provider_id UUID,
- chunk_text TEXT,
- similarity float,
- name TEXT,
- url TEXT,
- description TEXT,
- contact_info TEXT,
- DruhZarizeni TEXT,
- OborPece TEXT,
- FormaPece TEXT,
- DruhPece TEXT,
- OdbornyZastupce TEXT,
- address TEXT,
- services TEXT
+ nazevzarizeni TEXT,
+ druhzarizeni TEXT,
+ obec TEXT,
+ psc BIGINT,
+ ulice TEXT,
+ cislodomovniorientacni TEXT,
+ kraj TEXT,
+ okres TEXT,
+ poskytovateltelefon TEXT,
+ poskytovateljmail TEXT,
+ poskytovatelweb TEXT,
+ ico BIGINT,
+ oborpece TEXT,
+ formapece TEXT,
+ druhpece TEXT,
+ odbornyzastupce TEXT,
+ similarity float
)
-language plpgsql
-as $$
-begin
- return query
- select
- healthcare_providers_chunk.id,
- healthcare_providers_chunk.metadata,
- healthcare_providers_chunk.provider_id,
- healthcare_providers_chunk.chunk_text,
- 1 - (healthcare_providers_chunk.embedding <=> query_embedding) as similarity,
- healthcare_providers.name,
- healthcare_providers.url,
- healthcare_providers.description,
- healthcare_providers.contact_info,
- healthcare_providers.DruhZarizeni,
- healthcare_providers.OborPece,
- healthcare_providers.FormaPece,
- healthcare_providers.DruhPece,
- healthcare_providers.OdbornyZastupce,
- healthcare_providers.address,
- healthcare_providers.services
- from healthcare_providers_chunk
- join healthcare_providers on healthcare_providers_chunk.provider_id = healthcare_providers.id
- where 1 - (healthcare_providers_chunk.embedding <=> query_embedding) > match_threshold
- order by similarity desc
- limit match_count;
-end;
+LANGUAGE plpgsql
+AS $$
+BEGIN
+ RETURN QUERY
+ SELECT
+ healthcareprovidors.id,
+ healthcareprovidors.nazevzarizeni,
+ healthcareprovidors.druhzarizeni,
+ healthcareprovidors.obec,
+ healthcareprovidors.psc,
+ healthcareprovidors.ulice,
+ healthcareprovidors.cislodomovniorientacni,
+ healthcareprovidors.kraj,
+ healthcareprovidors.okres,
+ healthcareprovidors.poskytovateltelefon,
+ healthcareprovidors.poskytovateljmail,
+ healthcareprovidors.poskytovatelweb,
+ healthcareprovidors.ico,
+ healthcareprovidors.oborpece,
+ healthcareprovidors.formapece,
+ healthcareprovidors.druhpece,
+ healthcareprovidors.odbornyzastupce,
+ 1 - (healthcareprovidors.embedding <=> query_embedding) AS similarity
+ FROM healthcareprovidors
+ WHERE 1 - (healthcareprovidors.embedding <=> query_embedding) > match_threshold
+ ORDER BY similarity DESC
+ LIMIT match_count;
+END;
$$;
diff --git a/src/lib/chat/prompts.ts b/src/lib/chat/prompts.ts
index 09a3146..2261f41 100644
--- a/src/lib/chat/prompts.ts
+++ b/src/lib/chat/prompts.ts
@@ -1,10 +1,11 @@
export const CHAT_PROMPT = (contexts: string, query: string) => `\
-Jako profesionální asistent pro zdravotní péči doporučte nejlepší poskytovatele zdravotní péče pro uživatele na základě poskytnutých výsledků vyhledávání (Název, URL, Kontaktní informace, Druh zařízení, Obor péče, Forma péče, Druh péče, Odborný zástupce, Adresa, Služby).
+Jako profesionální asistent pro zdravotní péči doporučte nejlepší poskytovatele zdravotní péče pro uživatele na základě poskytnutých výsledků vyhledávání (NazevZarizeni, DruhZarizeni, OborPece, FormaPece, DruhPece, OdbornyZastupce, Adresa, Kontaktní informace).
Používejte pouze informace poskytnuté ve výsledcích vyhledávání. Používejte profesionální tón.
Představte každého poskytovatele v kontextu.
-Pokud souhrn obsahuje počet návštěv stránky, nezapomeňte na to upozornit, jinak to ignorujte.
+Pokud je to relevantní, zmiňte specializaci, formu a druh péče.
+Uveďte adresu a kontaktní informace pro každého poskytovatele.
Musíte citovat odpověď pomocí notace [číslo]. Musíte citovat věty s příslušným číslem citace. Citujte každou část odpovědi.
Umístěte citace na konec věty. Můžete provést více citací za sebou ve formátu [číslo1][číslo2].
From 3fefe22cd76fd0e2dc0c3a897e047eec529de771 Mon Sep 17 00:00:00 2001
From: petrsovadina
Date: Mon, 23 Sep 2024 00:41:32 +0200
Subject: [PATCH 3/3] 2
---
src/app/api/chat/route.ts | 12 ++++++++++++
src/components/search-results.tsx | 8 ++++----
src/schema/chat.ts | 15 +++++++++++++++
3 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/src/app/api/chat/route.ts b/src/app/api/chat/route.ts
index 3aa2291..fb443bd 100644
--- a/src/app/api/chat/route.ts
+++ b/src/app/api/chat/route.ts
@@ -13,7 +13,19 @@ const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
const supabase = createClient(supabaseUrl, supabaseKey)
+// Přidejte tuto funkci pro testování připojení
+async function testSupabaseConnection() {
+ try {
+ const { data, error } = await supabase.from('healthcareprovidors').select('*').limit(1)
+ if (error) throw error
+ console.log('Úspěšné připojení k Supabase:', data)
+ } catch (error) {
+ console.error('Chyba při připojení k Supabase:', error)
+ }
+}
+
export async function POST(req: NextRequest) {
+ await testSupabaseConnection()
const body = await req.json();
const { query } = body;
diff --git a/src/components/search-results.tsx b/src/components/search-results.tsx
index a62a4c3..cf2eb8a 100644
--- a/src/components/search-results.tsx
+++ b/src/components/search-results.tsx
@@ -50,15 +50,15 @@ export function SearchResults({ results }: { results: SearchResult[] }) {
Telefon: {result.contact.phone}, Email: {result.contact.email}
- Forma péče: {result.specialization.FormaPece}, Druh péče: {result.specialization.DruhPece}
+ Forma péče: {result.specialization.formapece}, Druh péče: {result.specialization.druhpece}