Skip to content

Commit 05d54fb

Browse files
authored
Ap 693: Add the updated Callbackhandler (#67)
1 parent 5bda2d4 commit 05d54fb

3 files changed

Lines changed: 32 additions & 3 deletions

File tree

mokelumne/util/image_describer.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from botocore.exceptions import ClientError
99
from langchain_core.messages import HumanMessage, SystemMessage
10-
from langfuse.langchain import CallbackHandler
10+
from mokelumne.util import langfuse
1111

1212

1313
logger = logging.getLogger(__name__)
@@ -17,11 +17,13 @@
1717
class ImageDescriber:
1818
"""Generates a description of a given image using a large language model."""
1919

20-
def __init__(self, model, prompt: str):
20+
def __init__(self, model, prompt: str, conn_id: str = 'langfuse_default'):
2121
"""Initialise an image describer with a given model and prompt."""
22+
2223
self.model = model
2324
self.prompt = prompt
24-
self.langfuse_handler = CallbackHandler()
25+
self.conn_id = conn_id
26+
self.langfuse_handler = langfuse.get_langfuse_callback_handler(self.conn_id)
2527
self.sys_msg = SystemMessage(prompt)
2628

2729
def describe(self, record: dict[str, str]) -> dict[str, str]:

mokelumne/util/langfuse.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from airflow.sdk import BaseHook
1010
from langfuse import Langfuse
11+
from langfuse.langchain import CallbackHandler
1112

1213
Prompt = namedtuple('Prompt', ['prompt', 'version'])
1314
Prompt.__doc__ += ': Contains a LLM prompt for generating image descriptions.'
@@ -31,6 +32,12 @@ def _get_langfuse_connection_settings(conn_id: str) -> tuple[str, str, str]:
3132
)
3233
return base_url, public_key, secret_key
3334

35+
def get_langfuse_callback_handler(conn_id: str) -> CallbackHandler:
36+
"""Return a LangChain CallbackHandler configured from the given Airflow connection."""
37+
get_langfuse_client(conn_id)
38+
_, public_key, _ = _get_langfuse_connection_settings(conn_id)
39+
return CallbackHandler(public_key=public_key)
40+
3441
def get_langfuse_client(conn_id: str) -> Langfuse:
3542
"""Return a Langfuse client configured from the ``langfuse_default`` Airflow connection."""
3643
base_url, public_key, secret_key = _get_langfuse_connection_settings(conn_id)

test/unit/test_langfuse.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,26 @@ def test_passes_release_and_environment(self, monkeypatch):
124124
assert 'release' in call_kwargs
125125

126126

127+
@pytest.mark.usefixtures("mock_conn_settings")
128+
class TestGetLangfuseCallbackHandler:
129+
"""Tests for get_langfuse_callback_handler."""
130+
131+
def test_callback_handler_uses_given_conn_id(self, monkeypatch):
132+
"""Ensure callback handler setup forwards custom conn_id."""
133+
callback_handler_cls = Mock(return_value=Mock())
134+
get_client = Mock(return_value=Mock())
135+
get_conn_settings = Mock(return_value=FAKE_CONN_SETTINGS)
136+
137+
monkeypatch.setattr(langfuse, 'CallbackHandler', callback_handler_cls)
138+
monkeypatch.setattr(langfuse, 'get_langfuse_client', get_client)
139+
monkeypatch.setattr(langfuse, '_get_langfuse_connection_settings', get_conn_settings)
140+
141+
langfuse.get_langfuse_callback_handler('langfuse_custom')
142+
143+
get_client.assert_called_once_with('langfuse_custom')
144+
get_conn_settings.assert_called_once_with('langfuse_custom')
145+
146+
127147
@pytest.mark.usefixtures("mock_conn_settings")
128148
class TestGetPrompt:
129149
"""Tests for get_prompt."""

0 commit comments

Comments
 (0)