import%20marimo%0A%0A__generated_with%20%3D%20%220.9.17%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20ell%0A%20%20%20%20import%20os%0A%20%20%20%20import%20dotenv%0A%20%20%20%20dotenv.load_dotenv()%0A%20%20%20%20ell.init(verbose%3DTrue)%0A%20%20%20%20return%20dotenv%2C%20ell%2C%20mo%2C%20os%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20from%20azure.identity%20import%20DefaultAzureCredential%2C%20get_bearer_token_provider%0A%0A%20%20%20%20token_provider%20%3D%20get_bearer_token_provider(%0A%20%20%20%20%20%20%20%20DefaultAzureCredential()%2C%20%22https%3A%2F%2Fcognitiveservices.azure.com%2F.default%22%0A%20%20%20%20)%0A%20%20%20%20return%20DefaultAzureCredential%2C%20get_bearer_token_provider%2C%20token_provider%0A%0A%0A%40app.cell%0Adef%20__(ell%2C%20os%2C%20token_provider)%3A%0A%20%20%20%20import%20openai%0A%20%20%20%20modelname%20%3D%20os.environ%5B%22AZURE_OPENAI_CHAT_DEPLOYMENT_NAME%22%5D%0A%20%20%20%20azureClient%20%3D%20openai.AzureOpenAI(%0A%20%20%20%20%20%20%20%20azure_endpoint%20%3D%20os.environ%5B%22AZURE_OPENAI_ENDPOINT%22%5D%2C%0A%20%20%20%20%20%20%20%20api_version%20%3D%20%222024-05-01-preview%22%2C%0A%20%20%20%20%20%20%20%20azure_ad_token_provider%3Dtoken_provider%0A%20%20%20%20)%0A%20%20%20%20ell.config.register_model(modelname%2C%20azureClient)%0A%20%20%20%20return%20azureClient%2C%20modelname%2C%20openai%0A%0A%0A%40app.cell%0Adef%20__(ell%2C%20modelname)%3A%0A%20%20%20%20%40ell.simple(model%3Dmodelname)%0A%20%20%20%20def%20test(about%3A%20str)%3A%0A%20%20%20%20%20%20%20%20return%20f%22write%20a%20paradox%20about%20%7Babout%7D%22%0A%0A%20%20%20%20%23%20test(%22time%20travel%22)%0A%20%20%20%20return%20(test%2C)%0A%0A%0A%40app.cell%0Adef%20__(azureClient%2C%20ell%2C%20mo%2C%20modelname)%3A%0A%20%20%20%20%40ell.tool()%0A%20%20%20%20def%20biography(name%3Astr)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Returns%20biographical%20information%20about%20person%22%22%22%0A%20%20%20%20%20%20%20%20if%20name%20%3D%3D%20%22Donald%20Duck%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22Donald%20Duck%20is%20a%20friend%20of%20Mickey%20Mouse%2C%20born%20in%201573%20in%20Duckburg%22%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22I%20don't%20know%20who%20that%20is%22%0A%0A%20%20%20%20%40ell.complex(model%3Dmodelname%2C%20tools%3D%5Bbiography%5D%2C%20client%3DazureClient)%0A%20%20%20%20def%20custom_chatbot(messages%2C%20config)%20-%3E%20str%3A%0A%20%20%20%20%20%20%20%20%22%22%22You%20are%20a%20friendly%20assistant%22%22%22%0A%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20ell.user(message.content)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20message.role%20%3D%3D%20%22user%22%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20ell.assistant(message.content)%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20message%20in%20messages%0A%20%20%20%20%20%20%20%20%5D%0A%0A%20%20%20%20def%20my_model(messages%2C%20config)%3A%0A%20%20%20%20%20%20%20%20response%20%3D%20custom_chatbot(messages%2C%20config)%0A%20%20%20%20%20%20%20%20messages.append(response)%0A%20%20%20%20%20%20%20%20if%20response.tool_calls%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20next_message%20%3D%20response.call_tools_and_collect_as_message()%0A%20%20%20%20%20%20%20%20%20%20%20%20messages.append(next_message)%0A%20%20%20%20%20%20%20%20%20%20%20%20response%20%3D%20custom_chatbot(messages%2C%20config)%0A%20%20%20%20%20%20%20%20return%20mo.md(response.text)%0A%20%20%20%20return%20biography%2C%20custom_chatbot%2C%20my_model%0A%0A%0A%40app.cell%0Adef%20__(mo%2C%20my_model)%3A%0A%20%20%20%20mo.ui.chat(%0A%20%20%20%20%20%20%20%20my_model%2C%0A%20%20%20%20%20%20%20%20prompts%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Tell%20me%20a%20short%20story%20about%20Donald%20Duck%22%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
e0fd6cf3c4cbc202397231d5e57663eedce09fb01e5c3501500d5c7ab67ae2c9