l-retrieval-chain) exposed via LangServe  |  [ server ](https://github.com/langchain-ai/langserve/tree/main/examples/conversational_retrieval_chain/server.py) , [ client ](https://github.com/langchain-ai/langserve/tree/main/examples/conversational_retrieval_chain/client.ipynb)  
**Agent** without **conversation history** based on [ OpenAI tools ](https://python.langchain.com/docs/modules/agents/agent_types/openai_functions_agent) |  [ server ](https://github.com/langchain-ai/langserve/tree/main/examples/agent/server.py) , [ client ](https://github.com/langchain-ai/langserve/tree/main/examples/agent/client.ipynb)  
**Agent** with **conversation history** based on [ OpenAI tools ](https://python.langchain.com/docs/modules/agents/agent_types/openai_functions_agent) |  [ server ](https://github.com/langchain-ai/langserve/blob/main/examples/agent_with_history/server.py) , [ client ](https://github.com/langchain-ai/langserve/blob/main/examples/agent_with_history/client.ipynb)  
[ RunnableWithMessageHistory ](https://python.langchain.com/docs/expression_language/how_to/message_history) to implement chat persisted on backend, keyed off a ` session_id ` supplied by client.  |  [ server ](https://github.com/langchain-ai/langserve/tree/main/examples/chat_with_persistence/server.py) , [ client ](https://github.com/langchain-ai/langserve/tree/main/examples/chat_with_persistence/client.ipynb)  
[ RunnableWithMessageHistory ](https://python.langchain.com/docs/expression_language/how_to/message_history) to implement chat persisted on backend, keyed off a ` conversation_id ` supplied by client, and ` user_id ` (see Auth for implementing ` user_id ` properly).  |  [ server ](https://github.com/langchain-ai/langserve/tree/main/examples/chat_with_persistence_and_user/server.py) , [ client ](https://github.com/langchain-ai/langserve/tree/main/examples/chat_with_persistence_and_user/client.ipynb)  
[ Configurable Runnable ](https://python.langchain.com/docs/expression_language/how_to/configure) to create a retriever that supports run time configuration of the index name.  |  [ server ](https://github.com/langchain-ai/langserve/tree/main/examples/configurable_retrieval/server.py) , [ client ](https://github.com/langchain-ai/langserve/tree/main/examples/configurable_retrieval/client.ipynb)  
[ Configurable Runnable ](https://python.langchain.com/docs/expression_language/how_to/configure) that shows configurable fields and configurable alternatives.  |  [ server ](https://github.com/langchain-ai/langserve/tree/main/examples/configurable_chain/server.py) , [ client ](https://github.com/langchain-ai/langserve/tree/main/examples/configurable_chain/client.ipynb)  
**APIHandler** Shows how to use ` APIHandler ` instead of ` add_routes ` . This provides more flexibility for developers to define endpoints. Works well with all FastAPI patterns, but takes a bit more effort.  |  [ server ](https://github.com/langchain-ai/langserve/tree/main/examples/api_handler_examples/server.py)  
**LCEL Example** Example that uses LCEL to manipulate a dictionary input.  |  [ server ](https://github.com/langchain-ai/langserve/tree/main/examples/passthrough_dict/server.py) , [ client ](https://github.com/langchain-ai/langserve/tree/main/examples/passthrough_dict/client.ipynb)  
**Auth** with ` add_routes ` : Simple authentication that can be applied across all endpoints associated with app. (Not useful on its own for implementing per user logic.)  |  [ server ](https://github.com/langchain-ai/langserve/tree/main/examples/auth/global_deps/server.py)  
**Auth** with ` add_routes ` : Simple authentication mechanism based on path dependencies. (No useful on its own for implementing per user logic.)  |  [ server ](https://github.com/langchain-ai/langserve/tree/main/examples/auth/path_dependencies/server.py)  
**Auth** with ` add_routes ` : Implement per user logic and auth for endpoints that use per request config modifier. ( **Note** : At the moment, does not integrate with OpenAP