..
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.


========
Cookbook
========

.. _examples:

These are still under progress -- see the github `examples directory <https://github.com/apache/burr/blob/main/examples>`_
for the latest.

Examples of more complex/powerful use-cases of Burr. Download/copy these to adapt to your use-cases.

.. toctree::
    :maxdepth: 2

    simple/index
    chatbots/index
    agents/index
    deployment/index
    guardrails/index
    data-science/index
