langsmith

Client library to connect to the LangSmith Observability and Evaluation Platform.

MIT 494 个版本 Python >=3.10
安装
pip install langsmith
poetry add langsmith
pipenv install langsmith
conda install langsmith
描述

LangSmith Client SDK

Release Notes Python Downloads

This package contains the Python client for interacting with the LangSmith platform.

To install:

pip install -U langsmith
export LANGSMITH_TRACING=true
export LANGSMITH_API_KEY=ls_...

Then trace:

import openai
from langsmith.wrappers import wrap_openai
from langsmith import traceable

# Auto-trace LLM calls in-context
client = wrap_openai(openai.Client())

@traceable # Auto-trace this function
def pipeline(user_input: str):
    result = client.chat.completions.create(
        messages=[{"role": "user", "content": user_input}],
        model="gpt-3.5-turbo"
    )
    return result.choices[0].message.content

pipeline("Hello, world!")

See the resulting nested trace 🌐 here.

LangSmith helps you and your team develop and evaluate language models and intelligent agents. It is compatible with any LLM application.

Cookbook: For tutorials on how to get more value out of LangSmith, check out the Langsmith Cookbook repo.

A typical workflow looks like:

  1. Set up an account with LangSmith.
  2. Log traces while debugging and prototyping.
  3. Run benchmark evaluations and continuously improve with the collected data.

We'll walk through these steps in more detail below.

Sandbox AWS Auth Proxy

When sandbox code needs to call AWS services, use the sandbox AWS auth proxy. The proxy keeps the real AWS credentials outside the sandbox and signs supported AWS HTTPS requests with SigV4, so code in the sandbox can use AWS SDKs normally without storing long-lived AWS keys in files, environment variables, shell history, or logs.

Store AWS credentials as LangSmith workspace secrets using names that make sense for your workspace. Then create the sandbox with an AWS auth proxy config:

from langsmith.sandbox import (
    SandboxClient,
    aws_auth,
    proxy_config,
    workspace_secret,
)

client = SandboxClient()
auth_config = proxy_config(
    rules=[
        aws_auth(
            access_key_id=workspace_secret("SANDBOX_AWS_ACCESS_KEY_ID"),
            secret_access_key=workspace_secret("SANDBOX_AWS_SECRET_ACCESS_KEY"),
        )
    ],
)

with client.sandbox(
    name="aws-sandbox",
    proxy_config=auth_config,
) as sandbox:
    result = sandbox.run("python your_aws_script.py")
    print(result.stdout)

Use opaque_secret("...") instead of workspace_secret(...) when your application needs to pass short-lived write-only AWS credentials at sandbox creation time. Plaintext AWS credential values are not accepted directly; wrap them as opaque_secret(...) values.

Sandbox GCP Auth Proxy

When sandbox code needs to call Google APIs, use the sandbox GCP auth proxy. The proxy keeps the service account JSON outside the sandbox and injects OAuth bearer tokens for Google API hosts matched automatically by the sandbox proxy.

Store the service account JSON as a LangSmith workspace secret. Then create the sandbox with a GCP auth proxy config:

from langsmith.sandbox import (
    SandboxClient,
    gcp_auth,
    proxy_config,
    workspace_secret,
)

client = SandboxClient()
auth_config = proxy_config(
    rules=[
        gcp_auth(
            service_account_json=workspace_secret(
                "SANDBOX_GCP_SERVICE_ACCOUNT_JSON"
            ),
            scopes=["https://www.googleapis.com/auth/devstorage.read_write"],
        )
    ],
)

with client.sandbox(
    name="gcp-sandbox",
    proxy_config=auth_config,
) as sandbox:
    result = sandbox.run("python your_gcp_script.py")
    print(result.stdout)

Use opaque_secret("...") for short-lived write-only service account JSON. Plaintext service account JSON is not accepted directly.

Sandbox Mounts

When you create a LangSmith sandbox that needs filesystem access to external data such as object storage buckets or public Git repositories, pass a mount_config on sandbox creation. Mount specs contain only the mount target. Provider credentials stay in mount_config.auth; the backend expands them into runtime proxy auth rules. You can also pass proxy_config for non-mount proxy behavior such as custom headers, callbacks, access control, and generic egress rules. Explicit AWS/GCP proxy auth rules conflict with mount_config auth for the same provider.

