Skip to content

Commit 8c56d4c

Browse files
mariaob1201claude
andcommitted
Polish docs: author links, homepage CTA, content cleanup, pin deps
- Fill in blog author profile URLs (Maria Oros, Tyler Caraza-Harter) - Add homepage "Explore" CTA cards linking Worker/Applications/Blog - Rewrite applications/index.md: drop wall-of-text, internal refs, and blog duplication; add meta tags and structured case-study link - Flesh out ag-forecasting-api.md from stub into a full page - Pin requirements.txt to the Jupyter Book v1 stack (v2 is an incompatible MyST-CLI rewrite) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 3258689 commit 8c56d4c

5 files changed

Lines changed: 128 additions & 20 deletions

File tree

_config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ sphinx:
6868
- "https://open-lambda.org"
6969
maria-oros:
7070
- "Maria Oros"
71-
- ""
71+
- "https://dsi.wisc.edu/staff/oros-maria/"
7272
tyler-caraza-harter:
7373
- "Tyler Caraza-Harter"
74-
- ""
74+
- "https://www.cs.wisc.edu/staff/harter-tyler-2/"
7575
blog_default_author: open-lambda
7676
blog_feed_archives: true
7777
post_date_format: "%Y-%m-%d"

applications/ag-forecasting-api.md

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,58 @@
1+
---
2+
myst:
3+
html_meta:
4+
description: "FastAPI/ASGI crop disease forecasting service from UW–Madison DSI, ported to OpenLambda."
5+
keywords: "AgForecast, FastAPI, ASGI, OpenLambda, crop disease, Wisconet, serverless"
6+
---
7+
18
# Agricultural Forecasting API
29

