GuidesExample: Langfuse Decorator + OpenAI Integration + Langchain Integration
This is a Jupyter notebook

Example: Langfuse Decorator + OpenAI Integration + Langchain Integration

%pip install langfuse openai langchain_openai langchain --upgrade
import 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 observe
from langfuse import observe, get_client, propagate_attributes
langfuse = get_client()

# import openai
from langfuse.openai import openai

Example: 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 summary
rap_summary = rap_battle(turns=4)
print("\nSummary: " + rap_summary)

Was this page helpful?