Example: Langfuse Decorator + OpenAI Integration + Langchain Integration
%pip install langfuse openai langchain_openai langchain --upgradeimport os
# Get keys for your project from the project settings page: https://cloud.langfuse.com
os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-lf-..."
os.environ["LANGFUSE_SECRET_KEY"] = "sk-lf-..."
os.environ["LANGFUSE_BASE_URL"] = "https://cloud.langfuse.com" # πͺπΊ EU region
# os.environ["LANGFUSE_BASE_URL"] = "https://us.cloud.langfuse.com" # πΊπΈ US region
# Your openai key
os.environ["OPENAI_API_KEY"] = "sk-proj-..."Imports
import random
from operator import itemgetter
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser
from langfuse import observefrom langfuse import observe, get_client, propagate_attributes
langfuse = get_client()
# import openai
from langfuse.openai import openaiExample: LLM Rap Battle
@observe()
def get_random_rap_topic():
topics = [
"OSS software",
"artificial general intelligence"
]
return random.choice(topics)from langfuse.langchain import CallbackHandler
@observe()
def summarize_rap_langchain(rap):
# Initialize the Langfuse handler
langfuse_handler = CallbackHandler()
# Create chain
prompt = ChatPromptTemplate.from_template("Summarrize this rap: {rap}")
model = ChatOpenAI()
chain = prompt | model | StrOutputParser()
# Pass handler to invoke
summary = chain.invoke(
{"rap": rap},
config={"callbacks":[langfuse_handler]}
)
return summary@observe()
def rap_battle(turns: int = 5):
topic = get_random_rap_topic()
print(f"Topic: {topic}")
# Propagate attributes to all child observations
with propagate_attributes(
metadata={"topic":topic},
tags=["Launch Week 1"]
):
messages = [
{"role": "system", "content": "We are all rap artist. When it is our turn, we drop a fresh line."},
{"role": "user", "content": f"Kick it off, today's topic is {topic}, here's the mic..."}
]
for turn in range(turns):
completion = openai.chat.completions.create(
model="gpt-4o",
messages=messages,
)
rap_line = completion.choices[0].message.content
messages.append({"role": "assistant", "content": rap_line})
print(f"\nRap {turn}: {rap_line}")
summary = summarize_rap_langchain([message['content'] for message in messages])
return summaryrap_summary = rap_battle(turns=4)
print("\nSummary: " + rap_summary)Was this page helpful?