S3 mounts require AWS auth:

from langsmith.sandbox import (
    aws_auth,
    mount_config,
    s3_mount,
    workspace_secret,
)

mount_cfg = mount_config(
    auth=[
        aws_auth(
            access_key_id=workspace_secret("SANDBOX_AWS_ACCESS_KEY_ID"),
            secret_access_key=workspace_secret("SANDBOX_AWS_SECRET_ACCESS_KEY"),
        )
    ],
    mounts=[
        s3_mount(
            id="customer_data",
            mount_path="/mnt/mounts/customer-data",
            bucket="example-bucket",
            prefix="datasets/customer-data",
            region="us-east-1",
            endpoint_url="https://s3.amazonaws.com",
            path_style=False,
            read_only=False,
        )
    ],
)

with client.sandbox(
    name="s3-mount-sandbox",
    mount_config=mount_cfg,
) as sandbox:
    result = sandbox.run("ls /mnt/mounts/customer-data")
    print(result.stdout)

GCS mounts require GCP auth:

from langsmith.sandbox import (
    gcp_auth,
    gcs_mount,
    mount_config,
    workspace_secret,
)

mount_cfg = mount_config(
    auth=[
        gcp_auth(
            service_account_json=workspace_secret(
                "SANDBOX_GCP_SERVICE_ACCOUNT_JSON"
            )
        )
    ],
    mounts=[
        gcs_mount(
            id="customer_data",
            mount_path="/mnt/mounts/customer-data",
            bucket="example-bucket",
            prefix="datasets/customer-data",
        )
    ],
)

with client.sandbox(
    name="gcs-mount-sandbox",
    mount_config=mount_cfg,
) as sandbox:
    result = sandbox.run("ls /mnt/mounts/customer-data")
    print(result.stdout)

Public Git mounts do not require AWS or GCP auth:

from langsmith.sandbox import git_mount, mount_config

mount_cfg = mount_config(
    mounts=[
        git_mount(
            id="repo",
            mount_path="/mnt/repo",
            remote_url="https://github.com/langchain-ai/langsmith-sdk.git",
            ref={"type": "branch", "name": "main"},
            refresh_interval_seconds=60,
        )
    ],
)

with client.sandbox(
    name="git-mount-sandbox",
    mount_config=mount_cfg,
) as sandbox:
    result = sandbox.run("ls /mnt/repo")
    print(result.stdout)

Private Git repositories can use low-level proxy_config rules when the remote requires proxy-managed auth. There is not yet a high-level private Git auth helper.

1. Connect to LangSmith

Sign up for LangSmith using your GitHub, Discord accounts, or an email address and password. If you sign up with an email, make sure to verify your email address before logging in.

Then, create a unique API key on the Settings Page, which is found in the menu at the top right corner of the page.

[!NOTE] Save the API Key in a secure location. It will not be shown again.

2. Log Traces

You can log traces natively using the LangSmith SDK or within your LangChain application.

Logging Traces with LangChain

LangSmith seamlessly integrates with the Python LangChain library to record traces from your LLM applications.

  1. Copy the environment variables from the Settings Page and add them to your application.

Tracing can be activated by setting the following environment variables or by manually specifying the LangChainTracer.

import os
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_ENDPOINT"] = "https://api.smith.langchain.com"
# os.environ["LANGSMITH_ENDPOINT"] = "https://eu.api.smith.langchain.com" # If signed up in the EU region
os.environ["LANGSMITH_API_KEY"] = "<YOUR-LANGSMITH-API-KEY>"
# os.environ["LANGSMITH_PROJECT"] = "My Project Name" # Optional: "default" is used if not set
# os.environ["LANGSMITH_WORKSPACE_ID"] = "<YOUR-WORKSPACE-ID>" # Required for org-scoped API keys

Tip: Projects are groups of traces. All runs are logged to a project. If not specified, the project is set to default.

  1. Run an Agent, Chain, or Language Model in LangChain

If the environment variables are correctly set, your application will automatically connect to the LangSmith platform.

from langchain_core.runnables import chain

@chain
def add_val(x: dict) -> dict:
    return {"val": x["val"] + 1}

add_val({"val": 1})

Logging Traces Outside LangChain

You can still use the LangSmith development platform without depending on any LangChain code.

  1. Copy the environment variables from the Settings Page and add them to your application.
import os
os.environ["LANGSMITH_ENDPOINT"] = "https://api.smith.langchain.com"
os.environ["LANGSMITH_API_KEY"] = "<YOUR-LANGSMITH-API-KEY>"
# os.environ["LANGSMITH_PROJECT"] = "My Project Name" # Optional: "default" is used if not set
  1. Log traces

The easiest way to log traces using the SDK is via the @traceable decorator. Below is an example.

from datetime import datetime
from typing import List, Optional, Tuple

import openai
from langsmith import traceable
from langsmith.wrappers import wrap_openai

client = wrap_openai(openai.Client())

@traceable
def argument_generator(query: str, additional_description: str = "") -> str:
    return client.chat.completions.create(
        [
            {"role": "system", "content": "You are a debater making an argument on a topic."
             f"{additional_description}"
             f" The current time is {datetime.now()}"},
            {"role": "user", "content": f"The discussion topic is {query}"}
        ]
    ).choices[0].message.content



@traceable
def argument_chain(query: str, additional_description: str = "") -> str:
    argument = argument_generator(query, additional_description)
    # ... Do other processing or call other functions...
    return argument

argument_chain("Why is blue better than orange?")

Alternatively, you can manually log events using the Client directly or using a RunTree, which is what the traceable decorator is meant to manage for you!

A RunTree tracks your application. Each RunTree object is required to have a name and run_type. These and other important attributes are as follows:

  • name: str - used to identify the component's purpose
  • run_type: str - Currently one of "llm", "chain" or "tool"; more options will be added in the future
  • inputs: dict - the inputs to the component
  • outputs: Optional[dict] - the (optional) returned values from the component
  • error: Optional[str] - Any error messages that may have arisen during the call
from langsmith.run_trees import RunTree

parent_run = RunTree(
    name="My Chat Bot",
    run_type="chain",
    inputs={"text": "Summarize this morning's meetings."},
    # project_name= "Defaults to the LANGSMITH_PROJECT env var"
)
parent_run.post()
# .. My Chat Bot calls an LLM
child_llm_run = parent_run.create_child(
    name="My Proprietary LLM",
    run_type="llm",
    inputs={
        "prompts": [
            "You are an AI Assistant. The time is XYZ."
            " Summarize this morning's meetings."
        ]
    },
)
child_llm_run.post()
child_llm_run.end(
    outputs={
        "generations": [
            "I should use the transcript_loader tool"
            " to fetch meeting_transcripts from XYZ"
        ]
    }
)
child_llm_run.patch()
# ..  My Chat Bot takes the LLM output and calls
# a tool / function for fetching transcripts ..
child_tool_run = parent_run.create_child(
    name="transcript_loader",
    run_type="tool",
    inputs={"date": "XYZ", "content_type": "meeting_transcripts"},
)
child_tool_run.post()
# The tool returns meeting notes to the chat bot
child_tool_run.end(outputs={"meetings": ["Meeting1 notes.."]})
child_tool_run.patch()

child_chain_run = parent_run.create_child(
    name="Unreliable Component",
    run_type="tool",
    inputs={"input": "Summarize these notes..."},
)
child_chain_run.post()

