Skip to main content

Local-first LLM pipeline tracer. No cloud. No setup.

Project description

 ██████  ██████  ███████ ███    ██ ███████ ███    ███ ██ ████████ ██   ██ 
██    ██ ██   ██ ██      ████   ██ ██      ████  ████ ██    ██    ██   ██ 
██    ██ ██████  █████   ██ ██  ██ ███████ ██ ████ ██ ██    ██    ███████ 
██    ██ ██      ██      ██  ██ ██      ██ ██  ██  ██ ██    ██    ██   ██ 
 ██████  ██      ███████ ██   ████ ███████ ██      ██ ██    ██    ██   ██ 

Local-first LLM pipeline tracer. No cloud. No setup.

PyPI Python License Downloads Stars CI

opensmith

Local-first LLM pipeline tracer. No cloud. No setup.

Why opensmith

LangSmith is powerful, but it is built around cloud-hosted tracing and is most natural inside the LangChain ecosystem. opensmith is a local-first alternative: install it with pip, use it with any Python LLM pipeline, and inspect traces on your machine without accounts, hosted services, Docker, or configuration. No trace data leaves your machine.

Install

pip install opensmith

Quickstart

Example 1: @trace decorator

from opensmith import trace


@trace
def call_llm(prompt: str):
    return openai.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
    )


@trace
def my_pipeline(question: str):
    # search_docs is your own retrieval function
    docs = search_docs(question)
    return call_llm(docs + question)

Async functions are supported:

from opensmith import trace


@trace(tags=["production", "rag"])
async def call_llm(prompt: str):
    return await openai.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
    )

Example 2: context manager

from opensmith import trace


with trace("my_pipeline", tags=["debug"]) as t:
    t.log("query", query)
    response = openai.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": query}],
    )
    t.log("response", response)

Example 3: autopatch() zero code changes

from opensmith import autopatch


autopatch()

Patch only selected backends:

from opensmith import autopatch


autopatch(only=["openai"])

Patch everything except selected backends:

from opensmith import autopatch


autopatch(exclude=["chromadb"])

Console mode

Print trace results to the terminal as they complete:

from opensmith import set_console_mode, trace


set_console_mode(True)


@trace
def my_func():
    return "ok"

Configuration

opensmith reads opensmith.json from the current working directory on import:

{
  "db_path": "./my_traces.db",
  "console_mode": false,
  "autopatch": ["openai", "qdrant"]
}

Dashboard

opensmith ui

Open http://localhost:7823.

dashboard

CLI reference

Command Description
opensmith ui Start the local dashboard at localhost:7823.
opensmith traces List recent traces in the terminal.
opensmith stats Show aggregate trace, step, token, and cost statistics.
opensmith clear Delete all locally stored traces after confirmation.

Supported backends

Backend Package Status
openai openai
anthropic anthropic
litellm litellm
qdrant qdrant-client
chromadb chromadb
pinecone pinecone-client

Storage

Traces are stored locally at ~/.opensmith/traces.db unless overridden with opensmith.json or set_default_db_path().

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opensmith-0.1.1.tar.gz (23.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opensmith-0.1.1-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file opensmith-0.1.1.tar.gz.

File metadata

  • Download URL: opensmith-0.1.1.tar.gz
  • Upload date:
  • Size: 23.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.4

File hashes

Hashes for opensmith-0.1.1.tar.gz
Algorithm Hash digest
SHA256 0371353bbbf5da816e08295cadd97ed13ec16872a4f5866aa419afb118309875
MD5 d897185644ca064c0a7459ccd4f989e1
BLAKE2b-256 c2b40e9ada3ea7f1982f28d58d55edf628b0d97a112455defacbd2d8b4ea4c0a

See more details on using hashes here.

File details

Details for the file opensmith-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: opensmith-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 18.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.4

File hashes

Hashes for opensmith-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1270313092a9acb40949c44c6c656205bd3ee32408113db1a4270982d5656b88
MD5 fe96be0e5ecdda43df2b6048e8050c58
BLAKE2b-256 c4c287853c1e13ee7875ff89908b089271e6be6ff1aea85e55d7182b3e777d8b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page