forked from langchain-ai/langchain
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding Weather Loader (langchain-ai#5056)
Co-authored-by: Tyler Hutcherson <[email protected]> Co-authored-by: Dev 2049 <[email protected]>
- Loading branch information
1 parent
0b542a9
commit 68f0d45
Showing
5 changed files
with
154 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
101 changes: 101 additions & 0 deletions
101
docs/modules/indexes/document_loaders/examples/weather.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"id": "66a7777e", | ||
"metadata": {}, | ||
"source": [ | ||
"# Weather\n", | ||
"\n", | ||
">[OpenWeatherMap](https://openweathermap.org/) is an open source weather service provider\n", | ||
"\n", | ||
"This loader fetches the weather data from the OpenWeatherMap's OneCall API, using the pyowm Python package. You must initialize the loader with your OpenWeatherMap API token and the names of the cities you want the weather data for." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "9ec8a3b3", | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"from langchain.document_loaders import WeatherDataLoader" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "43128d8d", | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"#!pip install pyowm" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "51b0f0db", | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Set API key either by passing it in to constructor directly\n", | ||
"# or by setting the environment variable \"OPENWEATHERMAP_API_KEY\".\n", | ||
"\n", | ||
"from getpass import getpass\n", | ||
"\n", | ||
"OPENWEATHERMAP_API_KEY = getpass()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "35d6809a", | ||
"metadata": { | ||
"pycharm": { | ||
"name": "#%%\n" | ||
} | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"loader = WeatherDataLoader.from_params(['chennai','vellore'], openweathermap_api_key=OPENWEATHERMAP_API_KEY) " | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "05fe33b9", | ||
"metadata": { | ||
"pycharm": { | ||
"name": "#%%\n" | ||
} | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"documents = loader.load()\n", | ||
"documents" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "Python 3 (ipykernel)", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.11.3" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 5 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
"""Simple reader that reads weather data from OpenWeatherMap API""" | ||
from __future__ import annotations | ||
|
||
from datetime import datetime | ||
from typing import Iterator, List, Optional, Sequence | ||
|
||
from langchain.docstore.document import Document | ||
from langchain.document_loaders.base import BaseLoader | ||
from langchain.utilities.openweathermap import OpenWeatherMapAPIWrapper | ||
|
||
|
||
class WeatherDataLoader(BaseLoader): | ||
"""Weather Reader. | ||
Reads the forecast & current weather of any location using OpenWeatherMap's free | ||
API. Checkout 'https://openweathermap.org/appid' for more on how to generate a free | ||
OpenWeatherMap API. | ||
""" | ||
|
||
def __init__( | ||
self, | ||
client: OpenWeatherMapAPIWrapper, | ||
places: Sequence[str], | ||
) -> None: | ||
"""Initialize with parameters.""" | ||
super().__init__() | ||
self.client = client | ||
self.places = places | ||
|
||
@classmethod | ||
def from_params( | ||
cls, places: Sequence[str], *, openweathermap_api_key: Optional[str] = None | ||
) -> WeatherDataLoader: | ||
client = OpenWeatherMapAPIWrapper(openweathermap_api_key=openweathermap_api_key) | ||
return cls(client, places) | ||
|
||
def lazy_load( | ||
self, | ||
) -> Iterator[Document]: | ||
"""Lazily load weather data for the given locations.""" | ||
for place in self.places: | ||
metadata = {"queried_at": datetime.now()} | ||
content = self.client.run(place) | ||
yield Document(page_content=content, metadata=metadata) | ||
|
||
def load( | ||
self, | ||
) -> List[Document]: | ||
"""Load weather data for the given locations.""" | ||
return list(self.lazy_load()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters