File size: 2,256 Bytes
3ff7a16
76d7dae
 
4dfc186
3ff7a16
4dfc186
 
 
f1b21ad
3ff7a16
4dfc186
 
 
 
 
 
3ff7a16
b6a7e53
 
76d7dae
 
b6a7e53
 
 
 
96ff3ae
b6a7e53
 
 
76d7dae
4dfc186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import os
from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver
from psycopg_pool import AsyncConnectionPool
from sqlalchemy import create_engine

# ==========================================
# 1. СУБД ДЛЯ ПАМЯТИ АГЕНТА (LangGraph)
# ==========================================
DB_URI = os.getenv("SUPABASE_URL")

pool = AsyncConnectionPool(
    conninfo=DB_URI, 
    max_size=20, 
    kwargs={"autocommit": True, "prepare_threshold": None}, 
    open=False
)

# Инициализируется позже внутри async-контекста
checkpointer: AsyncPostgresSaver | None = None

async def init_storage():
    global checkpointer
    if checkpointer is not None:
        return
    # 1. Запускаем пул — event loop уже работает
    await pool.open()
    # 2. Создаём checkpointer внутри async-контекста
    checkpointer = AsyncPostgresSaver(pool)
    # 3. Создаем таблицы
    await checkpointer.setup()
    print("✅ Асинхронное хранилище контекста в Supabase готово.")


# ==========================================
# 2. СУБД ДЛЯ БИЗНЕС-ДАННЫХ WB (Инструменты)
# ==========================================
# Добавь эту переменную в секреты (даже если она совпадает с SUPABASE_URL)
ANALYTICS_DB_URL = os.getenv("ANALYTICS_DB_URL") 

# Создаем синхронный движок для pandas.read_sql
if ANALYTICS_DB_URL:
    # URL для SQLAlchemy обычно должен начинаться с postgresql:// 
    # Если в секретах postgres://, SQLAlchemy может ругаться, так что подстрахуемся:
    if ANALYTICS_DB_URL.startswith("postgres://"):
        ANALYTICS_DB_URL = ANALYTICS_DB_URL.replace("postgres://", "postgresql://", 1)
        
    engine = create_engine(ANALYTICS_DB_URL)
    print("✅ Подключение к аналитической БД инициализировано.")
else:
    engine = None
    print("⚠️ ВНИМАНИЕ: Переменная ANALYTICS_DB_URL не найдена. Инструменты аналитики не сработают!")