mirror of
https://github.com/hwchase17/langchain
synced 2024-10-31 15:20:26 +00:00
74134dd7e1
`langchain app add` and `langchain app remove` will now keep the dependencies list updated. --------- Co-authored-by: Nuno Campos <nuno@boringbits.io>
46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
from pathlib import Path
|
|
from typing import Any, Dict, Optional, Set, TypedDict
|
|
|
|
from tomlkit import load
|
|
|
|
|
|
def get_package_root(cwd: Optional[Path] = None) -> Path:
|
|
# traverse path for routes to host (any directory holding a pyproject.toml file)
|
|
package_root = Path.cwd() if cwd is None else cwd
|
|
visited: Set[Path] = set()
|
|
while package_root not in visited:
|
|
visited.add(package_root)
|
|
|
|
pyproject_path = package_root / "pyproject.toml"
|
|
if pyproject_path.exists():
|
|
return package_root
|
|
package_root = package_root.parent
|
|
raise FileNotFoundError("No pyproject.toml found")
|
|
|
|
|
|
class LangServeExport(TypedDict):
|
|
"""
|
|
Fields from pyproject.toml that are relevant to LangServe
|
|
|
|
Attributes:
|
|
module: The module to import from, tool.langserve.export_module
|
|
attr: The attribute to import from the module, tool.langserve.export_attr
|
|
package_name: The name of the package, tool.poetry.name
|
|
"""
|
|
|
|
module: str
|
|
attr: str
|
|
package_name: str
|
|
|
|
|
|
def get_langserve_export(filepath: Path) -> LangServeExport:
|
|
with open(filepath) as f:
|
|
data: Dict[str, Any] = load(f)
|
|
try:
|
|
module = data["tool"]["langserve"]["export_module"]
|
|
attr = data["tool"]["langserve"]["export_attr"]
|
|
package_name = data["tool"]["poetry"]["name"]
|
|
except KeyError as e:
|
|
raise KeyError("Invalid LangServe PyProject.toml") from e
|
|
return LangServeExport(module=module, attr=attr, package_name=package_name)
|