try:
    # .... the component does work
    raise ValueError("Something went wrong")
    child_chain_run.end(outputs={"output": "foo"}
    child_chain_run.patch()
except Exception as e:
    child_chain_run.end(error=f"I errored again {e}")
    child_chain_run.patch()
    pass
# .. The chat agent recovers

parent_run.end(outputs={"output": ["The meeting notes are as follows:..."]})
res = parent_run.patch()
res.result()

Create a Dataset from Existing Runs

Once your runs are stored in LangSmith, you can convert them into a dataset. For this example, we will do so using the Client, but you can also do this using the web interface, as explained in the LangSmith docs.

from langsmith import Client

client = Client()
dataset_name = "Example Dataset"
# We will only use examples from the top level AgentExecutor run here,
# and exclude runs that errored.
runs = client.list_runs(
    project_name="my_project",
    execution_order=1,
    error=False,
)

dataset = client.create_dataset(dataset_name, description="An example dataset")
for run in runs:
    client.create_example(
        inputs=run.inputs,
        outputs=run.outputs,
        dataset_id=dataset.id,
    )

Evaluating Runs

Check out the LangSmith Testing & Evaluation dos for up-to-date workflows.

For generating automated feedback on individual runs, you can run evaluations directly using the LangSmith client.

from typing import Optional
from langsmith.evaluation import StringEvaluator


def jaccard_chars(output: str, answer: str) -> float:
    """Naive Jaccard similarity between two strings."""
    prediction_chars = set(output.strip().lower())
    answer_chars = set(answer.strip().lower())
    intersection = prediction_chars.intersection(answer_chars)
    union = prediction_chars.union(answer_chars)
    return len(intersection) / len(union)


def grader(run_input: str, run_output: str, answer: Optional[str]) -> dict:
    """Compute the score and/or label for this run."""
    if answer is None:
        value = "AMBIGUOUS"
        score = 0.5
    else:
        score = jaccard_chars(run_output, answer)
        value = "CORRECT" if score > 0.9 else "INCORRECT"
    return dict(score=score, value=value)

evaluator = StringEvaluator(evaluation_name="Jaccard", grading_function=grader)

runs = client.list_runs(
    project_name="my_project",
    execution_order=1,
    error=False,
)
for run in runs:
    client.evaluate_run(run, evaluator)

Integrations

LangSmith easily integrates with your favorite LLM framework.

OpenAI SDK

We provide a convenient wrapper for the OpenAI SDK.

In order to use, you first need to set your LangSmith API key.

export LANGSMITH_API_KEY=<your-api-key>

Next, you will need to install the LangSmith SDK:

pip install -U langsmith

After that, you can wrap the OpenAI client:

from openai import OpenAI
from langsmith import wrappers

client = wrappers.wrap_openai(OpenAI())

Now, you can use the OpenAI client as you normally would, but now everything is logged to LangSmith!

client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "Say this is a test"}],
)

Oftentimes, you use the OpenAI client inside of other functions. You can get nested traces by using this wrapped client and decorating those functions with @traceable. See this documentation for more documentation how to use this decorator

from langsmith import traceable

@traceable(name="Call OpenAI")
def my_function(text: str):
    return client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": f"Say {text}"}],
    )

my_function("hello world")

Instructor

We provide a convenient integration with Instructor, largely by virtue of it essentially just using the OpenAI SDK.

In order to use, you first need to set your LangSmith API key.

export LANGSMITH_API_KEY=<your-api-key>

Next, you will need to install the LangSmith SDK:

pip install -U langsmith

After that, you can wrap the OpenAI client:

from openai import OpenAI
from langsmith import wrappers

client = wrappers.wrap_openai(OpenAI())

After this, you can patch the OpenAI client using instructor:

import instructor

client = instructor.patch(OpenAI())

Now, you can use instructor as you normally would, but now everything is logged to LangSmith!

from pydantic import BaseModel


class UserDetail(BaseModel):
    name: str
    age: int


user = client.chat.completions.create(
    model="gpt-3.5-turbo",
    response_model=UserDetail,
    messages=[
        {"role": "user", "content": "Extract Jason is 25 years old"},
    ]
)

Oftentimes, you use instructor inside of other functions. You can get nested traces by using this wrapped client and decorating those functions with @traceable. See this documentation for more documentation how to use this decorator

@traceable()
def my_function(text: str) -> UserDetail:
    return client.chat.completions.create(
        model="gpt-3.5-turbo",
        response_model=UserDetail,
        messages=[
            {"role": "user", "content": f"Extract {text}"},
        ]
    )


my_function("Jason is 25 years old")

Pytest Plugin

The LangSmith pytest plugin lets Python developers define their datasets and evaluations as pytest test cases. See online docs for more information.

This plugin is installed as part of the LangSmith SDK, and is enabled by default. See also official pytest docs: How to install and use plugins

Additional Documentation

To learn more about the LangSmith platform, check out the docs.

License

The LangSmith SDK is licensed under the MIT License.