3-
FastAPI-based ASGI service for crop disease risk forecasting using multi-source weather data, developed by the University of Wisconsin–Madison Data Science Institute and integrated with Open-Lambda technology.
10+
A FastAPI-based ASGI service for crop disease risk forecasting using multi-source weather
11+
data, developed by the [University of Wisconsin–Madison Data Science Institute](https://dsi.wisc.edu/)
12+
and ported to OpenLambda as a case study in deploying real-world applications.
413

514
---
615

716
## Overview
817

9-
The API provides geospatial agricultural intelligence for Wisconsin, combining weather data with validated crop disease forecasting models.
10-
The tool is now entering its next phase through integration with OpenLambda technology.
11-
For reference, please check the documentation [here](https://github.com/UW-Madison-DSI/ag_forecasting_api.git).
18+
The Ag Forecasting API provides geospatial agricultural intelligence for Wisconsin,
19+
combining weather data with peer-reviewed crop disease forecasting models. It exposes two
20+
parallel data pipelines through a unified interface:
21+
22+
- **Wisconet** — the public mesonet of weather stations across the state.
23+
- **IBM Environmental Intelligence** — point-location queries by latitude and longitude.
24+
25+
The core logic lives in the `ag_models_wrappers` module, which dynamically pulls the daily
26+
and hourly weather variables each model requires for a given forecasting date, runs the risk
27+
calculations, and returns localized predictions.
28+
29+
## Supported models
30+
31+
All models are based on peer-reviewed plant pathology research from UW–Madison:
32+
33+
- **Sporecaster** — white mold in soybean (dry and irrigated row-spacing variants)
34+
- **Tarspotter** — tar spot of corn
35+
- **Gray leaf spot** (corn)
36+
- **Frogeye leaf spot** (soybean)
37+
38+
## Architecture
39+
40+
The service is built on FastAPI (ASGI), with a Starlette `WSGIMiddleware` wrapper so it can
41+
also be served behind WSGI servers for legacy or mixed environments. A companion sub-package,
42+
`pywisconet`, provides a thin REST wrapper over the Wisconet v1 API for active-station
43+
discovery, station field metadata, and bulk measurement retrieval. IBM credentials are
44+
supplied via environment variables (`IBM_API_KEY`, `TENANT_ID`, `ORG_ID`).
45+
46+
## Running on OpenLambda
47+
48+
Porting AgForecast surfaced five concrete challenges — writable directories, package version
49+
pinning, GitHub deployment, asynchronous execution, and parallel pools — that drove four new
50+
OpenLambda features: per-function environment variables, `pip-compile` as a lambda, direct
51+
GitHub deployment, and built-in ASGI support. The full write-up is in the
52+
[blog case study](../blog/post/2026-05-18-ag-forecasting-case-study.md).
53+
54+
## References
55+
56+
- Source: [UW-Madison-DSI/ag_forecasting_api](https://github.com/UW-Madison-DSI/ag_forecasting_api)
57+
- Live deployment: [connect.doit.wisc.edu/ag_forecasting_api](https://connect.doit.wisc.edu/ag_forecasting_api)
58+
- License: MIT

applications/index.md

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,42 @@
1+
---
2+
myst:
3+
html_meta:
4+
description: "Real-world applications ported to OpenLambda, and the platform features their needs drove."
5+
keywords: "OpenLambda, serverless, applications, FastAPI, ASGI, WSGI"
6+
---
7+
18
# Applications
29

3-
We are building OL to support a wide range of applications with minimal changes required from those applications. Our approach is to port more real-world workloads and let their needs drive incremental improvements to the platform.
10+
We are building OpenLambda to support a wide range of applications with minimal changes
11+
required from those applications. Our approach is to port real-world workloads to the
12+
platform and let their needs drive incremental improvements — rather than guessing which
13+
features matter, we discover them by hitting real friction.
14+
15+
## Why applications drive the roadmap
16+
17+
Porting an application that was never designed for serverless surfaces concrete gaps. Each
18+
gap becomes a candidate feature, and shipping that feature makes the next, similar
19+
application easier to deploy. Recent work has been driven this way:
20+
21+
- **WSGI and ASGI support.** OpenLambda removed its dependency on Tornado and added optional
22+
support for both WSGI (the basis for Flask and Django) and ASGI (its async successor, used
23+
by FastAPI and Starlette). ASGI enables higher concurrency and better I/O utilization, but
24+
requires deeper runtime integration.
25+
- **Lower onboarding friction.** Environment-variable configuration for functions and direct
26+
GitHub-to-OpenLambda deployment reduce the steps needed to get a new workload running.
27+
- **Practical runtime gaps.** Real apps surface constraints such as read-only directories and
28+
the absence of `/dev/shm` for process pools — each a target for future work.
29+
30+
A recurring design question is whether to consolidate multiple functions into a single
31+
lambda-like unit. We believe co-locating functions is beneficial: it enables opportunistic
32+
state reuse, faster warm starts, and reduced overhead.
433

5-
## Want to deploy FastAPI apps on OpenLambda? Just ASGI us how.
34+
Looking ahead, better visibility into execution — such as detecting when an application is
35+
blocked on I/O — opens the door to billing models that distinguish active compute from idle
36+
waiting, addressing a longstanding serverless concern.
637

7-
In this post, we look at an agricultural forecasting application and an ASGI-based web service. The ag app is a natural fit for serverless because it is fundamentally stateless: results can be regenerated on demand from underlying data rather than relying on persistent runtime state. This also influenced the choice of FastAPI for a modern, async-friendly interface.
8-
To situate ASGI, it builds on the long history of WSGI-based Python web serving, where earlier work (including Jaime’s contributions) helped shape synchronous server patterns. ASGI extends this model with native async support, enabling higher concurrency and better I/O utilization, but requiring deeper runtime integration.
9-
A broader design question is whether it is beneficial to consolidate multiple functions into a single Lambda-like unit. We believe it is: co-locating functions enables opportunistic state reuse, faster warm starts, and reduced overhead.
10-
On the implementation side, OL removes its dependency on Tornado and adds optional support for both WSGI and ASGI applications. The ag forecasting app also surfaced practical issues, including /dev/shm constraints when using process pools, which required targeted adjustments.
11-
Looking ahead, improved visibility into execution—such as detecting when applications are blocked on I/O—opens the door to new billing models that distinguish compute from idle waiting time, addressing a longstanding serverless concern.
12-
More broadly, expanding the set of supported applications continues to drive OL’s evolution, alongside features like environment variables and GitHub-based deployments that further reduce friction for onboarding new workloads.
38+
## Case studies
1339

14-
- [Ag Forecasting API](ag-forecasting-api.md)
40+
- [**Ag Forecasting API**](ag-forecasting-api.md) — a FastAPI/ASGI crop-disease forecasting
41+
service from the UW–Madison Data Science Institute. See the full porting write-up in the
42+
[blog case study](../blog/post/2026-05-18-ag-forecasting-case-study.md).

index.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,36 @@ manually deploy workers yourself and put an HTTP load balancer in front of them.
3131

3232
---
3333

34+
## Explore
35+
36+
::::{grid} 1 1 3 3
37+
:gutter: 3
38+
39+
:::{grid-item-card} 🛠️ The Worker
40+
:link: worker
41+
:link-type: doc
42+
43+
The core server-side component — how it handles HTTP requests, manages containers, and scales horizontally.
44+
:::
45+
46+
:::{grid-item-card} 📦 Applications
47+
:link: applications/index
48+
:link-type: doc
49+
50+
Real-world workloads ported to OpenLambda, and the platform features their needs drove.
51+
:::
52+
53+
:::{grid-item-card} 📰 Blog
54+
:link: blog/index
55+
:link-type: doc
56+
57+
Release notes, performance experiments, and design deep-dives from the project.
58+
:::
59+
60+
::::
61+
62+
---
63+
3464
## Related Publications
3565

3666
```{list-table}

requirements.txt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
jupyter-book>=1.0.0
2-
sphinx-book-theme>=1.1.0
3-
myst-parser>=3.0.0
4-
sphinx-copybutton
5-
ablog>=0.11
1+
# Pinned to the Jupyter Book v1 (Sphinx-based) stack used by this site.
2+
# Do NOT bump jupyter-book to 2.x: v2 is a MyST-CLI rewrite incompatible
3+
# with this repo's _config.yml / _toc.yml and sphinx_book_theme setup.
4+
jupyter-book==1.0.4.post1
5+
sphinx-book-theme==1.1.3
6+
myst-parser==3.0.1
7+
sphinx-copybutton==0.5.2
8+
ablog==0.11.13

0 commit comments

Comments
 (0)