initial commit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
pip
|
||||
485
venv/Lib/site-packages/langsmith-0.7.9.dist-info/METADATA
Normal file
485
venv/Lib/site-packages/langsmith-0.7.9.dist-info/METADATA
Normal file
@@ -0,0 +1,485 @@
|
||||
Metadata-Version: 2.4
|
||||
Name: langsmith
|
||||
Version: 0.7.9
|
||||
Summary: Client library to connect to the LangSmith Observability and Evaluation Platform.
|
||||
Project-URL: Homepage, https://smith.langchain.com/
|
||||
Project-URL: Documentation, https://docs.smith.langchain.com/
|
||||
Project-URL: Repository, https://github.com/langchain-ai/langsmith-sdk
|
||||
Author-email: LangChain <support@langchain.dev>
|
||||
License: MIT
|
||||
Keywords: evaluation,langchain,langsmith,language,llm,nlp,platform,tracing,translation
|
||||
Requires-Python: >=3.10
|
||||
Requires-Dist: httpx<1,>=0.23.0
|
||||
Requires-Dist: orjson>=3.9.14; platform_python_implementation != 'PyPy'
|
||||
Requires-Dist: packaging>=23.2
|
||||
Requires-Dist: pydantic<3,>=2
|
||||
Requires-Dist: requests-toolbelt>=1.0.0
|
||||
Requires-Dist: requests>=2.0.0
|
||||
Requires-Dist: uuid-utils<1.0,>=0.12.0
|
||||
Requires-Dist: xxhash>=3.0.0
|
||||
Requires-Dist: zstandard>=0.23.0
|
||||
Provides-Extra: claude-agent-sdk
|
||||
Requires-Dist: claude-agent-sdk>=0.1.0; (python_version >= '3.10') and extra == 'claude-agent-sdk'
|
||||
Provides-Extra: google-adk
|
||||
Requires-Dist: google-adk>=1.0.0; extra == 'google-adk'
|
||||
Requires-Dist: wrapt>=1.16.0; extra == 'google-adk'
|
||||
Provides-Extra: langsmith-pyo3
|
||||
Requires-Dist: langsmith-pyo3>=0.1.0rc2; extra == 'langsmith-pyo3'
|
||||
Provides-Extra: openai-agents
|
||||
Requires-Dist: openai-agents>=0.0.3; extra == 'openai-agents'
|
||||
Provides-Extra: otel
|
||||
Requires-Dist: opentelemetry-api>=1.30.0; extra == 'otel'
|
||||
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.30.0; extra == 'otel'
|
||||
Requires-Dist: opentelemetry-sdk>=1.30.0; extra == 'otel'
|
||||
Provides-Extra: pytest
|
||||
Requires-Dist: pytest>=7.0.0; extra == 'pytest'
|
||||
Requires-Dist: rich>=13.9.4; extra == 'pytest'
|
||||
Requires-Dist: vcrpy>=7.0.0; extra == 'pytest'
|
||||
Provides-Extra: sandbox
|
||||
Requires-Dist: websockets>=15.0; extra == 'sandbox'
|
||||
Provides-Extra: vcr
|
||||
Requires-Dist: vcrpy>=7.0.0; extra == 'vcr'
|
||||
Description-Content-Type: text/markdown
|
||||
|
||||
# LangSmith Client SDK
|
||||
|
||||
[](https://github.com/langchain-ai/langsmith-sdk/releases)
|
||||
[](https://pepy.tech/project/langsmith)
|
||||
|
||||
This package contains the Python client for interacting with the [LangSmith platform](https://smith.langchain.com/).
|
||||
|
||||
To install:
|
||||
|
||||
```bash
|
||||
pip install -U langsmith
|
||||
export LANGSMITH_TRACING=true
|
||||
export LANGSMITH_API_KEY=ls_...
|
||||
```
|
||||
|
||||
Then trace:
|
||||
|
||||
```python
|
||||
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](https://smith.langchain.com/public/b37ca9b1-60cd-4a2a-817e-3c4e4443fdc0/r).
|
||||
|
||||
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](https://github.com/langchain-ai/langsmith-cookbook/tree/main) 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.
|
||||
|
||||
## 1. Connect to LangSmith
|
||||
|
||||
Sign up for [LangSmith](https://smith.langchain.com/) 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](https://smith.langchain.com/settings), 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.
|
||||
|
||||
```python
|
||||
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`.
|
||||
|
||||
2. **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.
|
||||
|
||||
```python
|
||||
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.**
|
||||
|
||||
```python
|
||||
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
|
||||
```
|
||||
|
||||
2. **Log traces**
|
||||
|
||||
The easiest way to log traces using the SDK is via the `@traceable` decorator. Below is an example.
|
||||
|
||||
```python
|
||||
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
|
||||
|
||||
```python
|
||||
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](https://docs.smith.langchain.com/).
|
||||
|
||||
```python
|
||||
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](https://docs.smith.langchain.com/evaluation) for up-to-date workflows.
|
||||
|
||||
For generating automated feedback on individual runs, you can run evaluations directly using the LangSmith client.
|
||||
|
||||
```python
|
||||
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
|
||||
|
||||
<!-- markdown-link-check-disable -->
|
||||
|
||||
We provide a convenient wrapper for the [OpenAI SDK](https://platform.openai.com/docs/api-reference).
|
||||
|
||||
In order to use, you first need to set your LangSmith API key.
|
||||
|
||||
```shell
|
||||
export LANGSMITH_API_KEY=<your-api-key>
|
||||
```
|
||||
|
||||
Next, you will need to install the LangSmith SDK:
|
||||
|
||||
```shell
|
||||
pip install -U langsmith
|
||||
```
|
||||
|
||||
After that, you can wrap the OpenAI client:
|
||||
|
||||
```python
|
||||
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!
|
||||
|
||||
```python
|
||||
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](https://docs.smith.langchain.com/tracing/faq/logging_and_viewing) for more documentation how to use this decorator
|
||||
|
||||
```python
|
||||
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](https://jxnl.github.io/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.
|
||||
|
||||
```shell
|
||||
export LANGSMITH_API_KEY=<your-api-key>
|
||||
```
|
||||
|
||||
Next, you will need to install the LangSmith SDK:
|
||||
|
||||
```shell
|
||||
pip install -U langsmith
|
||||
```
|
||||
|
||||
After that, you can wrap the OpenAI client:
|
||||
|
||||
```python
|
||||
from openai import OpenAI
|
||||
from langsmith import wrappers
|
||||
|
||||
client = wrappers.wrap_openai(OpenAI())
|
||||
```
|
||||
|
||||
After this, you can patch the OpenAI client using `instructor`:
|
||||
|
||||
```python
|
||||
import instructor
|
||||
|
||||
client = instructor.patch(OpenAI())
|
||||
```
|
||||
|
||||
Now, you can use `instructor` as you normally would, but now everything is logged to LangSmith!
|
||||
|
||||
```python
|
||||
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](https://docs.smith.langchain.com/tracing/faq/logging_and_viewing) for more documentation how to use this decorator
|
||||
|
||||
```python
|
||||
@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](https://docs.smith.langchain.com/evaluation/how_to_guides/pytest) 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](https://docs.pytest.org/en/stable/how-to/plugins.html)
|
||||
|
||||
## Additional Documentation
|
||||
|
||||
To learn more about the LangSmith platform, check out the [docs](https://docs.smith.langchain.com/).
|
||||
|
||||
|
||||
# License
|
||||
|
||||
The LangSmith SDK is licensed under the [MIT License](../LICENSE).
|
||||
|
||||
The copyright information for certain dependencies' are reproduced in their corresponding COPYRIGHT.txt files in this repo, including the following:
|
||||
|
||||
- [uuid-utils](docs/templates/uuid-utils/COPYRIGHT.txt)
|
||||
- [zstandard](docs/templates/zstandard/COPYRIGHT.txt)
|
||||
162
venv/Lib/site-packages/langsmith-0.7.9.dist-info/RECORD
Normal file
162
venv/Lib/site-packages/langsmith-0.7.9.dist-info/RECORD
Normal file
@@ -0,0 +1,162 @@
|
||||
langsmith-0.7.9.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
langsmith-0.7.9.dist-info/METADATA,sha256=Ac3um7ftSIX0zC4EPZuzU5YorEQXLw7h7JM0vT-5Z34,15597
|
||||
langsmith-0.7.9.dist-info/RECORD,,
|
||||
langsmith-0.7.9.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
||||
langsmith-0.7.9.dist-info/entry_points.txt,sha256=_mjNOoezG04kRkjwIorEJGKpTcjNvWe0FxSU7VDoKd0,54
|
||||
langsmith/__init__.py,sha256=Opqd1WhLc9lR8FBgqSu-5Pc7SlU5TbcFogfUHo1lfN4,5233
|
||||
langsmith/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/__pycache__/_expect.cpython-311.pyc,,
|
||||
langsmith/__pycache__/anonymizer.cpython-311.pyc,,
|
||||
langsmith/__pycache__/async_client.cpython-311.pyc,,
|
||||
langsmith/__pycache__/client.cpython-311.pyc,,
|
||||
langsmith/__pycache__/middleware.cpython-311.pyc,,
|
||||
langsmith/__pycache__/prompt_cache.cpython-311.pyc,,
|
||||
langsmith/__pycache__/pytest_plugin.cpython-311.pyc,,
|
||||
langsmith/__pycache__/run_helpers.cpython-311.pyc,,
|
||||
langsmith/__pycache__/run_trees.cpython-311.pyc,,
|
||||
langsmith/__pycache__/schemas.cpython-311.pyc,,
|
||||
langsmith/__pycache__/utils.cpython-311.pyc,,
|
||||
langsmith/__pycache__/uuid.cpython-311.pyc,,
|
||||
langsmith/_expect.py,sha256=piDDXHcJJ7wlg5MSl44krcZGDYkmFDAC43a5__E5nnk,15148
|
||||
langsmith/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
langsmith/_internal/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_aiter.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_background_thread.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_beta_decorator.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_compressed_traces.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_constants.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_context.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_edit_distance.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_embedding_distance.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_multipart.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_operations.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_orjson.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_otel_utils.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_patch.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_serde.cpython-311.pyc,,
|
||||
langsmith/_internal/__pycache__/_uuid.cpython-311.pyc,,
|
||||
langsmith/_internal/_aiter.py,sha256=1Ymlni1pLsn2E8X8_EuBzNymJypkbOiOB-8FVG1PZ4w,12124
|
||||
langsmith/_internal/_background_thread.py,sha256=81EzXV9xBB927RCtlvqCmkGOZzoVtDnjox_u0ntdsEo,35699
|
||||
langsmith/_internal/_beta_decorator.py,sha256=_lUMZyGP3mbOboPxDxkinskcZemoXI-n8ki_aPu1hio,574
|
||||
langsmith/_internal/_compressed_traces.py,sha256=VMwYFmYFrxoT-pvGGNJ47EuFFFb_CeDXBoGT-dSDC9Y,2068
|
||||
langsmith/_internal/_constants.py,sha256=G8yARbAXasjk1ioCaTju1ajy9QxjhOo2TKMdUGrSGZ0,269
|
||||
langsmith/_internal/_context.py,sha256=Mj9YWle6ywOBcOGyu9oz7tG-nJ2ev8SGL9N6qw6g_QY,1245
|
||||
langsmith/_internal/_edit_distance.py,sha256=wT5bUrgTW5sFWy-YQYr3AIc2G4C5Jili57IZmh2UpkQ,1961
|
||||
langsmith/_internal/_embedding_distance.py,sha256=ow0ngr5YO0DSfaKJJFlha7ddGtqXpN-7OXE5GLxwZTU,6025
|
||||
langsmith/_internal/_multipart.py,sha256=qqMw9_z4aY5aHGnUYip-syCPPC6P9AS7mgFQdWHy5Nk,906
|
||||
langsmith/_internal/_operations.py,sha256=FHAUqnkn85AHGGxlcwLoKk5i2RQTBpZ-Z0ncuDKbGjA,14768
|
||||
langsmith/_internal/_orjson.py,sha256=ivpySpNJxQfXRZwc-KyvBtWsbNhQYlayjBuIT9nReZg,2707
|
||||
langsmith/_internal/_otel_utils.py,sha256=zuB0DPaXTyxqLSqKQRrc-Qq7q9apHhpKQdKAUcHnjoQ,725
|
||||
langsmith/_internal/_patch.py,sha256=8QbOHlKxHbXdbzbSVspTT6Ne-gprDIyoiI3YE6t3RfI,3401
|
||||
langsmith/_internal/_serde.py,sha256=wp1Se_gLE-LCS_JxfwI1bWwqWGKjOsGHMGGFgQ7KWsI,5192
|
||||
langsmith/_internal/_uuid.py,sha256=JwvyfBo6FXFI_iVd83GPslF_0FdnjD0Ax_USOS5hews,5419
|
||||
langsmith/_internal/otel/__pycache__/_otel_client.cpython-311.pyc,,
|
||||
langsmith/_internal/otel/__pycache__/_otel_exporter.cpython-311.pyc,,
|
||||
langsmith/_internal/otel/_otel_client.py,sha256=qmg4RMeUnnC2o5yIKDefwI-5yu3lM_dMq37MwqQVoKg,3416
|
||||
langsmith/_internal/otel/_otel_exporter.py,sha256=4fiCe5fNG2QehR2uAxJtLy0meh3Uosi37KdvDdI1LhE,32077
|
||||
langsmith/anonymizer.py,sha256=VFGwuQdQ_ERukRvVgshC-DCwbp3nDVVJH9KyKsWyEvA,6413
|
||||
langsmith/async_client.py,sha256=X8aQioCZ8QAxfOyt9MWxrdMmVa0cfGOxBheYH7ua1Qg,79213
|
||||
langsmith/beta/__init__.py,sha256=xThywYp8JULecqduLNI4aALf7F_DnAu4RrwRHVGNTs0,251
|
||||
langsmith/beta/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/beta/__pycache__/_evals.cpython-311.pyc,,
|
||||
langsmith/beta/_evals.py,sha256=fGID4UpiSBl3IG2rO3viEFXuJACF4zqftNG_vN5a_Hs,7980
|
||||
langsmith/cli/README.md,sha256=63JGQUiky9XDoLr_8YLyOh15Jp4AHOAvVKfJRR_vLEY,169
|
||||
langsmith/client.py,sha256=uUzrCoUuTzIAmhMc7H_MevPeu0Fl_HtFXlCXhK9ZDMI,406803
|
||||
langsmith/env/__init__.py,sha256=fMACnZ_tYOyafLALfvYCYRWuA9JuHJu5AuioxZr5u2A,840
|
||||
langsmith/env/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/env/__pycache__/_git.cpython-311.pyc,,
|
||||
langsmith/env/__pycache__/_runtime_env.cpython-311.pyc,,
|
||||
langsmith/env/_git.py,sha256=W-Vlmk-OcJR51-zt_UbXa_sbBsoZMSPTqu_n5byibz0,1913
|
||||
langsmith/env/_runtime_env.py,sha256=5dqgY9jAajMRFJevvDKRgLBiWBj4N6eTRjKGzwKOYjI,6928
|
||||
langsmith/evaluation/__init__.py,sha256=uwjKBi0fdE9tRC3arya83UJN74d3Rs07uxBjkDwth-A,2329
|
||||
langsmith/evaluation/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/evaluation/__pycache__/_arunner.cpython-311.pyc,,
|
||||
langsmith/evaluation/__pycache__/_name_generation.cpython-311.pyc,,
|
||||
langsmith/evaluation/__pycache__/_runner.cpython-311.pyc,,
|
||||
langsmith/evaluation/__pycache__/evaluator.cpython-311.pyc,,
|
||||
langsmith/evaluation/__pycache__/llm_evaluator.cpython-311.pyc,,
|
||||
langsmith/evaluation/__pycache__/string_evaluator.cpython-311.pyc,,
|
||||
langsmith/evaluation/_arunner.py,sha256=9rtC9tYZfepVtMrUJ_9yGL8o7kn3oD-SV6eDHsRMCDA,53697
|
||||
langsmith/evaluation/_name_generation.py,sha256=IWocrWNjWnV8GhHJ7BrbGcWK1v9TUikzubpSBNz4Px4,9936
|
||||
langsmith/evaluation/_runner.py,sha256=Pg8inQc3alBy-QfiDmq6Xh_Vnas5cRzTsa_suWJ4o6E,88494
|
||||
langsmith/evaluation/evaluator.py,sha256=AVSRIR4WXtJfmaSh_8Qt3FM_hVNp6qfQAMTUSsPb2I0,37250
|
||||
langsmith/evaluation/llm_evaluator.py,sha256=jvdBbrt630E69hX5vXuN9GmhLR71bRJP7-_nUQbbSQ8,12000
|
||||
langsmith/evaluation/string_evaluator.py,sha256=qCqg5ntT6tbZ5nF7Bex7HCktodHlx-1VrjSdMP0RxDE,1808
|
||||
langsmith/integrations/claude_agent_sdk/__init__.py,sha256=hDdP0VGVLwPwrywiUE0E17soq-pZ4Ptx11kI80R-Gu8,2632
|
||||
langsmith/integrations/claude_agent_sdk/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/integrations/claude_agent_sdk/__pycache__/_client.cpython-311.pyc,,
|
||||
langsmith/integrations/claude_agent_sdk/__pycache__/_config.cpython-311.pyc,,
|
||||
langsmith/integrations/claude_agent_sdk/__pycache__/_hooks.cpython-311.pyc,,
|
||||
langsmith/integrations/claude_agent_sdk/__pycache__/_messages.cpython-311.pyc,,
|
||||
langsmith/integrations/claude_agent_sdk/__pycache__/_tools.cpython-311.pyc,,
|
||||
langsmith/integrations/claude_agent_sdk/__pycache__/_usage.cpython-311.pyc,,
|
||||
langsmith/integrations/claude_agent_sdk/_client.py,sha256=JJfhTNsZ8Q9IZfPA4k52Z0pNgzklLDJE32rokiWYEcs,19661
|
||||
langsmith/integrations/claude_agent_sdk/_config.py,sha256=4UTRsIAbXx4S7WLiBTIhIoDbPaIJR-BdUYPI3fi2DfE,1017
|
||||
langsmith/integrations/claude_agent_sdk/_hooks.py,sha256=VSpuJiuB5B1MM2y_nK09J5nNfHO3RzpB5q9pKzqxs5w,7772
|
||||
langsmith/integrations/claude_agent_sdk/_messages.py,sha256=H2QQ8anq6cZRRrs25DUU42adcjIiZX82T5gble2nD9Q,4004
|
||||
langsmith/integrations/claude_agent_sdk/_tools.py,sha256=rXT9kEwkps-EZSfzxTaUec5mgyzKhOvl7YmZA595u54,1147
|
||||
langsmith/integrations/claude_agent_sdk/_usage.py,sha256=rGXhePGKZtKI5-H4aXXW_HbDoXy0ZNZrJgzo-gosO3Q,2110
|
||||
langsmith/integrations/google_adk/__init__.py,sha256=mnPPLbbGIpLwbhGYeAJnOCQAM3cDsjmb35ITC3V7CD4,3319
|
||||
langsmith/integrations/google_adk/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/integrations/google_adk/__pycache__/_client.cpython-311.pyc,,
|
||||
langsmith/integrations/google_adk/__pycache__/_config.cpython-311.pyc,,
|
||||
langsmith/integrations/google_adk/__pycache__/_messages.cpython-311.pyc,,
|
||||
langsmith/integrations/google_adk/__pycache__/_usage.cpython-311.pyc,,
|
||||
langsmith/integrations/google_adk/_client.py,sha256=RzA7kg1BkMotom2Sq4nfeIacKzHtNBfEu3vqEi9qtRQ,17531
|
||||
langsmith/integrations/google_adk/_config.py,sha256=rxiOPCmQYkv3dO2DVaM5qWQWnZ9kDNpO8GDWykrlADo,670
|
||||
langsmith/integrations/google_adk/_messages.py,sha256=gI2fTQlH4rGT1eNyAtcQwoLIFjNpdnvNngsulvjUxAs,6850
|
||||
langsmith/integrations/google_adk/_usage.py,sha256=rSpZzISLif2B2dU1iWjG475b4mqN-GXimFd3y0_R7aw,1422
|
||||
langsmith/integrations/openai_agents_sdk/__init__.py,sha256=kwqFjew5OPzySXFRg6VYZeoLsz8gFyP-mfsfSstyxyU,219
|
||||
langsmith/integrations/openai_agents_sdk/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/integrations/openai_agents_sdk/__pycache__/_openai_agent_utils.cpython-311.pyc,,
|
||||
langsmith/integrations/openai_agents_sdk/__pycache__/_openai_agents.cpython-311.pyc,,
|
||||
langsmith/integrations/openai_agents_sdk/_openai_agent_utils.py,sha256=chFP3yKkLyhZyQ8GFJkIgsXnV4ESKdZmq4udRQ2FmIU,8181
|
||||
langsmith/integrations/openai_agents_sdk/_openai_agents.py,sha256=LrtlSkJdtzkAx1GpP3a3b2aQ2DVcD77PEipEolRFmKY,14600
|
||||
langsmith/integrations/otel/__init__.py,sha256=o7mNuBMBGHMMEBEHhI7GlKOB5flByOC8e-dDYjv0SR8,4147
|
||||
langsmith/integrations/otel/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/integrations/otel/__pycache__/processor.cpython-311.pyc,,
|
||||
langsmith/integrations/otel/processor.py,sha256=epcGOw4NUAHsIuQpbDPvMmr845kQZ5yfynpmIER9N54,7491
|
||||
langsmith/middleware.py,sha256=ARQf2Ol9AN5glh8XnZs2ilDk75bCQSKYjJkugE7LhP4,1620
|
||||
langsmith/prompt_cache.py,sha256=S4tP71K0CRYVlULd9EYj7AkoJ1D3xBZLsZAKXIsQjMY,25112
|
||||
langsmith/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
langsmith/pytest_plugin.py,sha256=EQ9xgIyAAVOtoXixzNlkeSqo6LH7vApQXcqikZ2EyI8,12931
|
||||
langsmith/run_helpers.py,sha256=WGFfhj3WM8QbfxEJel_Uk9uzzvTS9y_4OHZAKU3x8cQ,78466
|
||||
langsmith/run_trees.py,sha256=G6EElMwpNP2RETuDYqiKaK095PPOrk-Q0w1R4NbUDDk,45787
|
||||
langsmith/sandbox/README.md,sha256=33zrZErcVClYLPcTf6c3sDH9qtdYFL9xmMg2zCvnWLA,16629
|
||||
langsmith/sandbox/__init__.py,sha256=LAnomw54sXxztpseSq1n7oQkqY-geA8rKpOltpezg3E,2881
|
||||
langsmith/sandbox/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/sandbox/__pycache__/_async_client.cpython-311.pyc,,
|
||||
langsmith/sandbox/__pycache__/_async_sandbox.cpython-311.pyc,,
|
||||
langsmith/sandbox/__pycache__/_client.cpython-311.pyc,,
|
||||
langsmith/sandbox/__pycache__/_exceptions.cpython-311.pyc,,
|
||||
langsmith/sandbox/__pycache__/_helpers.cpython-311.pyc,,
|
||||
langsmith/sandbox/__pycache__/_models.cpython-311.pyc,,
|
||||
langsmith/sandbox/__pycache__/_sandbox.cpython-311.pyc,,
|
||||
langsmith/sandbox/__pycache__/_transport.cpython-311.pyc,,
|
||||
langsmith/sandbox/__pycache__/_ws_execute.cpython-311.pyc,,
|
||||
langsmith/sandbox/_async_client.py,sha256=sltothqdHV639L_S7nZ6abqwPr7yJL5S11na4qv0rVM,32751
|
||||
langsmith/sandbox/_async_sandbox.py,sha256=thxk0F4FISJGBfUGFYuRq6rUyEp-3K8IJmLH9ZO5mss,15538
|
||||
langsmith/sandbox/_client.py,sha256=zzg_gk_NB1-VaBSGAMynv3wTZ9Q9c0j4X2KhGngQzD8,31800
|
||||
langsmith/sandbox/_exceptions.py,sha256=Ep3gT2BgSDVG7XLgDUzO_JQhy60maUZtxkppt3o64SY,8681
|
||||
langsmith/sandbox/_helpers.py,sha256=Gln5DklXNwLtujggJURS0u2I7px5vb80OogRW1QsAZw,13176
|
||||
langsmith/sandbox/_models.py,sha256=wDlwl5d2ZjvpzWERaUnArQXPSgAYRtaGwDbUcdkKDfs,23809
|
||||
langsmith/sandbox/_sandbox.py,sha256=fgYbYIZ4PQx_FtJai9Y2gR-zk-REom93ZtJDIsEeCgg,15318
|
||||
langsmith/sandbox/_transport.py,sha256=-6rAyfw3oPJNzBOYBXQxI3nXu0oWhBb27b5EjpiipV0,7869
|
||||
langsmith/sandbox/_ws_execute.py,sha256=0hq-4XCgN6DDQOYXyScCEeWHTdBTmNvcWvYrBDiFcjs,18259
|
||||
langsmith/schemas.py,sha256=vrj1TkWxgwC9on7EMWV61tbsrzyByL7jpAasA7kGc5o,45232
|
||||
langsmith/testing/__init__.py,sha256=jwUz-EFbIwCkQY2Xda1h1FajGOvaT7qrfQn6SOum1PI,305
|
||||
langsmith/testing/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/testing/__pycache__/_internal.cpython-311.pyc,,
|
||||
langsmith/testing/_internal.py,sha256=uoWDfoPNo89IgW7bJWBJGXpx9r2tSTfrrHzXtF-4Ftg,47961
|
||||
langsmith/utils.py,sha256=MF8Gm87iKVeah2empyr8gQEIWQiY82siKLdsfpJUj0o,29285
|
||||
langsmith/uuid.py,sha256=6MVSN67yRILlBtcXaFxQ9Z_VV_h_FoNilFGUssVLtzs,891
|
||||
langsmith/wrappers/__init__.py,sha256=13DgunKH7BAZOLoketG6IDdcO2fcS3bjqZKvZ3-rDa0,440
|
||||
langsmith/wrappers/__pycache__/__init__.cpython-311.pyc,,
|
||||
langsmith/wrappers/__pycache__/_anthropic.cpython-311.pyc,,
|
||||
langsmith/wrappers/__pycache__/_gemini.cpython-311.pyc,,
|
||||
langsmith/wrappers/__pycache__/_openai.cpython-311.pyc,,
|
||||
langsmith/wrappers/__pycache__/_openai_agents.cpython-311.pyc,,
|
||||
langsmith/wrappers/_anthropic.py,sha256=RZJtRyK_HsQwMGgSgfVxaPGtmjR8tP5k2juBu7pK088,19166
|
||||
langsmith/wrappers/_gemini.py,sha256=FdcwFWRz3NNCBUr1W_YLHTKigDc03VbM9WHBiIh36bI,27145
|
||||
langsmith/wrappers/_openai.py,sha256=CwjS0tnQA23EHm1Uk-vWWpHUZim4R-KrN9Il_pB5Omg,21639
|
||||
langsmith/wrappers/_openai_agents.py,sha256=0kxL1MlFkZXJgTtq6XoKdpnZtMV0iYpioCTJAto6uls,551
|
||||
4
venv/Lib/site-packages/langsmith-0.7.9.dist-info/WHEEL
Normal file
4
venv/Lib/site-packages/langsmith-0.7.9.dist-info/WHEEL
Normal file
@@ -0,0 +1,4 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: hatchling 1.29.0
|
||||
Root-Is-Purelib: true
|
||||
Tag: py3-none-any
|
||||
@@ -0,0 +1,2 @@
|
||||
[pytest11]
|
||||
langsmith_plugin = langsmith.pytest_plugin
|
||||
Reference in New Issue
Block a user