Deployed c046d64 with MkDocs version: 1.3.0

This commit is contained in:
2022-07-10 17:49:51 +00:00
parent 9182ba84ed
commit b54bcd78f2
5 changed files with 333 additions and 454 deletions

View file

@ -472,42 +472,16 @@
<li class="md-nav__item">
<a href="#great_ai.save_model" class="md-nav__link">
save_model
</a>
<nav class="md-nav" aria-label="save_model">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#great_ai.models.save_model.save_model" class="md-nav__link">
save_model()
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#great_ai.use_model" class="md-nav__link">
use_model
</a>
<nav class="md-nav" aria-label="use_model">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#great_ai.models.use_model.use_model" class="md-nav__link">
use_model()
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -725,42 +699,16 @@
<li class="md-nav__item">
<a href="#great_ai.save_model" class="md-nav__link">
save_model
</a>
<nav class="md-nav" aria-label="save_model">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#great_ai.models.save_model.save_model" class="md-nav__link">
save_model()
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#great_ai.use_model" class="md-nav__link">
use_model
</a>
<nav class="md-nav" aria-label="use_model">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#great_ai.models.use_model.use_model" class="md-nav__link">
use_model()
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -1127,7 +1075,10 @@
<span class="normal"><a href="#__codelineno-0-279">279</a></span>
<span class="normal"><a href="#__codelineno-0-280">280</a></span>
<span class="normal"><a href="#__codelineno-0-281">281</a></span>
<span class="normal"><a href="#__codelineno-0-282">282</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="k">class</span> <span class="nc">GreatAI</span><span class="p">(</span><span class="n">Generic</span><span class="p">[</span><span class="n">T</span><span class="p">,</span> <span class="n">V</span><span class="p">]):</span>
<span class="normal"><a href="#__codelineno-0-282">282</a></span>
<span class="normal"><a href="#__codelineno-0-283">283</a></span>
<span class="normal"><a href="#__codelineno-0-284">284</a></span>
<span class="normal"><a href="#__codelineno-0-285">285</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="k">class</span> <span class="nc">GreatAI</span><span class="p">(</span><span class="n">Generic</span><span class="p">[</span><span class="n">T</span><span class="p">,</span> <span class="n">V</span><span class="p">]):</span>
<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="vm">__name__</span><span class="p">:</span> <span class="nb">str</span>
<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="vm">__doc__</span><span class="p">:</span> <span class="nb">str</span>
<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
@ -1144,228 +1095,231 @@
<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped_func</span> <span class="o">=</span> <span class="n">wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)(</span><span class="n">freeze_arguments</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cached_func</span><span class="p">))</span>
<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;GreatAI wrapper for interacting with the `</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">` function.</span><span class="se">\n\n</span><span class="si">{</span><span class="n">dedent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="bp">self</span><span class="o">.</span><span class="n">version</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">flat_model_versions</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">k</span><span class="si">}</span><span class="s2">-v</span><span class="si">{</span><span class="n">v</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">model_versions</span><span class="p">)</span>
<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">if</span> <span class="n">flat_model_versions</span><span class="p">:</span>
<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="bp">self</span><span class="o">.</span><span class="n">version</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;+</span><span class="si">{</span><span class="n">flat_model_versions</span><span class="si">}</span><span class="s2">&quot;</span>
<a id="__codelineno-0-67" name="__codelineno-0-67"></a>
<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span> <span class="o">=</span> <span class="n">FastAPI</span><span class="p">(</span>
<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">title</span><span class="o">=</span><span class="n">snake_case_to_text</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__name__</span><span class="p">),</span>
<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">version</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">version</span><span class="p">,</span>
<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">description</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span>
<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">Find out more in the [dashboard](</span><span class="si">{</span><span class="n">DASHBOARD_PATH</span><span class="si">}</span><span class="s2">).&quot;</span><span class="p">,</span>
<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">docs_url</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">redoc_url</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="p">)</span>
<a id="__codelineno-0-76" name="__codelineno-0-76"></a>
<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_bootstrap_rest_api</span><span class="p">()</span>
<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="nd">@overload</span>
<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span> <span class="c1"># type: ignore</span>
<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="c1"># &quot;Overloaded function signatures 1 and 2 overlap with incompatible return types&quot;</span>
<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="c1"># https://github.com/python/mypy/issues/12759</span>
<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">func</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">[</span><span class="n">V</span><span class="p">]],</span>
<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;GreatAI[Awaitable[Trace[V]], V]&quot;</span><span class="p">:</span>
<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="o">...</span>
<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="nd">@overload</span>
<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span>
<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="n">func</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">V</span><span class="p">],</span>
<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;GreatAI[Trace[V], V]&quot;</span><span class="p">:</span>
<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="o">...</span>
<a id="__codelineno-0-94" name="__codelineno-0-94"></a>
<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span>
<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="n">func</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">[</span><span class="n">V</span><span class="p">]],</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">V</span><span class="p">]],</span>
<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">[</span><span class="s2">&quot;GreatAI[Awaitable[Trace[V]], V]&quot;</span><span class="p">,</span> <span class="s2">&quot;GreatAI[Trace[V], V]&quot;</span><span class="p">]:</span>
<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="sd">&quot;&quot;&quot;Decorate a function by wrapping it in a GreatAI instance.</span>
<a id="__codelineno-0-100" name="__codelineno-0-100"></a>
<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> The function can be typed, synchronous or async. If it has</span>
<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> unwrapped parameters (parameters not affected by a @parameter</span>
<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> or @use_model decorator), those will be automatically wrapped.</span>
<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> The return value is replaced by a Trace (or Awaitable[Trace]),</span>
<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> while the original return value is available under the `.output`</span>
<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> property.</span>
<a id="__codelineno-0-108" name="__codelineno-0-108"></a>
<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> For configuration options, see great_ai.configure.</span>
<a id="__codelineno-0-110" name="__codelineno-0-110"></a>
<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> Examples:</span>
<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> &gt;&gt;&gt; @GreatAI.create</span>
<a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="sd"> ... def my_function(a):</span>
<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> ... return a + 2</span>
<a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> &gt;&gt;&gt; my_function(3).output</span>
<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="sd"> 5</span>
<a id="__codelineno-0-117" name="__codelineno-0-117"></a>
<a id="__codelineno-0-118" name="__codelineno-0-118"></a><span class="sd"> &gt;&gt;&gt; @GreatAI.create</span>
<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> ... def my_function(a: int) -&gt; int:</span>
<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> ... return a + 2</span>
<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> &gt;&gt;&gt; my_function(3)</span>
<a id="__codelineno-0-122" name="__codelineno-0-122"></a><span class="sd"> Trace[int]...</span>
<a id="__codelineno-0-123" name="__codelineno-0-123"></a>
<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> &gt;&gt;&gt; my_function(&#39;3&#39;).output</span>
<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="sd"> Traceback (most recent call last):</span>
<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="sd"> ...</span>
<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> TypeError: type of a must be int; got str instead</span>
<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> func: The prediction function that needs to be decorated.</span>
<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="p">(</span>
<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="sa">f</span><span class="s2">&quot;GreatAI wrapper for interacting with the `</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">` &quot;</span>
<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;function.</span><span class="se">\n\n</span><span class="si">{</span><span class="n">dedent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="p">)</span>
<a id="__codelineno-0-65" name="__codelineno-0-65"></a>
<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="bp">self</span><span class="o">.</span><span class="n">version</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="n">flat_model_versions</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">k</span><span class="si">}</span><span class="s2">-v</span><span class="si">{</span><span class="n">v</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">model_versions</span><span class="p">)</span>
<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">if</span> <span class="n">flat_model_versions</span><span class="p">:</span>
<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="bp">self</span><span class="o">.</span><span class="n">version</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;+</span><span class="si">{</span><span class="n">flat_model_versions</span><span class="si">}</span><span class="s2">&quot;</span>
<a id="__codelineno-0-70" name="__codelineno-0-70"></a>
<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span> <span class="o">=</span> <span class="n">FastAPI</span><span class="p">(</span>
<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">title</span><span class="o">=</span><span class="n">snake_case_to_text</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__name__</span><span class="p">),</span>
<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">version</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">version</span><span class="p">,</span>
<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">description</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span>
<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">Find out more in the [dashboard](</span><span class="si">{</span><span class="n">DASHBOARD_PATH</span><span class="si">}</span><span class="s2">).&quot;</span><span class="p">,</span>
<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">docs_url</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="n">redoc_url</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="p">)</span>
<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_bootstrap_rest_api</span><span class="p">()</span>
<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="nd">@overload</span>
<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span> <span class="c1"># type: ignore</span>
<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="c1"># Overloaded function signatures 1 and 2 overlap with incompatible return types</span>
<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="c1"># https://github.com/python/mypy/issues/12759</span>
<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="n">func</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">[</span><span class="n">V</span><span class="p">]],</span>
<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;GreatAI[Awaitable[Trace[V]], V]&quot;</span><span class="p">:</span>
<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="o">...</span>
<a id="__codelineno-0-90" name="__codelineno-0-90"></a>
<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="nd">@overload</span>
<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span>
<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">func</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">V</span><span class="p">],</span>
<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="s2">&quot;GreatAI[Trace[V], V]&quot;</span><span class="p">:</span>
<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="o">...</span>
<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span>
<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">func</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">[</span><span class="n">V</span><span class="p">]],</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">V</span><span class="p">]],</span>
<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">[</span><span class="s2">&quot;GreatAI[Awaitable[Trace[V]], V]&quot;</span><span class="p">,</span> <span class="s2">&quot;GreatAI[Trace[V], V]&quot;</span><span class="p">]:</span>
<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="sd">&quot;&quot;&quot;Decorate a function by wrapping it in a GreatAI instance.</span>
<a id="__codelineno-0-103" name="__codelineno-0-103"></a>
<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> The function can be typed, synchronous or async. If it has</span>
<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> unwrapped parameters (parameters not affected by a @parameter</span>
<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> or @use_model decorator), those will be automatically wrapped.</span>
<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> The return value is replaced by a Trace (or Awaitable[Trace]),</span>
<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> while the original return value is available under the `.output`</span>
<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> property.</span>
<a id="__codelineno-0-111" name="__codelineno-0-111"></a>
<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> For configuration options, see great_ai.configure.</span>
<a id="__codelineno-0-113" name="__codelineno-0-113"></a>
<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> Examples:</span>
<a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> &gt;&gt;&gt; @GreatAI.create</span>
<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="sd"> ... def my_function(a):</span>
<a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> ... return a + 2</span>
<a id="__codelineno-0-118" name="__codelineno-0-118"></a><span class="sd"> &gt;&gt;&gt; my_function(3).output</span>
<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> 5</span>
<a id="__codelineno-0-120" name="__codelineno-0-120"></a>
<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> &gt;&gt;&gt; @GreatAI.create</span>
<a id="__codelineno-0-122" name="__codelineno-0-122"></a><span class="sd"> ... def my_function(a: int) -&gt; int:</span>
<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="sd"> ... return a + 2</span>
<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> &gt;&gt;&gt; my_function(3)</span>
<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="sd"> Trace[int]...</span>
<a id="__codelineno-0-126" name="__codelineno-0-126"></a>
<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> &gt;&gt;&gt; my_function(&#39;3&#39;).output</span>
<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> Traceback (most recent call last):</span>
<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> ...</span>
<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> TypeError: type of a must be int; got str instead</span>
<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> A GreatAI instance wrapping `func`.</span>
<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> func: The prediction function that needs to be decorated.</span>
<a id="__codelineno-0-134" name="__codelineno-0-134"></a>
<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">return</span> <span class="n">GreatAI</span><span class="p">[</span><span class="n">Trace</span><span class="p">[</span><span class="n">V</span><span class="p">],</span> <span class="n">V</span><span class="p">](</span>
<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="n">func</span><span class="p">,</span>
<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">)</span>
<a id="__codelineno-0-139" name="__codelineno-0-139"></a>
<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped_func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> A GreatAI instance wrapping `func`.</span>
<a id="__codelineno-0-137" name="__codelineno-0-137"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-138" name="__codelineno-0-138"></a>
<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="k">return</span> <span class="n">GreatAI</span><span class="p">[</span><span class="n">Trace</span><span class="p">[</span><span class="n">V</span><span class="p">],</span> <span class="n">V</span><span class="p">](</span>
<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="n">func</span><span class="p">,</span>
<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="p">)</span>
<a id="__codelineno-0-142" name="__codelineno-0-142"></a>
<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="nd">@overload</span>
<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="k">def</span> <span class="nf">process_batch</span><span class="p">(</span>
<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="bp">self</span><span class="p">,</span>
<a id="__codelineno-0-146" name="__codelineno-0-146"></a> <span class="n">batch</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Tuple</span><span class="p">],</span>
<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="n">concurrency</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="n">unpack_arguments</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="kc">True</span><span class="p">],</span>
<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="n">do_not_persist_traces</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="o">...</span><span class="p">,</span>
<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Trace</span><span class="p">[</span><span class="n">V</span><span class="p">]]:</span>
<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="o">...</span>
<a id="__codelineno-0-153" name="__codelineno-0-153"></a>
<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="nd">@overload</span>
<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="k">def</span> <span class="nf">process_batch</span><span class="p">(</span>
<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="bp">self</span><span class="p">,</span>
<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="n">batch</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">,</span>
<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="n">concurrency</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">unpack_arguments</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="kc">False</span><span class="p">]</span> <span class="o">=</span> <span class="o">...</span><span class="p">,</span>
<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="n">do_not_persist_traces</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="o">...</span><span class="p">,</span>
<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Trace</span><span class="p">[</span><span class="n">V</span><span class="p">]]:</span>
<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="o">...</span>
<a id="__codelineno-0-164" name="__codelineno-0-164"></a>
<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="k">def</span> <span class="nf">process_batch</span><span class="p">(</span>
<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="bp">self</span><span class="p">,</span>
<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="n">batch</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">,</span>
<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="n">concurrency</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="n">unpack_arguments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="n">do_not_persist_traces</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Trace</span><span class="p">[</span><span class="n">V</span><span class="p">]]:</span>
<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">wrapped_function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped_func</span>
<a id="__codelineno-0-174" name="__codelineno-0-174"></a>
<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">def</span> <span class="nf">inner</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="k">return</span> <span class="p">(</span>
<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="n">wrapped_function</span><span class="p">(</span><span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span><span class="p">)</span>
<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="k">if</span> <span class="n">unpack_arguments</span>
<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="k">else</span> <span class="n">wrapped_function</span><span class="p">(</span>
<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="n">value</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span>
<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">)</span>
<a id="__codelineno-0-182" name="__codelineno-0-182"></a> <span class="p">)</span>
<a id="__codelineno-0-183" name="__codelineno-0-183"></a>
<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">inner_async</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-185" name="__codelineno-0-185"></a> <span class="k">return</span> <span class="k">await</span> <span class="n">cast</span><span class="p">(</span>
<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="n">Awaitable</span><span class="p">,</span>
<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="p">(</span>
<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="n">wrapped_function</span><span class="p">(</span>
<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span>
<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="p">)</span>
<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="k">if</span> <span class="n">unpack_arguments</span>
<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="k">else</span> <span class="n">wrapped_function</span><span class="p">(</span>
<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="n">value</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span>
<a id="__codelineno-0-194" name="__codelineno-0-194"></a> <span class="p">)</span>
<a id="__codelineno-0-195" name="__codelineno-0-195"></a> <span class="p">),</span>
<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="p">)</span>
<a id="__codelineno-0-197" name="__codelineno-0-197"></a>
<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span>
<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">tqdm</span><span class="p">(</span>
<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="n">parallel_map</span><span class="p">(</span>
<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="n">inner_async</span>
<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="k">if</span> <span class="n">get_function_metadata_store</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">is_asynchronous</span>
<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="k">else</span> <span class="n">inner</span><span class="p">,</span>
<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="n">batch</span><span class="p">,</span>
<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="n">concurrency</span><span class="o">=</span><span class="n">concurrency</span><span class="p">,</span>
<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="p">),</span>
<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="n">total</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">batch</span><span class="p">),</span>
<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="p">)</span>
<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="p">)</span>
<a id="__codelineno-0-210" name="__codelineno-0-210"></a>
<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="k">def</span> <span class="nf">_get_cached_traced_function</span><span class="p">(</span>
<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="n">func</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="n">V</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">[</span><span class="n">V</span><span class="p">]]]</span>
<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">T</span><span class="p">]:</span>
<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="nd">@lru_cache</span><span class="p">(</span><span class="n">maxsize</span><span class="o">=</span><span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">prediction_cache_size</span><span class="p">)</span>
<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="k">def</span> <span class="nf">func_in_tracing_context_sync</span><span class="p">(</span>
<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="n">do_not_persist_traces</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-219" name="__codelineno-0-219"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
<a id="__codelineno-0-220" name="__codelineno-0-220"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="k">with</span> <span class="n">TracingContext</span><span class="p">[</span><span class="n">V</span><span class="p">](</span>
<a id="__codelineno-0-222" name="__codelineno-0-222"></a> <span class="n">func</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span>
<a id="__codelineno-0-223" name="__codelineno-0-223"></a> <span class="p">)</span> <span class="k">as</span> <span class="n">t</span><span class="p">:</span>
<a id="__codelineno-0-224" name="__codelineno-0-224"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="n">T</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">finalise</span><span class="p">(</span><span class="n">output</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
<a id="__codelineno-0-226" name="__codelineno-0-226"></a>
<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="nd">@alru_cache</span><span class="p">(</span><span class="n">maxsize</span><span class="o">=</span><span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">prediction_cache_size</span><span class="p">)</span>
<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">func_in_tracing_context_async</span><span class="p">(</span>
<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="n">do_not_persist_traces</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="k">with</span> <span class="n">TracingContext</span><span class="p">[</span><span class="n">V</span><span class="p">](</span>
<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="n">func</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span>
<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="p">)</span> <span class="k">as</span> <span class="n">t</span><span class="p">:</span>
<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">cast</span><span class="p">(</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">],</span> <span class="n">func</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="n">T</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">finalise</span><span class="p">(</span><span class="n">output</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
<a id="__codelineno-0-238" name="__codelineno-0-238"></a>
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span>
<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">T</span><span class="p">],</span>
<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="p">(</span>
<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="n">func_in_tracing_context_async</span>
<a id="__codelineno-0-243" name="__codelineno-0-243"></a> <span class="k">if</span> <span class="n">get_function_metadata_store</span><span class="p">(</span><span class="n">func</span><span class="p">)</span><span class="o">.</span><span class="n">is_asynchronous</span>
<a id="__codelineno-0-244" name="__codelineno-0-244"></a> <span class="k">else</span> <span class="n">func_in_tracing_context_sync</span>
<a id="__codelineno-0-245" name="__codelineno-0-245"></a> <span class="p">),</span>
<a id="__codelineno-0-246" name="__codelineno-0-246"></a> <span class="p">)</span>
<a id="__codelineno-0-247" name="__codelineno-0-247"></a>
<a id="__codelineno-0-248" name="__codelineno-0-248"></a> <span class="k">def</span> <span class="nf">_bootstrap_rest_api</span><span class="p">(</span>
<a id="__codelineno-0-249" name="__codelineno-0-249"></a> <span class="bp">self</span><span class="p">,</span>
<a id="__codelineno-0-250" name="__codelineno-0-250"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-251" name="__codelineno-0-251"></a> <span class="n">route_config</span> <span class="o">=</span> <span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">route_config</span>
<a id="__codelineno-0-252" name="__codelineno-0-252"></a>
<a id="__codelineno-0-253" name="__codelineno-0-253"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">prediction_endpoint_enabled</span><span class="p">:</span>
<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="n">bootstrap_prediction_endpoint</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped_func</span><span class="p">)</span>
<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped_func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
<a id="__codelineno-0-146" name="__codelineno-0-146"></a> <span class="nd">@overload</span>
<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="k">def</span> <span class="nf">process_batch</span><span class="p">(</span>
<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="bp">self</span><span class="p">,</span>
<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="n">batch</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Tuple</span><span class="p">],</span>
<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="n">concurrency</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="n">unpack_arguments</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="kc">True</span><span class="p">],</span>
<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="n">do_not_persist_traces</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="o">...</span><span class="p">,</span>
<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Trace</span><span class="p">[</span><span class="n">V</span><span class="p">]]:</span>
<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="o">...</span>
<a id="__codelineno-0-156" name="__codelineno-0-156"></a>
<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="nd">@overload</span>
<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="k">def</span> <span class="nf">process_batch</span><span class="p">(</span>
<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="bp">self</span><span class="p">,</span>
<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">batch</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">,</span>
<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">concurrency</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="n">unpack_arguments</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="kc">False</span><span class="p">]</span> <span class="o">=</span> <span class="o">...</span><span class="p">,</span>
<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="n">do_not_persist_traces</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="o">...</span><span class="p">,</span>
<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Trace</span><span class="p">[</span><span class="n">V</span><span class="p">]]:</span>
<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="o">...</span>
<a id="__codelineno-0-167" name="__codelineno-0-167"></a>
<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">def</span> <span class="nf">process_batch</span><span class="p">(</span>
<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="bp">self</span><span class="p">,</span>
<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="n">batch</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">,</span>
<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="n">concurrency</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">unpack_arguments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="n">do_not_persist_traces</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Trace</span><span class="p">[</span><span class="n">V</span><span class="p">]]:</span>
<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="n">wrapped_function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped_func</span>
<a id="__codelineno-0-177" name="__codelineno-0-177"></a>
<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="k">def</span> <span class="nf">inner</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="k">return</span> <span class="p">(</span>
<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="n">wrapped_function</span><span class="p">(</span><span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span><span class="p">)</span>
<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="k">if</span> <span class="n">unpack_arguments</span>
<a id="__codelineno-0-182" name="__codelineno-0-182"></a> <span class="k">else</span> <span class="n">wrapped_function</span><span class="p">(</span>
<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="n">value</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span>
<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="p">)</span>
<a id="__codelineno-0-185" name="__codelineno-0-185"></a> <span class="p">)</span>
<a id="__codelineno-0-186" name="__codelineno-0-186"></a>
<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">inner_async</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="k">return</span> <span class="k">await</span> <span class="n">cast</span><span class="p">(</span>
<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="n">Awaitable</span><span class="p">,</span>
<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="p">(</span>
<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="n">wrapped_function</span><span class="p">(</span>
<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span>
<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="p">)</span>
<a id="__codelineno-0-194" name="__codelineno-0-194"></a> <span class="k">if</span> <span class="n">unpack_arguments</span>
<a id="__codelineno-0-195" name="__codelineno-0-195"></a> <span class="k">else</span> <span class="n">wrapped_function</span><span class="p">(</span>
<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="n">value</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span>
<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="p">)</span>
<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="p">),</span>
<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="p">)</span>
<a id="__codelineno-0-200" name="__codelineno-0-200"></a>
<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span>
<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="n">tqdm</span><span class="p">(</span>
<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="n">parallel_map</span><span class="p">(</span>
<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="n">inner_async</span>
<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="k">if</span> <span class="n">get_function_metadata_store</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">is_asynchronous</span>
<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="k">else</span> <span class="n">inner</span><span class="p">,</span>
<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="n">batch</span><span class="p">,</span>
<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="n">concurrency</span><span class="o">=</span><span class="n">concurrency</span><span class="p">,</span>
<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="p">),</span>
<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="n">total</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">batch</span><span class="p">),</span>
<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="p">)</span>
<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="p">)</span>
<a id="__codelineno-0-213" name="__codelineno-0-213"></a>
<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="k">def</span> <span class="nf">_get_cached_traced_function</span><span class="p">(</span>
<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="n">func</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="n">V</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">[</span><span class="n">V</span><span class="p">]]]</span>
<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">T</span><span class="p">]:</span>
<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="nd">@lru_cache</span><span class="p">(</span><span class="n">maxsize</span><span class="o">=</span><span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">prediction_cache_size</span><span class="p">)</span>
<a id="__codelineno-0-219" name="__codelineno-0-219"></a> <span class="k">def</span> <span class="nf">func_in_tracing_context_sync</span><span class="p">(</span>
<a id="__codelineno-0-220" name="__codelineno-0-220"></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="n">do_not_persist_traces</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-222" name="__codelineno-0-222"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
<a id="__codelineno-0-223" name="__codelineno-0-223"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-224" name="__codelineno-0-224"></a> <span class="k">with</span> <span class="n">TracingContext</span><span class="p">[</span><span class="n">V</span><span class="p">](</span>
<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="n">func</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span>
<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="p">)</span> <span class="k">as</span> <span class="n">t</span><span class="p">:</span>
<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="n">T</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">finalise</span><span class="p">(</span><span class="n">output</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
<a id="__codelineno-0-229" name="__codelineno-0-229"></a>
<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="nd">@alru_cache</span><span class="p">(</span><span class="n">maxsize</span><span class="o">=</span><span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">prediction_cache_size</span><span class="p">)</span>
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">func_in_tracing_context_async</span><span class="p">(</span>
<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="n">do_not_persist_traces</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="k">with</span> <span class="n">TracingContext</span><span class="p">[</span><span class="n">V</span><span class="p">](</span>
<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="n">func</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">do_not_persist_traces</span><span class="o">=</span><span class="n">do_not_persist_traces</span>
<a id="__codelineno-0-238" name="__codelineno-0-238"></a> <span class="p">)</span> <span class="k">as</span> <span class="n">t</span><span class="p">:</span>
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">cast</span><span class="p">(</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">],</span> <span class="n">func</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="n">T</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">finalise</span><span class="p">(</span><span class="n">output</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
<a id="__codelineno-0-241" name="__codelineno-0-241"></a>
<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span>
<a id="__codelineno-0-243" name="__codelineno-0-243"></a> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">T</span><span class="p">],</span>
<a id="__codelineno-0-244" name="__codelineno-0-244"></a> <span class="p">(</span>
<a id="__codelineno-0-245" name="__codelineno-0-245"></a> <span class="n">func_in_tracing_context_async</span>
<a id="__codelineno-0-246" name="__codelineno-0-246"></a> <span class="k">if</span> <span class="n">get_function_metadata_store</span><span class="p">(</span><span class="n">func</span><span class="p">)</span><span class="o">.</span><span class="n">is_asynchronous</span>
<a id="__codelineno-0-247" name="__codelineno-0-247"></a> <span class="k">else</span> <span class="n">func_in_tracing_context_sync</span>
<a id="__codelineno-0-248" name="__codelineno-0-248"></a> <span class="p">),</span>
<a id="__codelineno-0-249" name="__codelineno-0-249"></a> <span class="p">)</span>
<a id="__codelineno-0-250" name="__codelineno-0-250"></a>
<a id="__codelineno-0-251" name="__codelineno-0-251"></a> <span class="k">def</span> <span class="nf">_bootstrap_rest_api</span><span class="p">(</span>
<a id="__codelineno-0-252" name="__codelineno-0-252"></a> <span class="bp">self</span><span class="p">,</span>
<a id="__codelineno-0-253" name="__codelineno-0-253"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="n">route_config</span> <span class="o">=</span> <span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">route_config</span>
<a id="__codelineno-0-255" name="__codelineno-0-255"></a>
<a id="__codelineno-0-256" name="__codelineno-0-256"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">docs_endpoints_enabled</span><span class="p">:</span>
<a id="__codelineno-0-257" name="__codelineno-0-257"></a> <span class="n">bootstrap_docs_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">)</span>
<a id="__codelineno-0-256" name="__codelineno-0-256"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">prediction_endpoint_enabled</span><span class="p">:</span>
<a id="__codelineno-0-257" name="__codelineno-0-257"></a> <span class="n">bootstrap_prediction_endpoint</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped_func</span><span class="p">)</span>
<a id="__codelineno-0-258" name="__codelineno-0-258"></a>
<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">dashboard_enabled</span><span class="p">:</span>
<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="n">bootstrap_dashboard</span><span class="p">(</span>
<a id="__codelineno-0-261" name="__codelineno-0-261"></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">,</span>
<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="n">function_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span>
<a id="__codelineno-0-263" name="__codelineno-0-263"></a> <span class="n">documentation</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">,</span>
<a id="__codelineno-0-264" name="__codelineno-0-264"></a> <span class="p">)</span>
<a id="__codelineno-0-265" name="__codelineno-0-265"></a>
<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">trace_endpoints_enabled</span><span class="p">:</span>
<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="n">bootstrap_trace_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">)</span>
<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">docs_endpoints_enabled</span><span class="p">:</span>
<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="n">bootstrap_docs_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">)</span>
<a id="__codelineno-0-261" name="__codelineno-0-261"></a>
<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">dashboard_enabled</span><span class="p">:</span>
<a id="__codelineno-0-263" name="__codelineno-0-263"></a> <span class="n">bootstrap_dashboard</span><span class="p">(</span>
<a id="__codelineno-0-264" name="__codelineno-0-264"></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">,</span>
<a id="__codelineno-0-265" name="__codelineno-0-265"></a> <span class="n">function_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span>
<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="n">documentation</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">,</span>
<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="p">)</span>
<a id="__codelineno-0-268" name="__codelineno-0-268"></a>
<a id="__codelineno-0-269" name="__codelineno-0-269"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">feedback_endpoints_enabled</span><span class="p">:</span>
<a id="__codelineno-0-270" name="__codelineno-0-270"></a> <span class="n">bootstrap_feedback_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">)</span>
<a id="__codelineno-0-269" name="__codelineno-0-269"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">trace_endpoints_enabled</span><span class="p">:</span>
<a id="__codelineno-0-270" name="__codelineno-0-270"></a> <span class="n">bootstrap_trace_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">)</span>
<a id="__codelineno-0-271" name="__codelineno-0-271"></a>
<a id="__codelineno-0-272" name="__codelineno-0-272"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">meta_endpoints_enabled</span><span class="p">:</span>
<a id="__codelineno-0-273" name="__codelineno-0-273"></a> <span class="n">bootstrap_meta_endpoints</span><span class="p">(</span>
<a id="__codelineno-0-274" name="__codelineno-0-274"></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">,</span>
<a id="__codelineno-0-275" name="__codelineno-0-275"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cached_func</span><span class="p">,</span>
<a id="__codelineno-0-276" name="__codelineno-0-276"></a> <span class="n">ApiMetadata</span><span class="p">(</span>
<a id="__codelineno-0-277" name="__codelineno-0-277"></a> <span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span>
<a id="__codelineno-0-278" name="__codelineno-0-278"></a> <span class="n">version</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">version</span><span class="p">,</span>
<a id="__codelineno-0-279" name="__codelineno-0-279"></a> <span class="n">documentation</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">,</span>
<a id="__codelineno-0-280" name="__codelineno-0-280"></a> <span class="n">configuration</span><span class="o">=</span><span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">to_flat_dict</span><span class="p">(),</span>
<a id="__codelineno-0-281" name="__codelineno-0-281"></a> <span class="p">),</span>
<a id="__codelineno-0-282" name="__codelineno-0-282"></a> <span class="p">)</span>
<a id="__codelineno-0-272" name="__codelineno-0-272"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">feedback_endpoints_enabled</span><span class="p">:</span>
<a id="__codelineno-0-273" name="__codelineno-0-273"></a> <span class="n">bootstrap_feedback_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">)</span>
<a id="__codelineno-0-274" name="__codelineno-0-274"></a>
<a id="__codelineno-0-275" name="__codelineno-0-275"></a> <span class="k">if</span> <span class="n">route_config</span><span class="o">.</span><span class="n">meta_endpoints_enabled</span><span class="p">:</span>
<a id="__codelineno-0-276" name="__codelineno-0-276"></a> <span class="n">bootstrap_meta_endpoints</span><span class="p">(</span>
<a id="__codelineno-0-277" name="__codelineno-0-277"></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="p">,</span>
<a id="__codelineno-0-278" name="__codelineno-0-278"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_cached_func</span><span class="p">,</span>
<a id="__codelineno-0-279" name="__codelineno-0-279"></a> <span class="n">ApiMetadata</span><span class="p">(</span>
<a id="__codelineno-0-280" name="__codelineno-0-280"></a> <span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span>
<a id="__codelineno-0-281" name="__codelineno-0-281"></a> <span class="n">version</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">version</span><span class="p">,</span>
<a id="__codelineno-0-282" name="__codelineno-0-282"></a> <span class="n">documentation</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">,</span>
<a id="__codelineno-0-283" name="__codelineno-0-283"></a> <span class="n">configuration</span><span class="o">=</span><span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">to_flat_dict</span><span class="p">(),</span>
<a id="__codelineno-0-284" name="__codelineno-0-284"></a> <span class="p">),</span>
<a id="__codelineno-0-285" name="__codelineno-0-285"></a> <span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -1469,10 +1423,7 @@ property.</p>
<details class="quote">
<summary>Source code in <code>great_ai/deploy/great_ai.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
<span class="normal"><a href="#__codelineno-0-100">100</a></span>
<span class="normal"><a href="#__codelineno-0-101">101</a></span>
@ -1512,50 +1463,53 @@ property.</p>
<span class="normal"><a href="#__codelineno-0-135">135</a></span>
<span class="normal"><a href="#__codelineno-0-136">136</a></span>
<span class="normal"><a href="#__codelineno-0-137">137</a></span>
<span class="normal"><a href="#__codelineno-0-138">138</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="nd">@staticmethod</span>
<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="k">def</span> <span class="nf">create</span><span class="p">(</span>
<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="n">func</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">[</span><span class="n">V</span><span class="p">]],</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">V</span><span class="p">]],</span>
<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">[</span><span class="s2">&quot;GreatAI[Awaitable[Trace[V]], V]&quot;</span><span class="p">,</span> <span class="s2">&quot;GreatAI[Trace[V], V]&quot;</span><span class="p">]:</span>
<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="sd">&quot;&quot;&quot;Decorate a function by wrapping it in a GreatAI instance.</span>
<a id="__codelineno-0-100" name="__codelineno-0-100"></a>
<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> The function can be typed, synchronous or async. If it has</span>
<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> unwrapped parameters (parameters not affected by a @parameter</span>
<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> or @use_model decorator), those will be automatically wrapped.</span>
<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> The return value is replaced by a Trace (or Awaitable[Trace]),</span>
<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> while the original return value is available under the `.output`</span>
<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> property.</span>
<a id="__codelineno-0-108" name="__codelineno-0-108"></a>
<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> For configuration options, see great_ai.configure.</span>
<a id="__codelineno-0-110" name="__codelineno-0-110"></a>
<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> Examples:</span>
<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> &gt;&gt;&gt; @GreatAI.create</span>
<a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="sd"> ... def my_function(a):</span>
<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> ... return a + 2</span>
<a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> &gt;&gt;&gt; my_function(3).output</span>
<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="sd"> 5</span>
<a id="__codelineno-0-117" name="__codelineno-0-117"></a>
<a id="__codelineno-0-118" name="__codelineno-0-118"></a><span class="sd"> &gt;&gt;&gt; @GreatAI.create</span>
<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> ... def my_function(a: int) -&gt; int:</span>
<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> ... return a + 2</span>
<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> &gt;&gt;&gt; my_function(3)</span>
<a id="__codelineno-0-122" name="__codelineno-0-122"></a><span class="sd"> Trace[int]...</span>
<a id="__codelineno-0-123" name="__codelineno-0-123"></a>
<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> &gt;&gt;&gt; my_function(&#39;3&#39;).output</span>
<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="sd"> Traceback (most recent call last):</span>
<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="sd"> ...</span>
<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> TypeError: type of a must be int; got str instead</span>
<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> func: The prediction function that needs to be decorated.</span>
<span class="normal"><a href="#__codelineno-0-138">138</a></span>
<span class="normal"><a href="#__codelineno-0-139">139</a></span>
<span class="normal"><a href="#__codelineno-0-140">140</a></span>
<span class="normal"><a href="#__codelineno-0-141">141</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="nd">@staticmethod</span>
<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="k">def</span> <span class="nf">create</span><span class="p">(</span>
<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">func</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">[</span><span class="n">V</span><span class="p">]],</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">V</span><span class="p">]],</span>
<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">[</span><span class="s2">&quot;GreatAI[Awaitable[Trace[V]], V]&quot;</span><span class="p">,</span> <span class="s2">&quot;GreatAI[Trace[V], V]&quot;</span><span class="p">]:</span>
<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="sd">&quot;&quot;&quot;Decorate a function by wrapping it in a GreatAI instance.</span>
<a id="__codelineno-0-103" name="__codelineno-0-103"></a>
<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> The function can be typed, synchronous or async. If it has</span>
<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> unwrapped parameters (parameters not affected by a @parameter</span>
<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> or @use_model decorator), those will be automatically wrapped.</span>
<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> The return value is replaced by a Trace (or Awaitable[Trace]),</span>
<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> while the original return value is available under the `.output`</span>
<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> property.</span>
<a id="__codelineno-0-111" name="__codelineno-0-111"></a>
<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> For configuration options, see great_ai.configure.</span>
<a id="__codelineno-0-113" name="__codelineno-0-113"></a>
<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> Examples:</span>
<a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> &gt;&gt;&gt; @GreatAI.create</span>
<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="sd"> ... def my_function(a):</span>
<a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> ... return a + 2</span>
<a id="__codelineno-0-118" name="__codelineno-0-118"></a><span class="sd"> &gt;&gt;&gt; my_function(3).output</span>
<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> 5</span>
<a id="__codelineno-0-120" name="__codelineno-0-120"></a>
<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> &gt;&gt;&gt; @GreatAI.create</span>
<a id="__codelineno-0-122" name="__codelineno-0-122"></a><span class="sd"> ... def my_function(a: int) -&gt; int:</span>
<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="sd"> ... return a + 2</span>
<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> &gt;&gt;&gt; my_function(3)</span>
<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="sd"> Trace[int]...</span>
<a id="__codelineno-0-126" name="__codelineno-0-126"></a>
<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> &gt;&gt;&gt; my_function(&#39;3&#39;).output</span>
<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> Traceback (most recent call last):</span>
<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> ...</span>
<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> TypeError: type of a must be int; got str instead</span>
<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> A GreatAI instance wrapping `func`.</span>
<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> func: The prediction function that needs to be decorated.</span>
<a id="__codelineno-0-134" name="__codelineno-0-134"></a>
<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">return</span> <span class="n">GreatAI</span><span class="p">[</span><span class="n">Trace</span><span class="p">[</span><span class="n">V</span><span class="p">],</span> <span class="n">V</span><span class="p">](</span>
<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="n">func</span><span class="p">,</span>
<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">)</span>
<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> A GreatAI instance wrapping `func`.</span>
<a id="__codelineno-0-137" name="__codelineno-0-137"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-138" name="__codelineno-0-138"></a>
<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="k">return</span> <span class="n">GreatAI</span><span class="p">[</span><span class="n">Trace</span><span class="p">[</span><span class="n">V</span><span class="p">],</span> <span class="n">V</span><span class="p">](</span>
<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="n">func</span><span class="p">,</span>
<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
@ -1715,41 +1669,17 @@ property.</p>
</div>
<div class="doc doc-object doc-module">
<h3 id="great_ai.save_model" class="doc doc-heading">
<code>save_model</code>
<a href="#great_ai.save_model" class="headerlink" title="Permanent link">#</a></h3>
<div class="doc doc-contents first">
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h4 id="great_ai.models.save_model.save_model" class="doc doc-heading">
<h3 id="great_ai.save_model" class="doc doc-heading">
<code class="highlight language-python"><span class="n">save_model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">keep_last_n</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
<a href="#great_ai.models.save_model.save_model" class="headerlink" title="Permanent link">#</a></h4>
<a href="#great_ai.save_model" class="headerlink" title="Permanent link">#</a></h3>
<div class="doc doc-contents ">
<div class="doc doc-contents first">
<p>Save (and optionally serialise) a model in order to use by <code>use_model</code>.</p>
<p>The <code>model</code> can be a Path or string representing a path in which case the
@ -1917,60 +1847,25 @@ In case <code>model</code> is an object, it is serialised using <code>dill</code
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-module">
<h3 id="great_ai.use_model" class="doc doc-heading">
<code>use_model</code>
<a href="#great_ai.use_model" class="headerlink" title="Permanent link">#</a></h3>
<div class="doc doc-contents first">
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h4 id="great_ai.models.use_model.use_model" class="doc doc-heading">
<h3 id="great_ai.use_model" class="doc doc-heading">
<code class="highlight language-python"><span class="n">use_model</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="s1">&#39;latest&#39;</span><span class="p">,</span> <span class="n">model_kwarg_name</span><span class="o">=</span><span class="s1">&#39;model&#39;</span><span class="p">)</span></code>
<a href="#great_ai.models.use_model.use_model" class="headerlink" title="Permanent link">#</a></h4>
<a href="#great_ai.use_model" class="headerlink" title="Permanent link">#</a></h3>
<div class="doc doc-contents ">
<div class="doc doc-contents first">
<p>Inject a model into a function.</p>
<p>Load a model specified by <code>key</code> and <code>version</code> using the
currently active <code>LargeFile</code> implementation. If it's a
single object, it is deserialised using <code>dill</code>. If it's
a directory of files, a <code>pathlib.Path</code> instance is given.</p>
<p>By default, the function's <code>model</code> parameter is replaced
by the loaded model. This can be customised by changing
<code>model_kwarg_name</code>.</p>
<p>Multiple models can be loaded by decorating the same
function with <code>use_model</code> multiple times.</p>
<p>Load a model specified by <code>key</code> and <code>version</code> using the currently active <code>LargeFile</code>
implementation. If it's a single object, it is deserialised using <code>dill</code>. If it's a
directory of files, a <code>pathlib.Path</code> instance is given.</p>
<p>By default, the function's <code>model</code> parameter is replaced by the loaded model. This
can be customised by changing <code>model_kwarg_name</code>. Multiple models can be loaded by
decorating the same function with <code>use_model</code> multiple times.</p>
<p><strong>Examples:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">great_ai</span> <span class="kn">import</span> <span class="n">save_model</span>
@ -2050,11 +1945,7 @@ Returns:
<span class="normal"><a href="#__codelineno-0-82">82</a></span>
<span class="normal"><a href="#__codelineno-0-83">83</a></span>
<span class="normal"><a href="#__codelineno-0-84">84</a></span>
<span class="normal"><a href="#__codelineno-0-85">85</a></span>
<span class="normal"><a href="#__codelineno-0-86">86</a></span>
<span class="normal"><a href="#__codelineno-0-87">87</a></span>
<span class="normal"><a href="#__codelineno-0-88">88</a></span>
<span class="normal"><a href="#__codelineno-0-89">89</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="k">def</span> <span class="nf">use_model</span><span class="p">(</span>
<span class="normal"><a href="#__codelineno-0-85">85</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="k">def</span> <span class="nf">use_model</span><span class="p">(</span>
<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">version</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="n">Literal</span><span class="p">[</span><span class="s2">&quot;latest&quot;</span><span class="p">]]</span> <span class="o">=</span> <span class="s2">&quot;latest&quot;</span><span class="p">,</span>
@ -2062,75 +1953,63 @@ Returns:
<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Callable</span><span class="p">[[</span><span class="n">F</span><span class="p">],</span> <span class="n">F</span><span class="p">]:</span>
<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="sd">&quot;&quot;&quot;Inject a model into a function.</span>
<a id="__codelineno-0-34" name="__codelineno-0-34"></a>
<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Load a model specified by `key` and `version` using the</span>
<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> currently active `LargeFile` implementation. If it&#39;s a</span>
<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> single object, it is deserialised using `dill`. If it&#39;s</span>
<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> a directory of files, a `pathlib.Path` instance is given.</span>
<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> By default, the function&#39;s `model` parameter is replaced</span>
<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> by the loaded model. This can be customised by changing</span>
<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> `model_kwarg_name`.</span>
<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Multiple models can be loaded by decorating the same</span>
<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> function with `use_model` multiple times.</span>
<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Examples:</span>
<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> &gt;&gt;&gt; from great_ai import save_model</span>
<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> &gt;&gt;&gt; save_model(3, &#39;my_number&#39;)</span>
<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &#39;my_number:...&#39;</span>
<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> &gt;&gt;&gt; @use_model(&#39;my_number&#39;)</span>
<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> ... def my_function(a, model):</span>
<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> ... return a + model</span>
<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> &gt;&gt;&gt; my_function(4)</span>
<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> 7</span>
<a id="__codelineno-0-56" name="__codelineno-0-56"></a>
<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> key: The model&#39;s name as stored by the LargeFile implementation.</span>
<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> version: The model&#39;s version as stored by the LargeFile implementation.</span>
<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> model_kwarg_name: the parameter to use for injecting the loaded model</span>
<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> A decorator for model injection.</span>
<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Load a model specified by `key` and `version` using the currently active `LargeFile`</span>
<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> implementation. If it&#39;s a single object, it is deserialised using `dill`. If it&#39;s a</span>
<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> directory of files, a `pathlib.Path` instance is given.</span>
<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> By default, the function&#39;s `model` parameter is replaced by the loaded model. This</span>
<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> can be customised by changing `model_kwarg_name`. Multiple models can be loaded by</span>
<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> decorating the same function with `use_model` multiple times.</span>
<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Examples:</span>
<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> &gt;&gt;&gt; from great_ai import save_model</span>
<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> &gt;&gt;&gt; save_model(3, &#39;my_number&#39;)</span>
<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> &#39;my_number:...&#39;</span>
<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> &gt;&gt;&gt; @use_model(&#39;my_number&#39;)</span>
<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> ... def my_function(a, model):</span>
<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> ... return a + model</span>
<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &gt;&gt;&gt; my_function(4)</span>
<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> 7</span>
<a id="__codelineno-0-52" name="__codelineno-0-52"></a>
<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> key: The model&#39;s name as stored by the LargeFile implementation.</span>
<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> version: The model&#39;s version as stored by the LargeFile implementation.</span>
<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> model_kwarg_name: the parameter to use for injecting the loaded model</span>
<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> A decorator for model injection.</span>
<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">assert</span> <span class="p">(</span>
<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">version</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">or</span> <span class="n">version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span>
<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="p">),</span> <span class="s2">&quot;Only integers or the string literal `latest` is allowed as a version&quot;</span>
<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">assert</span> <span class="p">(</span>
<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">version</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">or</span> <span class="n">version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span>
<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">),</span> <span class="s2">&quot;Only integers or the string literal `latest` is allowed as a version&quot;</span>
<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">model</span><span class="p">,</span> <span class="n">actual_version</span> <span class="o">=</span> <span class="n">_load_model</span><span class="p">(</span>
<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">version</span><span class="o">=</span><span class="kc">None</span> <span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span> <span class="k">else</span> <span class="n">version</span><span class="p">,</span>
<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">)</span>
<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">def</span> <span class="nf">decorator</span><span class="p">(</span><span class="n">func</span><span class="p">:</span> <span class="n">F</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">F</span><span class="p">:</span>
<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">assert_function_is_not_finalised</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<a id="__codelineno-0-76" name="__codelineno-0-76"></a>
<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="n">store</span> <span class="o">=</span> <span class="n">get_function_metadata_store</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">store</span><span class="o">.</span><span class="n">model_parameter_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">model_kwarg_name</span><span class="p">)</span>
<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">def</span> <span class="nf">wrapper</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Any</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">tracing_context</span> <span class="o">=</span> <span class="n">TracingContext</span><span class="o">.</span><span class="n">get_current_tracing_context</span><span class="p">()</span>
<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">if</span> <span class="n">tracing_context</span><span class="p">:</span>
<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">tracing_context</span><span class="o">.</span><span class="n">log_model</span><span class="p">(</span><span class="n">Model</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="n">actual_version</span><span class="p">))</span>
<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span> <span class="o">**</span><span class="p">{</span><span class="n">model_kwarg_name</span><span class="p">:</span> <span class="n">model</span><span class="p">})</span>
<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="n">F</span><span class="p">,</span> <span class="n">wrapper</span><span class="p">)</span>
<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">return</span> <span class="n">decorator</span>
<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">model</span><span class="p">,</span> <span class="n">actual_version</span> <span class="o">=</span> <span class="n">_load_model</span><span class="p">(</span>
<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="n">version</span><span class="o">=</span><span class="kc">None</span> <span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span> <span class="k">else</span> <span class="n">version</span><span class="p">,</span>
<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">)</span>
<a id="__codelineno-0-69" name="__codelineno-0-69"></a>
<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">def</span> <span class="nf">decorator</span><span class="p">(</span><span class="n">func</span><span class="p">:</span> <span class="n">F</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">F</span><span class="p">:</span>
<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">assert_function_is_not_finalised</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">store</span> <span class="o">=</span> <span class="n">get_function_metadata_store</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">store</span><span class="o">.</span><span class="n">model_parameter_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">model_kwarg_name</span><span class="p">)</span>
<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">def</span> <span class="nf">wrapper</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Any</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">tracing_context</span> <span class="o">=</span> <span class="n">TracingContext</span><span class="o">.</span><span class="n">get_current_tracing_context</span><span class="p">()</span>
<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">if</span> <span class="n">tracing_context</span><span class="p">:</span>
<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">tracing_context</span><span class="o">.</span><span class="n">log_model</span><span class="p">(</span><span class="n">Model</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="n">actual_version</span><span class="p">))</span>
<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span> <span class="o">**</span><span class="p">{</span><span class="n">model_kwarg_name</span><span class="p">:</span> <span class="n">model</span><span class="p">})</span>
<a id="__codelineno-0-82" name="__codelineno-0-82"></a>
<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="n">F</span><span class="p">,</span> <span class="n">wrapper</span><span class="p">)</span>
<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="n">decorator</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-function">