WladlenVK commited on
Commit
2fca014
·
unverified ·
1 Parent(s): b6f75a3

Update load_book.py

Browse files
Files changed (1) hide show
  1. load_book.py +40 -31
load_book.py CHANGED
@@ -1,50 +1,59 @@
1
  import os
2
- from dotenv import load_dotenv
3
  from langchain_community.document_loaders import TextLoader
4
- from langchain_text_splitters import CharacterTextSplitter
5
  from langchain_google_genai import GoogleGenerativeAIEmbeddings
 
6
  from langchain_community.vectorstores import SupabaseVectorStore
7
  from supabase.client import create_client
8
 
9
- # Загружаем ключи из .env
10
- load_dotenv()
11
-
12
  def load_book_to_supabase():
13
- # 1. Инициализация клиента Supabase
14
  supabase_url = os.environ.get("SUPABASE_URL")
15
  supabase_key = os.environ.get("SUPABASE_SERVICE_ROLE_KEY")
16
- supabase = create_client(supabase_url, supabase_key)
17
 
18
- # 2. Инициализация эмбеддингов Gemini
19
- embeddings = GoogleGenerativeAIEmbeddings(
20
- model="models/embedding-001", # Используем эту модель, она самая стабильная
21
- google_api_key=os.environ.get("GEMINI_API_KEY")
22
- )
23
 
24
- # 3. Загрузка текста книги
25
- loader = TextLoader("book.txt", encoding="utf-8")
26
- documents = loader.load()
27
 
28
- # 4. Нарезка текста на фрагменты (чанки)
29
- text_splitter = CharacterTextSplitter(
30
- chunk_size=1000,
31
- chunk_overlap=100,
32
- separator="\n"
33
- )
 
 
 
 
 
34
  docs = text_splitter.split_documents(documents)
 
35
 
36
- print(f"Книга разбита на {len(docs)} фрагментов. Начинаю загрузку в базу...")
37
-
38
- # 5. Загрузка в Supabase
39
- SupabaseVectorStore.from_documents(
40
- docs,
41
- embeddings,
42
- client=supabase,
43
- table_name="documents",
44
- query_name="match_documents",
45
  )
46
 
47
- print("Загрузка успешно завершена!")
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
  if __name__ == "__main__":
50
  load_book_to_supabase()
 
1
  import os
2
+ import sys
3
  from langchain_community.document_loaders import TextLoader
 
4
  from langchain_google_genai import GoogleGenerativeAIEmbeddings
5
+ from langchain_text_splitters import CharacterTextSplitter
6
  from langchain_community.vectorstores import SupabaseVectorStore
7
  from supabase.client import create_client
8
 
 
 
 
9
  def load_book_to_supabase():
10
+ # Проверка переменных окружения
11
  supabase_url = os.environ.get("SUPABASE_URL")
12
  supabase_key = os.environ.get("SUPABASE_SERVICE_ROLE_KEY")
13
+ gemini_api_key = os.environ.get("GEMINI_API_KEY")
14
 
15
+ if not all([supabase_url, supabase_key, gemini_api_key]):
16
+ print("ОШИБКА: Не все секреты (URL, Key, Gemini) заполнены в GitHub Secrets!")
17
+ sys.exit(1)
 
 
18
 
19
+ print("--- Шаг 1: Подключение к Supabase ---")
20
+ supabase = create_client(supabase_url, supabase_key)
 
21
 
22
+ print("--- Шаг 2: Загрузка файла книги ---")
23
+ try:
24
+ # Убедись, что файл book.txt лежит в корне репозитория
25
+ loader = TextLoader("book.txt", encoding="utf-8")
26
+ documents = loader.load()
27
+ except Exception as e:
28
+ print(f"ОШИБКА при чтении book.txt: {e}")
29
+ sys.exit(1)
30
+
31
+ print("--- Шаг 3: Нарезка текста на части ---")
32
+ text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
33
  docs = text_splitter.split_documents(documents)
34
+ print(f"Текст нарезан на {len(docs)} фрагментов.")
35
 
36
+ print("--- Шаг 4: Инициализация эмбеддингов Gemini ---")
37
+ # Используем актуальный формат вызова для text-embedding-004
38
+ embeddings = GoogleGenerativeAIEmbeddings(
39
+ model="text-embedding-004",
40
+ task_type="retrieval_document",
41
+ google_api_key=gemini_api_key
 
 
 
42
  )
43
 
44
+ print("--- Шаг 5: Генерация векторов и загрузка в базу ---")
45
+ try:
46
+ SupabaseVectorStore.from_documents(
47
+ docs,
48
+ embeddings,
49
+ client=supabase,
50
+ table_name="documents",
51
+ query_name="match_documents",
52
+ )
53
+ print("--- УСПЕХ: Книга успешно загружена в Supabase! ---")
54
+ except Exception as e:
55
+ print(f"ОШИБКА при загрузке в Supabase: {e}")
56
+ sys.exit(1)
57
 
58
  if __name__ == "__main__":
59
  load_book_to_supabase()