Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Binary file modified _build/.doctrees/blog/index.doctree
Binary file not shown.
Binary file not shown.
Binary file modified _build/.doctrees/environment.pickle
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
blogpost: true
date: 2026-05-18
author: Maria Oros, Tyler Caraza-Harter
category: Case Studies
tags: case-study, agforecast, asgi, fastapi, openlambda
language: en
---

# An Application Case Study: Forecasting Crop Disease with OpenLambda

*Maria Oros, Data Science Institute, University of Wisconsin–Madison*
*Tyler Caraza-Harter, Department of Computer Sciences, University of Wisconsin–Madison*

Our goal is to make an ever-growing set of applications deployable on OpenLambda (OL), with minimal modifications. We believe the best way to work towards this goal is to pick interesting applications that weren't originally designed for serverless deployment, try to port them to OL, and identify pain points. This helps us identify the most useful features to add to OL, to support similar deployments.

Recently, we selected an agricultural forecasting application (AgForecast), developed by the [Data Science Institute at UW–Madison](https://dsi.wisc.edu/), to port to OpenLambda: <https://github.com/UW-Madison-DSI/ag_forecasting_api>. AgForecast is an interesting case study, because it implements its REST API using FastAPI, which in turn uses [ASGI](https://asgi.readthedocs.io/en/latest/), the so-called "spiritual successor" to WSGI, which we recently started supporting in OpenLambda. WSGI is the basis for popular Python web-programming packages such as Django and Flask; new ASGI support opens the door to an even broader range of applications.

In this post, we describe the challenges of porting AgForecast to OL, and four new features we added to OL to make deployment of similar applications in the future simpler. The features are built-in ASGI support, direct GitHub-to-OL deployments, OL function environment variables, and OL-based pip compilation.
132 changes: 129 additions & 3 deletions _build/html/blog.html
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,12 @@ <h3>
</a>
</li>

<li>
<a href="blog/post/2026-05-18-ag-forecasting-case-study.html">
18 May - An Application Case Study: Forecasting Crop Disease with OpenLambda
</a>
</li>

</ul>
</div>
</div>
Expand All @@ -168,11 +174,27 @@ <h3>
<h3><a href="blog/tag.html">Tags</a></h3>
<ul class="ablog-cloud">

<li class="ablog-cloud ablog-cloud-3">
<li class="ablog-cloud ablog-cloud-1">
<a href="blog/tag/agforecast.html">agforecast</a>
</li>

<li class="ablog-cloud ablog-cloud-1">
<a href="blog/tag/announcement.html">announcement</a>
</li>

<li class="ablog-cloud ablog-cloud-3">
<li class="ablog-cloud ablog-cloud-1">
<a href="blog/tag/asgi.html">asgi</a>
</li>

<li class="ablog-cloud ablog-cloud-1">
<a href="blog/tag/case-study.html">case-study</a>
</li>

<li class="ablog-cloud ablog-cloud-1">
<a href="blog/tag/fastapi.html">fastapi</a>
</li>

<li class="ablog-cloud ablog-cloud-5">
<a href="blog/tag/openlambda.html">openlambda</a>
</li>

Expand All @@ -186,6 +208,10 @@ <h3>
</h3>
<ul>

<li>
<a href="blog/category/case-studies.html">Case Studies (1)</a>
</li>

<li>
<a href="blog/category/releases.html">Releases (1)</a>
</li>
Expand All @@ -201,7 +227,7 @@ <h3>
<ul>

<li>
<a href="blog/2026.html">2026 (1)</a>
<a href="blog/2026.html">2026 (2)</a>
</li>

</ul>
Expand Down Expand Up @@ -450,6 +476,106 @@ <h2 class="ablog-post-title">
</p>
<hr />
</div>

<div class="section ablog-post">
<h2 class="ablog-post-title">
<a href="blog/post/2026-05-18-ag-forecasting-case-study.html">An Application Case Study: Forecasting Crop Disease with OpenLambda</a>
</h2>
<ul class="ablog-archive">
<li>

<i class="fa fa-calendar"></i>

<span>2026-05-18</span>

</li>
<div class="ablog-sidebar-item ablog__postcard2">

<li id="ablog-sidebar-item author ablog__author">
<span>

<i class="fa-fw fa fa-user"></i>

</span>

<a href="blog/author/maria-oros.html">Maria Oros</a>
,
<a href="blog/author/tyler-caraza-harter.html">Tyler Caraza-Harter</a>

</li>

<li id="ablog-sidebar-item language ablog__language">
<span>

<i class="fa-fw fa fa-language"></i>

</span>

<a href="blog/language/en.html">en</a>

</li>

<li id="ablog-sidebar-item category ablog__category">
<span>

<i class="fa-fw fa fa-folder-open"></i>

</span>

<a href="blog/category/case-studies.html">Case Studies</a>

</li>

<li id="ablog-sidebar-item tags ablog__tags">
<span>

<i class="fa-fw fa fa-tags"></i>

</span>

<a href="blog/tag/case-study.html">case-study</a>

<a href="blog/tag/agforecast.html">agforecast</a>

<a href="blog/tag/asgi.html">asgi</a>

<a href="blog/tag/fastapi.html">fastapi</a>

<a href="blog/tag/openlambda.html">openlambda</a>

</li>

</div>
</ul>
<p class="ablog-post-excerpt"><p><em>Maria Oros, Data Science Institute, University of Wisconsin–Madison</em><br />
<em>Tyler Caraza-Harter, Department of Computer Sciences, University of Wisconsin–Madison</em></p>
<p>Our goal is to make an ever-growing set of applications deployable on OpenLambda (OL), with minimal modifications. We believe the best way to work towards this goal is to pick interesting applications that weren’t originally designed for serverless deployment, try to port them to OL, and identify pain points. This helps us identify the most useful features to add to OL, to support similar deployments.</p>
</p>

<script type="text/x-thebe-config">
{
requestKernel: true,
binderOptions: {
repo: "binder-examples/jupyter-stacks-datascience",
ref: "master",
},
codeMirrorConfig: {
theme: "abcdef",
mode: "python"
},
kernelOptions: {
name: "python3",
path: "./."
},
predefinedOutput: true
}
</script>
<script>kernelName = 'python3'</script>
<p class="ablog-post-expand">
<a href="blog/post/2026-05-18-ag-forecasting-case-study.html"><em>Read more ...</em></a>
</p>
<hr />
</div>

</div>

Expand Down
132 changes: 129 additions & 3 deletions _build/html/blog/2026.html
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,12 @@ <h3>
</a>
</li>

<li>
<a href="post/2026-05-18-ag-forecasting-case-study.html">
18 May - An Application Case Study: Forecasting Crop Disease with OpenLambda
</a>
</li>

</ul>
</div>
</div>
Expand All @@ -168,11 +174,27 @@ <h3>
<h3><a href="tag.html">Tags</a></h3>
<ul class="ablog-cloud">

<li class="ablog-cloud ablog-cloud-3">
<li class="ablog-cloud ablog-cloud-1">
<a href="tag/agforecast.html">agforecast</a>
</li>

<li class="ablog-cloud ablog-cloud-1">
<a href="tag/announcement.html">announcement</a>
</li>

<li class="ablog-cloud ablog-cloud-3">
<li class="ablog-cloud ablog-cloud-1">
<a href="tag/asgi.html">asgi</a>
</li>

<li class="ablog-cloud ablog-cloud-1">
<a href="tag/case-study.html">case-study</a>
</li>

<li class="ablog-cloud ablog-cloud-1">
<a href="tag/fastapi.html">fastapi</a>
</li>

<li class="ablog-cloud ablog-cloud-5">
<a href="tag/openlambda.html">openlambda</a>
</li>

Expand All @@ -186,6 +208,10 @@ <h3>
</h3>
<ul>

<li>
<a href="category/case-studies.html">Case Studies (1)</a>
</li>

<li>
<a href="category/releases.html">Releases (1)</a>
</li>
Expand All @@ -201,7 +227,7 @@ <h3>
<ul>

<li>
<a href="#">2026 (1)</a>
<a href="#">2026 (2)</a>
</li>

</ul>
Expand Down Expand Up @@ -454,6 +480,106 @@ <h2 class="ablog-post-title">
</p>
<hr />
</div>

<div class="section ablog-post">
<h2 class="ablog-post-title">
<a href="post/2026-05-18-ag-forecasting-case-study.html">An Application Case Study: Forecasting Crop Disease with OpenLambda</a>
</h2>
<ul class="ablog-archive">
<li>

<i class="fa fa-calendar"></i>

<span>2026-05-18</span>

</li>
<div class="ablog-sidebar-item ablog__postcard2">

<li id="ablog-sidebar-item author ablog__author">
<span>

<i class="fa-fw fa fa-user"></i>

</span>

<a href="author/maria-oros.html">Maria Oros</a>
,
<a href="author/tyler-caraza-harter.html">Tyler Caraza-Harter</a>

</li>

<li id="ablog-sidebar-item language ablog__language">
<span>

<i class="fa-fw fa fa-language"></i>

</span>

<a href="language/en.html">en</a>

</li>

<li id="ablog-sidebar-item category ablog__category">
<span>

<i class="fa-fw fa fa-folder-open"></i>

</span>

<a href="category/case-studies.html">Case Studies</a>

</li>

<li id="ablog-sidebar-item tags ablog__tags">
<span>

<i class="fa-fw fa fa-tags"></i>

</span>

<a href="tag/case-study.html">case-study</a>

<a href="tag/agforecast.html">agforecast</a>

<a href="tag/asgi.html">asgi</a>

<a href="tag/fastapi.html">fastapi</a>

<a href="tag/openlambda.html">openlambda</a>

</li>

</div>
</ul>
<p class="ablog-post-excerpt"><p><em>Maria Oros, Data Science Institute, University of Wisconsin–Madison</em><br />
<em>Tyler Caraza-Harter, Department of Computer Sciences, University of Wisconsin–Madison</em></p>
<p>Our goal is to make an ever-growing set of applications deployable on OpenLambda (OL), with minimal modifications. We believe the best way to work towards this goal is to pick interesting applications that weren’t originally designed for serverless deployment, try to port them to OL, and identify pain points. This helps us identify the most useful features to add to OL, to support similar deployments.</p>
</p>

<script type="text/x-thebe-config">
{
requestKernel: true,
binderOptions: {
repo: "binder-examples/jupyter-stacks-datascience",
ref: "master",
},
codeMirrorConfig: {
theme: "abcdef",
mode: "python"
},
kernelOptions: {
name: "python3",
path: "./blog"
},
predefinedOutput: true
}
</script>
<script>kernelName = 'python3'</script>
<p class="ablog-post-expand">
<a href="post/2026-05-18-ag-forecasting-case-study.html"><em>Read more ...</em></a>
</p>
<hr />
</div>

</div>

Expand Down
Loading