6
6
from contextlib import asynccontextmanager
7
7
from contextvars import ContextVar
8
8
from typing import TYPE_CHECKING , Any
9
+ from uuid import UUID
9
10
10
11
from loguru import logger
11
12
12
13
from langflow .services .base import Service
14
+ from langflow .services .deps import get_variable_service
13
15
14
16
if TYPE_CHECKING :
15
- from uuid import UUID
16
-
17
17
from langchain .callbacks .base import BaseCallbackHandler
18
+ from sqlmodel .ext .asyncio .session import AsyncSession
18
19
19
20
from langflow .custom .custom_component .component import Component
20
21
from langflow .graph .vertex .base import Vertex
@@ -162,13 +163,19 @@ def _initialize_langwatch_tracer(self, trace_context: TraceContext) -> None:
162
163
trace_id = trace_context .run_id ,
163
164
)
164
165
165
- def _initialize_langfuse_tracer (self , trace_context : TraceContext ) -> None :
166
+ async def _initialize_langfuse_tracer (self , trace_context : TraceContext , session : AsyncSession ) -> None :
166
167
langfuse_tracer = _get_langfuse_tracer ()
168
+ variable_names = langfuse_tracer .get_required_variable_names ()
169
+ variables = await self .get_varaibles_from_db (session , trace_context .user_id , variable_names )
170
+
167
171
trace_context .tracers ["langfuse" ] = langfuse_tracer (
168
172
trace_name = trace_context .run_name ,
169
173
trace_type = "chain" ,
170
174
project_name = trace_context .project_name ,
171
175
trace_id = trace_context .run_id ,
176
+ public_key = variables .get ("LANGFUSE_PUBLIC_KEY" ),
177
+ secret_key = variables .get ("LANGFUSE_SECRET_KEY" ),
178
+ host = variables .get ("LANGFUSE_HOST" ),
172
179
user_id = trace_context .user_id ,
173
180
session_id = trace_context .session_id ,
174
181
)
@@ -193,8 +200,17 @@ def _initialize_opik_tracer(self, trace_context: TraceContext) -> None:
193
200
session_id = trace_context .session_id ,
194
201
)
195
202
203
+ async def get_varaibles_from_db (self , session , user_id , variable_names ):
204
+ variable_service = get_variable_service ()
205
+ result = {}
206
+ for var in await variable_service .get_all (UUID (user_id ), session ):
207
+ if var .name in variable_names :
208
+ result [var .name ] = await variable_service .get_variable (UUID (user_id ), var .name , "" , session )
209
+ return result
210
+
196
211
async def start_tracers (
197
212
self ,
213
+ session : AsyncSession ,
198
214
run_id : UUID ,
199
215
run_name : str ,
200
216
user_id : str | None ,
@@ -213,11 +229,17 @@ async def start_tracers(
213
229
project_name = project_name or os .getenv ("LANGCHAIN_PROJECT" , "Langflow" )
214
230
trace_context = TraceContext (run_id , run_name , project_name , user_id , session_id )
215
231
trace_context_var .set (trace_context )
216
- await self ._start (trace_context )
232
+
233
+ await self ._start (trace_context , session , user_id )
234
+
217
235
self ._initialize_langsmith_tracer (trace_context )
236
+
218
237
self ._initialize_langwatch_tracer (trace_context )
219
- self ._initialize_langfuse_tracer (trace_context )
238
+
239
+ await self ._initialize_langfuse_tracer (trace_context , session )
240
+
220
241
self ._initialize_arize_phoenix_tracer (trace_context )
242
+
221
243
self ._initialize_opik_tracer (trace_context )
222
244
except Exception as e : # noqa: BLE001
223
245
logger .debug (f"Error initializing tracers: { e } " )
0 commit comments