Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

python[minor]: pytest integration #1362

Merged
merged 65 commits into from
Jan 21, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
ed71173
rfc: manually set test case inputs/outputs
baskaryan Dec 30, 2024
80cbf66
fmt
baskaryan Dec 31, 2024
b33f75a
fmt
baskaryan Jan 2, 2025
37f43cb
fmt
baskaryan Jan 2, 2025
cf82fd6
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 2, 2025
80d4205
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 3, 2025
fa8882f
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 3, 2025
6b999b4
fmt
baskaryan Jan 3, 2025
cbbf3a3
fmt
baskaryan Jan 3, 2025
a61d7d0
fmt
baskaryan Jan 3, 2025
cf37a91
fmt
baskaryan Jan 3, 2025
c9addf0
fmt
baskaryan Jan 3, 2025
d814ec5
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 6, 2025
8700d4b
fmt
baskaryan Jan 6, 2025
376a645
fmt
baskaryan Jan 6, 2025
81e41f4
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 8, 2025
d5d4ebb
rc release
baskaryan Jan 8, 2025
6940ace
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 8, 2025
d3ed9c6
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 8, 2025
bd72391
add better error messaging
isahers1 Jan 8, 2025
542d76e
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 8, 2025
aaf41c9
fmt
baskaryan Jan 8, 2025
d7beea8
wait example updates
baskaryan Jan 8, 2025
c4de666
Merge branch 'bagatur/rfc_set_test_vals' of github.com:langchain-ai/l…
baskaryan Jan 8, 2025
44897c7
fmt
baskaryan Jan 9, 2025
2192c09
fmt
baskaryan Jan 9, 2025
7b433a2
fmt
baskaryan Jan 9, 2025
48670e3
rc2
baskaryan Jan 9, 2025
78eeabf
fmt
baskaryan Jan 9, 2025
e1c9d7c
fmt
baskaryan Jan 9, 2025
400e38b
ptyest plugin
baskaryan Jan 10, 2025
9250bbf
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 10, 2025
414ef69
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 10, 2025
1446452
fmt
baskaryan Jan 11, 2025
790617d
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 11, 2025
37ceca0
fmt
baskaryan Jan 13, 2025
1fca587
rc6
baskaryan Jan 13, 2025
88e6f63
fmt
baskaryan Jan 13, 2025
43509c2
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 14, 2025
233ae72
update table
baskaryan Jan 14, 2025
996e21f
fmt
baskaryan Jan 15, 2025
d79bec9
Merge branch 'main' into bagatur/rfc_set_test_vals
baskaryan Jan 15, 2025
99069fb
group by test suite
baskaryan Jan 15, 2025
6076c29
fmt
baskaryan Jan 15, 2025
d4d1695
fmt
baskaryan Jan 15, 2025
441a8b1
fmt
baskaryan Jan 15, 2025
05dbf16
fmt
baskaryan Jan 15, 2025
82cd582
rc7
baskaryan Jan 15, 2025
e56a68f
fmt
baskaryan Jan 15, 2025
d049218
update api ref
baskaryan Jan 16, 2025
e400c93
fix LANGSMITH_TEST_TRACKING=false
baskaryan Jan 16, 2025
5752078
fmt
baskaryan Jan 16, 2025
8f336f4
fix entrypoint
baskaryan Jan 16, 2025
a5ad0ef
rm script
baskaryan Jan 17, 2025
6aa0062
rename plugin
baskaryan Jan 17, 2025
65dbe26
rename output plugin
baskaryan Jan 17, 2025
3773cb8
rc12
baskaryan Jan 17, 2025
48ff3c9
fix val logging
baskaryan Jan 18, 2025
e7675c1
rc13
baskaryan Jan 19, 2025
2bc8ad5
rc14
baskaryan Jan 20, 2025
66c7799
rc15
baskaryan Jan 20, 2025
ce08bfa
cr
baskaryan Jan 20, 2025
b2f6f87
merge
baskaryan Jan 20, 2025
4084685
nit
baskaryan Jan 20, 2025
341798c
merge
baskaryan Jan 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 4 additions & 18 deletions python/docs/create_api_rst.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""Script for auto-generating api_reference.rst."""

Check notice on line 1 in python/docs/create_api_rst.py

View workflow job for this annotation

GitHub Actions / benchmark

Benchmark results

........... create_5_000_run_trees: Mean +- std dev: 683 ms +- 50 ms ........... create_10_000_run_trees: Mean +- std dev: 1.39 sec +- 0.10 sec ........... create_20_000_run_trees: Mean +- std dev: 2.82 sec +- 0.08 sec ........... dumps_class_nested_py_branch_and_leaf_200x400: Mean +- std dev: 716 us +- 14 us ........... dumps_class_nested_py_leaf_50x100: Mean +- std dev: 25.6 ms +- 0.5 ms ........... dumps_class_nested_py_leaf_100x200: Mean +- std dev: 105 ms +- 3 ms ........... dumps_dataclass_nested_50x100: Mean +- std dev: 25.7 ms +- 0.4 ms ........... WARNING: the benchmark result may be unstable * the standard deviation (18.1 ms) is 24% of the mean (76.4 ms) Try to rerun the benchmark with more runs, values and/or loops. Run 'python -m pyperf system tune' command to reduce the system jitter. Use pyperf stats, pyperf dump and pyperf hist to analyze results. Use --quiet option to hide these warnings. dumps_pydantic_nested_50x100: Mean +- std dev: 76.4 ms +- 18.1 ms ........... dumps_pydanticv1_nested_50x100: Mean +- std dev: 200 ms +- 3 ms

Check notice on line 1 in python/docs/create_api_rst.py

View workflow job for this annotation

GitHub Actions / benchmark

Comparison against main

+-----------------------------------------------+----------+------------------------+ | Benchmark | main | changes | +===============================================+==========+========================+ | dumps_pydanticv1_nested_50x100 | 214 ms | 200 ms: 1.07x faster | +-----------------------------------------------+----------+------------------------+ | dumps_class_nested_py_leaf_100x200 | 104 ms | 105 ms: 1.01x slower | +-----------------------------------------------+----------+------------------------+ | dumps_class_nested_py_leaf_50x100 | 25.3 ms | 25.6 ms: 1.01x slower | +-----------------------------------------------+----------+------------------------+ | dumps_class_nested_py_branch_and_leaf_200x400 | 707 us | 716 us: 1.01x slower | +-----------------------------------------------+----------+------------------------+ | dumps_dataclass_nested_50x100 | 25.4 ms | 25.7 ms: 1.01x slower | +-----------------------------------------------+----------+------------------------+ | create_5_000_run_trees | 665 ms | 683 ms: 1.03x slower | +-----------------------------------------------+----------+------------------------+ | create_10_000_run_trees | 1.29 sec | 1.39 sec: 1.08x slower | +-----------------------------------------------+----------+------------------------+ | create_20_000_run_trees | 2.59 sec | 2.82 sec: 1.09x slower | +-----------------------------------------------+----------+------------------------+ | dumps_pydantic_nested_50x100 | 67.6 ms | 76.4 ms: 1.13x slower | +-----------------------------------------------+----------+------------------------+ | Geometric mean | (ref) | 1.03x slower | +-----------------------------------------------+----------+------------------------+

import importlib
import inspect
Expand Down Expand Up @@ -108,18 +108,6 @@
else "Pydantic" if issubclass(type_, BaseModel) else "Regular"
)
)
# if hasattr(type_, "__slots__"):
# for func_name, func_type in inspect.getmembers(type_):
# if inspect.isfunction(func_type):
# functions.append(
# FunctionInfo(
# name=func_name,
# qualified_name=f"{namespace}.{name}.{func_name}",
# is_public=not func_name.startswith("_"),
# is_deprecated=".. deprecated::"
# in (func_type.__doc__ or ""),
# )
# )
classes_.append(
ClassInfo(
name=name,
Expand Down Expand Up @@ -156,7 +144,7 @@
if file_path.name not in {
"_runner.py",
"_arunner.py",
"_testing.py",
"_internal.py",
"_expect.py",
"_openai.py",
}:
Expand Down Expand Up @@ -200,6 +188,7 @@
"utils",
"anonymizer",
"wrappers",
"testing",
]


Expand Down Expand Up @@ -387,20 +376,17 @@
| [AsyncClient](async_client/langsmith.async_client.AsyncClient) | Asynchronous client for interacting with the LangSmith API. |
| [traceable](run_helpers/langsmith.run_helpers.traceable) | Wrapper/decorator for tracing any function. |
| [wrap_openai](wrappers/langsmith.wrappers._openai.wrap_openai) | Wrapper for OpenAI client, adds LangSmith tracing to all OpenAI calls. |
| [evaluate](evaluation/langsmith.evaluation._runner.evaluate) | Evaluate an application on a dataset. |
| [aevaluate](evaluation/langsmith.evaluation._arunner.aevaluate) | Asynchronously evaluate an application on a dataset. |
| [unit](_testing/langsmith._testing.unit) | Create a LangSmith unit test. |
| [@pytest.mark.langsmith](/testing/langsmith.testing._internal.test) | LangSmith pytest integration. |

```{{toctree}}
:maxdepth: 2
:hidden:

client<client>
async_client<async_client>
evaluation<evaluation>
run_helpers<run_helpers>
wrappers<wrappers>
_testing<_testing>
testing<testing>
```

"""
Expand Down
6 changes: 3 additions & 3 deletions python/langsmith/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

