Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 0 additions & 192 deletions backends/advanced/docker-compose-ci.yml

This file was deleted.

1 change: 1 addition & 0 deletions backends/advanced/docker-compose-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ services:
# Import API keys from environment
- DEEPGRAM_API_KEY=${DEEPGRAM_API_KEY}
- OPENAI_API_KEY=${OPENAI_API_KEY}
- OPENAI_BASE_URL=https://api.openai.com/v1
# LLM provider configuration (required for memory service)
- LLM_PROVIDER=${LLM_PROVIDER:-openai}
- OPENAI_MODEL=${OPENAI_MODEL:-gpt-4o-mini}
Expand Down
3 changes: 2 additions & 1 deletion backends/advanced/src/advanced_omi_backend/app_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ class AppConfig:
def __init__(self):
# MongoDB Configuration
self.mongodb_uri = os.getenv("MONGODB_URI", "mongodb://mongo:27017")
self.mongodb_database = os.getenv("MONGODB_DATABASE", "friend-lite")
self.mongo_client = AsyncIOMotorClient(self.mongodb_uri)
self.db = self.mongo_client.get_default_database("friend-lite")
self.db = self.mongo_client.get_default_database(self.mongodb_database)
self.users_col = self.db["users"]
self.speakers_col = self.db["speakers"]

Expand Down
4 changes: 3 additions & 1 deletion backends/advanced/src/advanced_omi_backend/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

# MongoDB Configuration
MONGODB_URI = os.getenv("MONGODB_URI", "mongodb://mongo:27017")
MONGODB_DATABASE = os.getenv("MONGODB_DATABASE", "friend-lite")

mongo_client = AsyncIOMotorClient(
MONGODB_URI,
maxPoolSize=50, # Increased pool size for concurrent operations
Expand All @@ -22,7 +24,7 @@
serverSelectionTimeoutMS=5000, # Fail fast if server unavailable
socketTimeoutMS=20000, # 20 second timeout for operations
)
db = mongo_client.get_default_database("friend-lite")
db = mongo_client.get_default_database(MONGODB_DATABASE)

# Collection references (for non-Beanie collections)
users_col = db["users"]
Expand Down
5 changes: 3 additions & 2 deletions backends/advanced/src/advanced_omi_backend/models/job.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,12 @@ async def _ensure_beanie_initialized():
mongodb_uri = os.getenv("MONGODB_URI", "mongodb://localhost:27017")

# Create MongoDB client
mongodb_database = os.getenv("MONGODB_DATABASE", "friend-lite")
client = AsyncIOMotorClient(mongodb_uri)
try:
database = client.get_default_database("friend-lite")
database = client.get_default_database(mongodb_database)
except ConfigurationError:
database = client["friend-lite"]
database = client[mongodb_database]
raise
_beanie_initialized = True
# Initialize Beanie
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,20 +111,28 @@ async def add_memories(self, text: str) -> List[str]:

# Use REST API endpoint for creating memories
# The 'app' field can be either app name (string) or app UUID
payload = {
"user_id": self.user_id,
"text": text,
"app": self.client_name, # Use app name (OpenMemory accepts name or UUID)
"metadata": {
"source": "friend_lite",
"client": self.client_name,
"user_email": self.user_email
},
"infer": True
}

memory_logger.info(f"POSTing memory to {self.server_url}/api/v1/memories/ with payload={payload}")

response = await self.client.post(
f"{self.server_url}/api/v1/memories/",
json={
"user_id": self.user_id,
"text": text,
"app": self.client_name, # Use app name (OpenMemory accepts name or UUID)
"metadata": {
"source": "friend_lite",
"client": self.client_name,
"user_email": self.user_email
},
"infer": True
}
json=payload
)

response_body = response.text[:500] if response.status_code != 200 else "..."
memory_logger.info(f"OpenMemory response: status={response.status_code}, body={response_body}, headers={dict(response.headers)}")

response.raise_for_status()

result = response.json()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,18 +142,21 @@ async def add_memory(
memory_logger.info(f"Skipping empty transcript for {source_id}")
return True, []

# Update MCP client user context for this operation
# Pass Friend-Lite user details to OpenMemory for proper user tracking
# OpenMemory will auto-create users if they don't exist
original_user_id = self.mcp_client.user_id
original_user_email = self.mcp_client.user_email
self.mcp_client.user_id = user_id # Use the actual Friend-Lite user's ID
self.mcp_client.user_email = user_email # Use the actual user's email

# Update MCP client with Friend-Lite user details
self.mcp_client.user_id = user_id
self.mcp_client.user_email = user_email

try:
# Thin client approach: Send raw transcript to OpenMemory MCP server
# OpenMemory handles: extraction, deduplication, vector storage, ACL
enriched_transcript = f"[Source: {source_id}, Client: {client_id}] {transcript}"

memory_logger.info(f"Delegating memory processing to OpenMemory MCP for user {user_id}, source {source_id}")
memory_logger.info(f"Delegating memory processing to OpenMemory for user {user_id} (email: {user_email}), source {source_id}")
memory_ids = await self.mcp_client.add_memories(text=enriched_transcript)

finally:
Expand Down Expand Up @@ -204,9 +207,9 @@ async def search_memories(
if not self._initialized:
await self.initialize()

# Update MCP client user context for this operation
# Update MCP client user context for this search operation
original_user_id = self.mcp_client.user_id
self.mcp_client.user_id = user_id # Use the actual Friend-Lite user's ID
self.mcp_client.user_id = user_id

try:
results = await self.mcp_client.search_memory(
Expand All @@ -231,7 +234,7 @@ async def search_memories(
memory_logger.error(f"Search memories failed: {e}")
return []
finally:
# Restore original user_id
# Restore original user context
self.mcp_client.user_id = original_user_id

async def get_all_memories(
Expand Down
7 changes: 5 additions & 2 deletions backends/advanced/webui/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,15 @@ import { ErrorBoundary, PageErrorBoundary } from './components/ErrorBoundary'

function App() {
console.log('🚀 Full App restored with working login!')


// Get base path from Vite config (e.g., "/prod/" for path-based routing)
const basename = import.meta.env.BASE_URL

return (
<ErrorBoundary>
<ThemeProvider>
<AuthProvider>
<Router future={{ v7_startTransition: true, v7_relativeSplatPath: true }}>
<Router basename={basename} future={{ v7_startTransition: true, v7_relativeSplatPath: true }}>
<Routes>
<Route path="/login" element={<LoginPage />} />
<Route path="/" element={
Expand Down
Loading
Loading