The copyright information for certain dependencies' are reproduced in their corresponding COPYRIGHT.txt files in this repo, including the following:

版本列表
0.9.1 2026-06-23
0.9.0 2026-06-22
0.8.18 2026-06-19
0.8.17 2026-06-18
0.8.16 2026-06-15
0.8.15 2026-06-12
0.8.14 2026-06-10
0.8.12 2026-06-10
0.8.11 2026-06-08
0.8.10 2026-06-08
0.8.9 2026-06-03
0.8.8 2026-05-31
0.8.7 2026-05-29
0.8.6 2026-05-27
0.8.5 2026-05-15
0.8.4 2026-05-13
0.8.3 2026-05-07
0.8.2 2026-05-06
0.8.1 2026-05-05
0.8.0 2026-04-30
0.7.38 2026-04-29
0.7.37 2026-04-26
0.7.36 2026-04-24
0.7.35 2026-04-24
0.7.34 2026-04-23
0.7.33 2026-04-20
0.7.32 2026-04-15
0.7.31 2026-04-14
0.7.30 2026-04-09
0.7.29 2026-04-09
0.7.28 2026-04-08
0.7.27 2026-04-08
0.7.26 2026-04-06
0.7.25 2026-04-03
0.7.24 2026-04-01
0.7.23 2026-03-31
0.7.22 2026-03-19
0.7.21 2026-03-19
0.7.20 2026-03-18
0.7.19 2026-03-17
0.7.18 2026-03-16
0.7.17 2026-03-12
0.7.16 2026-03-09
0.7.15 2026-03-09
0.7.14 2026-03-06
0.7.13 2026-03-06
0.7.12 2026-03-04
0.7.11 2026-03-03
0.7.10 2026-03-03
0.7.9 2026-02-27
0.7.8 2026-02-27
0.7.7 2026-02-25
0.7.6 2026-02-21
0.7.5 2026-02-19
0.7.4 2026-02-18
0.7.3 2026-02-13
0.7.2 2026-02-13
0.7.1 2026-02-10
0.7.0 2026-02-09
0.6.9 2026-02-05
0.6.8 2026-02-02
0.6.7 2026-01-31
0.6.6 2026-01-27
0.6.5 2026-01-26
0.6.4 2026-01-15
0.6.3 2026-01-14
0.6.2 2026-01-08
0.6.1 2026-01-06
0.6.0 2026-01-02
0.6.0rc0 2025-12-30
0.5.2 2025-12-30
0.5.1 2025-12-24
0.5.0 2025-12-16
0.4.60 2025-12-16
0.4.59 2025-12-11
0.4.58 2025-12-10
0.4.57 2025-12-09
0.4.56 2025-12-06
0.4.55 2025-12-05
0.4.54 2025-12-05
0.4.53 2025-12-03
0.4.52 2025-12-02
0.4.51 2025-12-02
0.4.50 2025-12-02
0.4.49 2025-11-26
0.4.48 2025-11-26
0.4.47 2025-11-24
0.4.46 2025-11-21
0.4.45 2025-11-20
0.4.44 2025-11-20
0.4.43 2025-11-15
0.4.42 2025-11-09
0.4.41 2025-11-04
0.4.40 2025-11-04
0.4.39 2025-11-01
0.4.38 2025-10-23
0.4.37 2025-10-15
0.4.36 2025-10-15
0.4.35 2025-10-14
0.4.34 2025-10-09
0.4.33 2025-10-07
0.4.32 2025-10-03
0.4.31 2025-09-25
0.4.30 2025-09-22
0.4.29 2025-09-18
0.4.28 2025-09-15
0.4.27 2025-09-08
0.4.26 2025-09-08
0.4.25 2025-09-04
0.4.24 2025-09-04
0.4.23 2025-09-02
0.4.22 2025-09-02
0.4.21 2025-08-29
0.4.20 2025-08-28
0.4.19 2025-08-27
0.4.18 2025-08-26
0.4.17 2025-08-26
0.4.16 2025-08-22
0.4.15 2025-08-20
0.4.14 2025-08-12
0.4.13 2025-08-06
0.4.12 2025-08-06
0.4.11 2025-08-05
0.4.10 2025-08-01
0.4.9 2025-07-31
0.4.8 2025-07-18
0.4.7 2025-07-17
0.4.6 2025-07-15
0.4.5 2025-07-10
0.4.4 2025-06-27
0.4.3 2025-06-27
0.4.2 2025-06-25
0.4.1 2025-06-10
0.4.0 2025-06-10
0.4.54rc0 2025-12-04
0.4.43rc0 2025-11-14
0.4.42rc0 2025-11-10
0.4.39rc1 2025-10-31
0.4.39rc0 2025-10-30
0.4.35rc1 2025-10-12
0.4.32rc0 2025-09-25
0.3.45 2025-06-05
0.3.44 2025-06-02
0.3.43 2025-05-29
0.3.42 2025-05-03
0.3.41 2025-05-02
0.3.40 2025-05-02
0.3.39 2025-04-30
0.3.38 2025-04-28
0.3.37 2025-04-25
0.3.36 2025-04-25
0.3.35 2025-04-25
0.3.34 2025-04-24
0.3.33 2025-04-21
0.3.32 2025-04-17
0.3.31 2025-04-15
0.3.30 2025-04-10
0.3.29 2025-04-10
0.3.28 2025-04-09
0.3.27 2025-04-08
0.3.26 2025-04-08
0.3.25 2025-04-07
0.3.24 2025-04-03
0.3.23 2025-04-02
0.3.22 2025-04-01
0.3.21 2025-04-01
0.3.20 2025-03-31
0.3.19 2025-03-26
0.3.18 2025-03-19
0.3.17 2025-03-19
0.3.16 2025-03-19
0.3.15 2025-03-14
0.3.14 2025-03-14
0.3.13 2025-03-07
0.3.12 2025-03-06
0.3.11 2025-02-25
0.3.10 2025-02-21
0.3.9 2025-02-21
0.3.8 2025-02-09
0.3.7 2025-02-08
0.3.6 2025-02-05
0.3.5 2025-02-04
0.3.4 2025-01-31
0.3.3 2025-01-30
0.3.2 2025-01-27
0.3.1 2025-01-22
0.3.0 2025-01-22
0.3.3rc0 2025-01-30
0.3.37rc0 2025-04-25
0.3.29rc0 2025-04-10
0.3.28rc2 2025-04-09
0.3.28rc1 2025-04-08
0.3.27rc1 2025-04-08
0.3.25rc2 2025-04-04
0.3.25rc1 2025-04-04
0.3.1rc1 2025-01-23
0.3.18rc1 2025-03-19
0.3.14rc1 2025-03-12
0.3.14rc0 2025-03-12
0.3.11rc1 2025-02-25
0.2.11 2025-01-17
0.2.10 2025-01-03
0.2.9 2025-01-03
0.2.8 2025-01-03
0.2.7 2024-12-31
0.2.6 2024-12-24
0.2.4 2024-12-19
0.2.3 2024-12-12
0.2.2 2024-12-10
0.2.1 2024-12-06
0.2.0 2024-12-05
0.2.11rc9 2025-01-17
0.2.11rc8 2025-01-16
0.2.11rc7 2025-01-15
0.2.11rc6 2025-01-14
0.2.11rc5 2025-01-11
0.2.11rc4 2025-01-10
0.2.11rc3 2025-01-09
0.2.11rc2 2025-01-09
0.2.11rc15 2025-01-20
0.2.11rc14 2025-01-20
0.2.11rc13 2025-01-19
0.2.11rc12 2025-01-17
0.2.11rc11 2025-01-17
0.2.11rc10 2025-01-17
0.2.11rc1 2025-01-08
0.1.147 2024-11-27
0.1.146 2024-11-25
0.1.145 2024-11-22
0.1.144 2024-11-20
0.1.143 2024-11-13
0.1.142 2024-11-08
0.1.141 2024-11-08
0.1.140 2024-11-06
0.1.139 2024-11-01
0.1.138 2024-10-30
0.1.137 2024-10-23
0.1.136 2024-10-17
0.1.135 2024-10-14
0.1.134 2024-10-10
0.1.133 2024-10-10
0.1.132 2024-10-07
0.1.131 2024-10-03
0.1.130 2024-10-02
0.1.129 2024-09-27
0.1.128 2024-09-24
0.1.127 2024-09-24
0.1.126 2024-09-24
0.1.125 2024-09-20
0.1.124 2024-09-20
0.1.123 2024-09-19
0.1.122 2024-09-18
0.1.121 2024-09-16
0.1.120 2024-09-13
0.1.119 2024-09-12
0.1.118 2024-09-11
0.1.117 2024-09-09
0.1.116 2024-09-06
0.1.115 2024-09-05
0.1.114 2024-09-05
0.1.113 2024-09-04
0.1.112 2024-09-04
0.1.111 2024-09-04
0.1.110 2024-09-03
0.1.109 2024-09-03
0.1.108 2024-08-31
0.1.107 2024-08-29
0.1.106 2024-08-27
0.1.105 2024-08-27
0.1.104 2024-08-23
0.1.103 2024-08-22
0.1.102 2024-08-22
0.1.101 2024-08-21
0.1.100 2024-08-20
0.1.99 2024-08-11
0.1.98 2024-08-06
0.1.97 2024-08-06
0.1.96 2024-08-02
0.1.95 2024-07-31
0.1.94 2024-07-30
0.1.93 2024-07-20
0.1.92 2024-07-18
0.1.91 2024-07-18
0.1.90 2024-07-17
0.1.89 2024-07-17
0.1.88 2024-07-17
0.1.87 2024-07-16
0.1.86 2024-07-16
0.1.85 2024-07-10
0.1.84 2024-07-08
0.1.83 2024-07-02
0.1.82 2024-06-24
0.1.81 2024-06-19
0.1.80 2024-06-18
0.1.79 2024-06-18
0.1.78 2024-06-17
0.1.77 2024-06-12
0.1.76 2024-06-11
0.1.75 2024-06-06
0.1.74 2024-06-06
0.1.73 2024-06-05
0.1.72 2024-06-05
0.1.71 2024-06-04
0.1.70 2024-06-04
0.1.69 2024-06-04
0.1.68 2024-06-03
0.1.67 2024-05-31
0.1.66 2024-05-31
0.1.65 2024-05-30
0.1.64 2024-05-30
0.1.63 2024-05-23
0.1.62 2024-05-23
0.1.61 2024-05-22
0.1.60 2024-05-20
0.1.59 2024-05-16
0.1.58 2024-05-15
0.1.57 2024-05-11
0.1.56 2024-05-08
0.1.55 2024-05-07
0.1.54 2024-05-04
0.1.53 2024-05-02
0.1.52 2024-04-29
0.1.51 2024-04-25
0.1.50 2024-04-23
0.1.49 2024-04-19
0.1.48 2024-04-15
0.1.47 2024-04-13
0.1.46 2024-04-12
0.1.45 2024-04-10
0.1.44 2024-04-10
0.1.43 2024-04-10
0.1.42 2024-04-09
0.1.41 2024-04-09
0.1.40 2024-04-04
0.1.39 2024-04-03
0.1.38 2024-03-29
0.1.37 2024-03-28
0.1.36 2024-03-28
0.1.35 2024-03-27
0.1.34 2024-03-27
0.1.33 2024-03-27
0.1.31 2024-03-19
0.1.30 2024-03-19
0.1.29 2024-03-19
0.1.28 2024-03-18
0.1.27 2024-03-16
0.1.26 2024-03-14
0.1.25 2024-03-14
0.1.24 2024-03-12
0.1.23 2024-03-08
0.1.22 2024-03-06
0.1.21 2024-03-05
0.1.20 2024-03-05
0.1.19 2024-03-05
0.1.18 2024-03-05
0.1.17 2024-03-04
0.1.16 2024-03-04
0.1.15 2024-03-04
0.1.14 2024-03-03
0.1.13 2024-03-02
0.1.12 2024-03-01
0.1.11 2024-03-01
0.1.10 2024-02-27
0.1.9 2024-02-26
0.1.8 2024-02-25
0.1.7 2024-02-24
0.1.6 2024-02-23
0.1.5 2024-02-21
0.1.4 2024-02-21
0.1.3 2024-02-20
0.1.2 2024-02-16
0.1.1 2024-02-15
0.1.0 2024-02-15
0.1.99rc1 2024-08-06
0.1.46rc1 2024-04-12
0.1.45rc1 2024-04-11
0.1.32rc8 2024-03-26
0.1.32rc7 2024-03-26
0.1.32rc6 2024-03-26
0.1.32rc5 2024-03-26
0.1.32rc4 2024-03-26
0.1.32rc3 2024-03-26
0.1.32rc2 2024-03-26
0.1.32rc1 2024-03-25
0.1.148rc1 2024-11-27
0.1.144rc3 2024-11-20
0.1.144rc2 2024-11-20
0.1.144rc1 2024-11-19
0.1.139rc2 2024-11-01
0.1.139rc1 2024-10-31
0.1.138rc2 2024-10-29
0.1.138rc1 2024-10-29
0.1.116rc1 2024-09-05
0.1.115rc1 2024-09-05
0.1.115rc0 2024-09-05
0.1.108rc0 2024-08-29
0.0.92 2024-02-14
0.0.91 2024-02-13
0.0.90 2024-02-10
0.0.89 2024-02-09
0.0.88 2024-02-09
0.0.87 2024-02-07
0.0.86 2024-02-02
0.0.85 2024-01-30
0.0.84 2024-01-29
0.0.83 2024-01-18
0.0.82 2024-01-18
0.0.81 2024-01-16
0.0.80 2024-01-11
0.0.79 2024-01-09
0.0.78 2024-01-08
0.0.77 2024-01-03
0.0.76 2024-01-03
0.0.75 2023-12-22
0.0.74 2023-12-21
0.0.73 2023-12-21
0.0.72 2023-12-18
0.0.71 2023-12-15
0.0.70 2023-12-14
0.0.69 2023-12-03
0.0.68 2023-12-01
0.0.67 2023-11-28
0.0.66 2023-11-20
0.0.65 2023-11-17
0.0.64 2023-11-14
0.0.63 2023-11-09
0.0.62 2023-11-08
0.0.61 2023-11-08
0.0.60 2023-11-07
0.0.59 2023-11-06
0.0.58 2023-11-06
0.0.57 2023-11-03
0.0.56 2023-11-01
0.0.55 2023-11-01
0.0.54 2023-10-30
0.0.53 2023-10-27
0.0.52 2023-10-25
0.0.51 2023-10-25
0.0.50 2023-10-24
0.0.49 2023-10-20
0.0.48 2023-10-20
0.0.47 2023-10-19
0.0.46 2023-10-18
0.0.45 2023-10-18
0.0.44 2023-10-16
0.0.43 2023-10-06
0.0.42 2023-10-05
0.0.41 2023-09-27
0.0.40 2023-09-21
0.0.39 2023-09-21
0.0.38 2023-09-18
0.0.37 2023-09-14
0.0.36 2023-09-12
0.0.35 2023-09-08
0.0.34 2023-09-08
0.0.33 2023-09-02
0.0.32 2023-09-01
0.0.31 2023-08-31
0.0.30 2023-08-30
0.0.29 2023-08-30
0.0.28 2023-08-30
0.0.27 2023-08-27
0.0.26 2023-08-22
0.0.25 2023-08-18
0.0.24 2023-08-17
0.0.23 2023-08-16
0.0.22 2023-08-11
0.0.21 2023-08-10
0.0.20 2023-08-08
0.0.19 2023-08-05
0.0.18 2023-08-03
0.0.16 2023-08-01
0.0.15 2023-07-27
0.0.14 2023-07-21
0.0.13 2023-07-21
0.0.12 2023-07-21
0.0.11 2023-07-19
0.0.10 2023-07-18
0.0.9 2023-07-17
0.0.8 2023-07-17
0.0.7 2023-07-15
0.0.6 2023-07-14
0.0.5 2023-07-12
0.0.4 2023-07-12
0.0.3 2023-07-11
0.0.2 2023-07-08
0.0.1 2023-06-26
0.0.86rc1 2024-01-30
0.0.84rc5 2024-01-26
0.0.84rc4 2024-01-25
0.0.84rc3 2024-01-25
0.0.84rc2 2024-01-23
0.0.84rc1 2024-01-22
0.0.0rc0 2023-06-26