Skip to main content

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

Project description

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

The open-source, local-first alternative to LangSmith.

PyPI Python License Downloads Stars CI

opensmith

The open-source, local-first alternative to LangSmith.

opensmith is to LangSmith what Ollama is to OpenAI — the local-first, privacy-first alternative.

Why opensmith?

LangSmith opensmith
Setup Cloud account required pip install opensmith
Data privacy Sends traces to cloud 100% local, SQLite only
Framework Best with LangChain Works with any Python code
Cost Free tier then paid Free forever, open source
Offline No Yes
Docker No No
Dashboard Hosted localhost:7823

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

Optional integrations:

pip install "opensmith[otel]"
pip install "opensmith[postgres]"
pip install "opensmith[all]"

Use opensmith[all] to install both OpenTelemetry and Postgres support.

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 export Export traces to JSON or CSV.
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().

Use Postgres instead by installing opensmith[postgres] and setting OPENSMITH_DB_URL:

export OPENSMITH_DB_URL="postgresql://user:pass@localhost:5432/opensmith"

Install both Postgres and OpenTelemetry support with pip install "opensmith[all]".

Export

Export traces with nested steps as JSON:

opensmith export --format json --output traces.json

Export a flat trace list as CSV:

opensmith export --format csv --output traces.csv

OpenTelemetry

OpenTelemetry export is disabled by default. Install the optional dependencies and set OPENSMITH_OTEL_ENDPOINT to enable OTLP HTTP export:

pip install "opensmith[otel]"
export OPENSMITH_OTEL_ENDPOINT="http://localhost:4318"

opensmith sends traces to /v1/traces and metrics to /v1/metrics under that endpoint.

Star History

Star History Chart

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.4.tar.gz (82.9 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.4-py3-none-any.whl (26.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: opensmith-0.1.4.tar.gz
  • Upload date:
  • Size: 82.9 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.4.tar.gz
Algorithm Hash digest
SHA256 85db3ca44ade043eafb6f9bb7004a7ef0141247202247e8cf5905c1c8abc16e2
MD5 0a04a543d4030b7a16cc1739b71cc524
BLAKE2b-256 f438fb1fa15e8ef1b989b886f12c776f7976c4d4541ef109dc5868a7ab172644

See more details on using hashes here.

File details

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

File metadata

  • Download URL: opensmith-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 26.7 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 725b880ae9aeb64a963b92a74df3ac5fed78284324c272f378d53cc5c676077f
MD5 f3cec2010b098ce93d4dc6920e9a0f12
BLAKE2b-256 b1644e907b31fc2c9afc0450daf791e5ded00d5e049d3d41760f73db25df0604

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