if TYPE_CHECKING:
from langsmith._expect import expect
from langsmith._testing import test, unit
from langsmith.async_client import AsyncClient
from langsmith.client import Client
from langsmith.evaluation import aevaluate, evaluate
Expand All @@ -18,6 +17,7 @@
tracing_context,
)
from langsmith.run_trees import RunTree
from langsmith.testing._internal import test, unit
from langsmith.utils import (
ContextThreadPoolExecutor,
)
Expand Down Expand Up @@ -63,7 +63,7 @@ def __getattr__(name: str) -> Any:
return traceable

elif name == "test":
from langsmith._testing import test
from langsmith.testing._internal import test

return test

Expand Down Expand Up @@ -104,7 +104,7 @@ def __getattr__(name: str) -> Any:
return get_current_run_tree

elif name == "unit":
from langsmith._testing import unit
from langsmith.testing._internal import unit

return unit
elif name == "ContextThreadPoolExecutor":
Expand Down
2 changes: 1 addition & 1 deletion python/langsmith/_expect.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ def value(self, value: Any) -> _Matcher:

def score(
self,
score: Union[float, int],
score: Union[float, int, bool],
*,
key: str = "score",
source_run_id: Optional[ls_client.ID_TYPE] = None,
Expand Down
6 changes: 3 additions & 3 deletions python/langsmith/_internal/_beta_decorator.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ class LangSmithBetaWarning(UserWarning):


@functools.lru_cache(maxsize=100)
def _warn_once(message: str) -> None:
warnings.warn(message, LangSmithBetaWarning, stacklevel=2)
def _warn_once(message: str, stacklevel: int = 2) -> None:
warnings.warn(message, LangSmithBetaWarning, stacklevel=stacklevel)


def warn_beta(func: Callable) -> Callable:
@functools.wraps(func)
def wrapper(*args, **kwargs):
_warn_once(f"Function {func.__name__} is in beta.")
_warn_once(f"Function {func.__name__} is in beta.", stacklevel=3)
return func(*args, **kwargs)

return wrapper
Loading
Loading