from dataclasses import dataclass
from typing import TYPE_CHECKING
from pydantic import BaseModel
from core.providers import (
AnthropicCompletionProvider,
AsyncSMTPEmailProvider,
ClerkAuthProvider,
ConsoleMockEmailProvider,
HatchetOrchestrationProvider,
JwtAuthProvider,
LiteLLMCompletionProvider,
LiteLLMEmbeddingProvider,
MailerSendEmailProvider,
OllamaEmbeddingProvider,
OpenAICompletionProvider,
OpenAIEmbeddingProvider,
PostgresDatabaseProvider,
R2RAuthProvider,
R2RCompletionProvider,
R2RIngestionProvider,
SendGridEmailProvider,
SimpleOrchestrationProvider,
SupabaseAuthProvider,
UnstructuredIngestionProvider,
)
if TYPE_CHECKING:
from core.main.services.auth_service import AuthService
from core.main.services.graph_service import GraphService
from core.main.services.ingestion_service import IngestionService
from core.main.services.management_service import ManagementService
from core.main.services.retrieval_service import ( # type: ignore
RetrievalService, # type: ignore
)
class R2RProviders(BaseModel):
auth: (
R2RAuthProvider
| SupabaseAuthProvider
| JwtAuthProvider
| ClerkAuthProvider
)
database: PostgresDatabaseProvider
ingestion: R2RIngestionProvider | UnstructuredIngestionProvider
embedding: (
LiteLLMEmbeddingProvider
| OpenAIEmbeddingProvider
| OllamaEmbeddingProvider
)
completion_embedding: (
LiteLLMEmbeddingProvider
| OpenAIEmbeddingProvider
| OllamaEmbeddingProvider
)
llm: (
AnthropicCompletionProvider
| LiteLLMCompletionProvider
| OpenAICompletionProvider
| R2RCompletionProvider
)
orchestration: HatchetOrchestrationProvider | SimpleOrchestrationProvider
email: (
AsyncSMTPEmailProvider
| ConsoleMockEmailProvider
| SendGridEmailProvider
| MailerSendEmailProvider
)
class Config:
arbitrary_types_allowed = True
@dataclass
class R2RServices:
auth: "AuthService"
ingestion: "IngestionService"
management: "ManagementService"
retrieval: "RetrievalService"
graph: "GraphService"