Skip to content

Commit

Permalink
Add cards and a 'mental model' diagram for developers
Browse files Browse the repository at this point in the history
  • Loading branch information
jcgardner committed Oct 9, 2024
1 parent e5cf8b1 commit c66d75a
Show file tree
Hide file tree
Showing 4 changed files with 357 additions and 6 deletions.
24 changes: 22 additions & 2 deletions docs/Develop/3-Tutorials/index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
# Overview of tutorials

## Another heading
## Build an Owl App Bootcamp

Some text here
<div class="grid cards" markdown>
- **Bootstrap** your app project
- Add tools to call **data and decision APIs**
- Add **RAG**
- Add **human in the loop** controlled by LangGraph
- Create new backend API endpoints
</div>

## Use various providers
<div class="grid cards" markdown>
- **Local LLM**
- Mistral
- OpenAI
- IBM Granite
</div>

## Frontend
<div class="grid cards" markdown>
- Customize the chatbot frontend webapp
- Integrate the Owl chatbot widget
</div>
164 changes: 164 additions & 0 deletions docs/diagrams/.$App elements.drawio.bkp
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
<mxfile host="Electron" modified="2024-10-09T13:22:57.573Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="a5Ir-aBERSHpWW9C_PWl" version="23.1.5" type="device">
<diagram name="Page-1" id="koKYllzYylF1F7KYLpVS">
<mxGraphModel dx="1440" dy="751" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1654" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="paQ9tnQQhuRcGCuXe4jG-27" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="340" y="470" width="480" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-1" target="paQ9tnQQhuRcGCuXe4jG-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-1" target="paQ9tnQQhuRcGCuXe4jG-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-1" value="Application" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#66B2FF;" vertex="1" parent="1">
<mxGeometry x="185" y="270" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-2" target="paQ9tnQQhuRcGCuXe4jG-10">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-2" target="paQ9tnQQhuRcGCuXe4jG-13">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-43" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-2" target="paQ9tnQQhuRcGCuXe4jG-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-2" value="Agent" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#66B2FF;" vertex="1" parent="1">
<mxGeometry x="374" y="220" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-3" value="Prompt" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#66B2FF;" vertex="1" parent="1">
<mxGeometry x="512" y="122" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.377;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-4" target="paQ9tnQQhuRcGCuXe4jG-27">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-4" value="Tool" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#66B2FF;" vertex="1" parent="1">
<mxGeometry x="400" y="370" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-47" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-5" target="paQ9tnQQhuRcGCuXe4jG-27">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="810" y="400" />
<mxPoint x="700" y="400" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-5" value="Agentic workflow" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="750" y="330" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-10" value="" style="rounded=1;whiteSpace=wrap;html=1;align=center;" vertex="1" parent="1">
<mxGeometry x="600" y="208" width="280" height="70" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-11" target="paQ9tnQQhuRcGCuXe4jG-4">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="670" y="300" />
<mxPoint x="460" y="300" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-54" value="0+" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="paQ9tnQQhuRcGCuXe4jG-46">
<mxGeometry x="0.8974" relative="1" as="geometry">
<mxPoint x="10" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-51" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.35;exitY=-0.033;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-11" target="paQ9tnQQhuRcGCuXe4jG-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-11" target="paQ9tnQQhuRcGCuXe4jG-13">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-11" value="DefaultRunner" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="610" y="238" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-12" target="paQ9tnQQhuRcGCuXe4jG-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-53" value="0..1" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="paQ9tnQQhuRcGCuXe4jG-38">
<mxGeometry x="0.5484" y="1" relative="1" as="geometry">
<mxPoint x="16" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-45" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-5">
<mxGeometry relative="1" as="geometry">
<mxPoint x="460" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="900" y="345" />
<mxPoint x="900" y="190" />
<mxPoint x="460" y="190" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-50" value="0+ child agents" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="paQ9tnQQhuRcGCuXe4jG-45">
<mxGeometry x="0.9206" relative="1" as="geometry">
<mxPoint x="50" y="-14" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-12" value="CustomRunner" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="750" y="238" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-13" value="LLM provider" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="512" y="70" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-17" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="480" y="505" width="160" height="130" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-18" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="650" y="505" width="170" height="130" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-20" value="Python functions" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="340" y="505" width="130" height="125" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-28" value="Enterprise APIs" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="500" y="505" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-29" value="Third party APIs" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="685" y="505" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-16" value="Tavily (web search)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="680" y="555" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.117;exitY=1.033;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-14" target="paQ9tnQQhuRcGCuXe4jG-32">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="504" y="660" />
<mxPoint x="463" y="660" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-14" value="Data APIs" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="490" y="550" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-15" value="Decision APIs" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="515" y="589" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-30" value="..." style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="680" y="595" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-32" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=7;" vertex="1" parent="1">
<mxGeometry x="434" y="700" width="60" height="50" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-33" value="BRMS" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="535" y="700" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="paQ9tnQQhuRcGCuXe4jG-15" target="paQ9tnQQhuRcGCuXe4jG-33">
<mxGeometry relative="1" as="geometry">
<mxPoint x="514" y="591" as="sourcePoint" />
<mxPoint x="473" y="730" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-36" value="Agent Runner" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="690" y="208" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-44" value="Libraries and APIs" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="540" y="470" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="paQ9tnQQhuRcGCuXe4jG-49" value="&lt;h1&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;Mental model&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;An &lt;b&gt;Owl application&lt;/b&gt; is a deployable bundle containing multiple agents, tools and prompts.&lt;/p&gt;&lt;p&gt;An &lt;b&gt;Owl agent&lt;/b&gt; is powered by an LLM to satisfy a particular goal.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;A &lt;b&gt;simple agent&lt;/b&gt; leverages a single LLM, a prompt and zero or more tools. The Owl framework provides a default runner for simple agents so that they can be configured declaratively with no need to code.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;A &lt;b&gt;custom agent&lt;/b&gt; is built by providing a custom runner that can leverage multiple prompts, tools and child agents. If needed, a custom agent runner can orchestrate multiple agents using an agentic workflow.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;A &lt;b&gt;tool&lt;/b&gt; is a way to inform an agent that some queries can be delegated to some specialized functions or APIs that encode a particular knowledge and can provide more robust and accurate answers than a LLM.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;" style="text;html=1;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
<mxGeometry x="940" y="70" width="340" height="380" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
Loading

0 comments on commit c66d75a

Please sign in to comment.