|
from .supabase_db import SupabaseClient |
|
from .llm import create_llm_client |
|
from .reranker import Reranker |
|
from .embedding import EmbeddingClient |
|
from .facebook import FacebookClient |
|
from .config import get_settings |
|
from .sheets import SheetsClient |
|
from app.message_processor import MessageProcessor |
|
from typing import Optional |
|
|
|
class ChatChannel: |
|
def __init__(self, page_id: str, channel_type: str = "facebook"): |
|
self.channel_type = channel_type |
|
self.page_id = page_id |
|
self.page_token = None |
|
settings = get_settings() |
|
self.supabase = SupabaseClient(settings.supabase_url, settings.supabase_key) |
|
self.sheets = SheetsClient( |
|
settings.google_sheets_credentials_file, |
|
settings.google_sheets_token_file, |
|
settings.conversation_sheet_id |
|
) |
|
self.llm = create_llm_client( |
|
provider="gemini", |
|
base_url=settings.gemini_base_url, |
|
model=settings.gemini_models_list[0] if settings.gemini_models_list else "gemini-2.5-flash" |
|
) |
|
self.reranker = Reranker() |
|
self.embedder = EmbeddingClient() |
|
self.conversations = {} |
|
|
|
def get_page_token(self, force_refresh=False): |
|
if self.page_token is None or force_refresh: |
|
self.page_token = self.supabase.get_page_token(self.page_id) |
|
return self.page_token |
|
|
|
def invalidate_page_token(self): |
|
self.page_token = None |
|
|
|
def get_sheets_client(self): |
|
settings = get_settings() |
|
return SheetsClient( |
|
settings.google_sheets_credentials_file, |
|
settings.google_sheets_token_file, |
|
settings.conversation_sheet_id |
|
) |
|
|
|
def get_or_create_conversation(self, sender_id: str): |
|
if sender_id not in self.conversations: |
|
self.conversations[sender_id] = MessageProcessor(self, sender_id) |
|
return self.conversations[sender_id] |