mirror of https://github.com/hwchase17/langchain
Refactored `math_utils` (#7961)
`math_utils.py` is in the root code folder. This creates the `langchain.math_utils: Math Utils` group on the API Reference navigation ToC, on the same level with `Chains` and `Agents` which is not correct. Refactoring: - created the `utils/` folder - moved `math_utils.py` to `utils/math.py` - moved `utils.py` to `utils/utils.py` - split `utils.py` into `utils.py, env.py, strings.py` - added module description @baskaryanpull/8046/head
parent
5137f40dd6
commit
995220b797
@ -0,0 +1,33 @@
|
||||
"""
|
||||
Utility functions for langchain.
|
||||
|
||||
These functions do not depend on any other langchain modules.
|
||||
"""
|
||||
|
||||
from langchain.utils.env import get_from_dict_or_env, get_from_env
|
||||
from langchain.utils.math import cosine_similarity, cosine_similarity_top_k
|
||||
from langchain.utils.strings import comma_list, stringify_dict, stringify_value
|
||||
from langchain.utils.utils import (
|
||||
check_package_version,
|
||||
get_pydantic_field_names,
|
||||
guard_import,
|
||||
mock_now,
|
||||
raise_for_status_with_text,
|
||||
xor_args,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
"check_package_version",
|
||||
"comma_list",
|
||||
"cosine_similarity",
|
||||
"cosine_similarity_top_k",
|
||||
"get_from_dict_or_env",
|
||||
"get_from_env",
|
||||
"get_pydantic_field_names",
|
||||
"guard_import",
|
||||
"mock_now",
|
||||
"raise_for_status_with_text",
|
||||
"stringify_dict",
|
||||
"stringify_value",
|
||||
"xor_args",
|
||||
]
|
@ -0,0 +1,26 @@
|
||||
import os
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
|
||||
def get_from_dict_or_env(
|
||||
data: Dict[str, Any], key: str, env_key: str, default: Optional[str] = None
|
||||
) -> str:
|
||||
"""Get a value from a dictionary or an environment variable."""
|
||||
if key in data and data[key]:
|
||||
return data[key]
|
||||
else:
|
||||
return get_from_env(key, env_key, default=default)
|
||||
|
||||
|
||||
def get_from_env(key: str, env_key: str, default: Optional[str] = None) -> str:
|
||||
"""Get a value from a dictionary or an environment variable."""
|
||||
if env_key in os.environ and os.environ[env_key]:
|
||||
return os.environ[env_key]
|
||||
elif default is not None:
|
||||
return default
|
||||
else:
|
||||
raise ValueError(
|
||||
f"Did not find {key}, please add an environment variable"
|
||||
f" `{env_key}` which contains it, or pass"
|
||||
f" `{key}` as a named parameter."
|
||||
)
|
@ -0,0 +1,39 @@
|
||||
from typing import Any, List
|
||||
|
||||
|
||||
def stringify_value(val: Any) -> str:
|
||||
"""Stringify a value.
|
||||
|
||||
Args:
|
||||
val: The value to stringify.
|
||||
|
||||
Returns:
|
||||
str: The stringified value.
|
||||
"""
|
||||
if isinstance(val, str):
|
||||
return val
|
||||
elif isinstance(val, dict):
|
||||
return "\n" + stringify_dict(val)
|
||||
elif isinstance(val, list):
|
||||
return "\n".join(stringify_value(v) for v in val)
|
||||
else:
|
||||
return str(val)
|
||||
|
||||
|
||||
def stringify_dict(data: dict) -> str:
|
||||
"""Stringify a dictionary.
|
||||
|
||||
Args:
|
||||
data: The dictionary to stringify.
|
||||
|
||||
Returns:
|
||||
str: The stringified dictionary.
|
||||
"""
|
||||
text = ""
|
||||
for key, value in data.items():
|
||||
text += key + ": " + stringify_value(value) + "\n"
|
||||
return text
|
||||
|
||||
|
||||
def comma_list(items: List[Any]) -> str:
|
||||
return ", ".join(str(item) for item in items)
|
Loading…
Reference in New Issue