Logging
Log10 makes it easy to "log" LLM request and responses for tracing, debugging and evaluation.
Configuration
To turn on logging for a python process, start by setting the following environment variables:
export LOG10_URL=https://log10.io
export LOG10_ORG_ID=... # Find your organization id in the organization settings in your log10.io account.
export LOG10_TOKEN=... # Create or locate an API key in the personal settings in your log10.io account.
Library wrapping
We support OpenAI, Anthropic, Google-Gemini, Mistral, and Lamini via patching their Python SDK. For instance, the simplest way to start logging openai can be done like this:
import openai
from log10.load import log10
log10(openai)
This works for both openai v0 and v1.
For openai v1 only, the logging can be done like this:
from log10.load import OpenAI
# from openai import OpenAI
client = OpenAI()
completion = client.completions.create(model='curie', prompt="Once upon a time")
# All completions.create and chat.completions.create calls will be logged
From that point on, all openai calls during the process execution will be logged. Please note that this only works for non-streaming calls at this time.
Anthropic calls can be logged like so:
import os
from log10.load import log10
import anthropic
import os
log10(anthropic)
anthropicClient = anthropic.Anthropic()
Sessions
To aid debugging across chains and tools, log10 creates a session id when the library is loaded.
To create several sessions within the same process, you can use the log10_session
context like this:
from log10.load import log10, log10_session
import openai
log10(openai)
with log10_session():
# Will log in session 1
with log10_session():
# Will log in session 2
Log10 LLM Abstraction
Import Log10 LLM abstraction modules to call closed and open-source LLMs, such as OpenAI, Anthropic, and Llama-2 Inference endpoints on MosaicML and Together.
Create a log10 configuration object to log on Log10 platform.
Setting log10_config
is optional.
from log10.llm import Log10Config
OpenAI
from log10.openai import OpenAI
llm = OpenAI({"model": "gpt-3.5-turbo"}, log10_config=Log10Config())
Full script here.
Anthropic
from log10.anthropic import Anthropic
llm = Anthropic({"model": "claude-2"}, log10_config=Log10Config())
Full script here.
MosaicML
from log10.mosaicml import MosaicML
llm = MosaicML({"model": "llama2-70b-chat/v1"}, log10_config=Log10Config())
Full script here.
Find all the supported models on MosaicML website (opens in a new tab).
Together
from log10.together import Together
llm = Together({"model": "togethercomputer/llama-2-70b-chat"}, log10_config=Log10Config())
Full script here.
Find all the supported models on Together website (opens in a new tab).
Tags
One useful way to organize your LLM logs is using tags. Tags are strings which can be used to filter and select logs in log10.io (opens in a new tab). See here (opens in a new tab) for more information about tags.
You can add tags using the session scope:
import os
from log10.load import log10, log10_session
import openai
from langchain import OpenAI
log10(openai)
with log10_session(tags=["foo", "bar"]):
response = openai.Completion.create(
model="gpt-3.5-turbo-instruct",
prompt="Where is the Eiffel Tower?",
temperature=0,
max_tokens=1024,
top_p=1,
frequency_penalty=0,
presence_penalty=0,
)
print(response)
An addition way to add tag with openai v1 API:
from log10.load import OpenAI
client = OpenAI(tags=["foo"])
LangChain logger
If you want to use LLMs which are not natively supported by log10 yet, you can use the log10 logger / callback with langchain's llm abstraction:
from langchain import OpenAI
from langchain.chat_models import ChatAnthropic
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
from log10.langchain import Log10Callback
from log10.llm import Log10Config
log10_callback = Log10Callback(log10_config=Log10Config())
messages = [
HumanMessage(content="You are a ping pong machine"),
HumanMessage(content="Ping?"),
]
llm = ChatOpenAI(model_name="gpt-3.5-turbo", callbacks=[log10_callback], temperature=0.5, tags=["test"])
completion = llm.predict_messages(messages, tags=["foobar"])
print(completion)
llm = ChatAnthropic(model="claude-2", callbacks=[log10_callback], temperature=0.7, tags=["baz"])
llm.predict_messages(messages)
print(completion)
llm = OpenAI(model_name="gpt-3.5-turbo-instruct", callbacks=[log10_callback], temperature=0.5)
completion = llm.predict("You are a ping pong machine.\nPing?\n")
print(completion)
Note that both llm scoped, and individual call's tags are supported.