import%20marimo%0A%0A__generated_with%20%3D%20%220.11.0%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%20openai%0A%20%20%20%20import%20os%0A%20%20%20%20import%20IPython%0A%20%20%20%20from%20langchain.llms%20import%20OpenAI%0A%20%20%20%20from%20langchain.prompts%20import%20PromptTemplate%0A%20%20%20%20from%20langchain.chains%20import%20LLMChain%0A%20%20%20%20from%20langchain.output_parsers%20import%20StructuredOutputParser%2C%20ResponseSchema%0A%20%20%20%20from%20dotenv%20import%20load_dotenv%2C%20find_dotenv%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20IPython%2C%0A%20%20%20%20%20%20%20%20LLMChain%2C%0A%20%20%20%20%20%20%20%20OpenAI%2C%0A%20%20%20%20%20%20%20%20PromptTemplate%2C%0A%20%20%20%20%20%20%20%20ResponseSchema%2C%0A%20%20%20%20%20%20%20%20StructuredOutputParser%2C%0A%20%20%20%20%20%20%20%20find_dotenv%2C%0A%20%20%20%20%20%20%20%20load_dotenv%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20openai%2C%0A%20%20%20%20%20%20%20%20os%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20_(os)%3A%0A%20%20%20%20%23%20Delete%20if%20not%20using%20in%20UTSA%20%0A%20%20%20%20os.environ%5B%22http_proxy%22%5D%20%3D%20%22http%3A%2F%2Fxa-proxy.utsarr.net%3A80%22%0A%20%20%20%20os.environ%5B%22https_proxy%22%5D%20%3D%20%22http%3A%2F%2Fxa-proxy.utsarr.net%3A80%22%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(find_dotenv%2C%20load_dotenv%2C%20openai%2C%20os)%3A%0A%20%20%20%20working_dir%20%3D%20os.getcwd()%0A%20%20%20%20status%20%3D%20load_dotenv(%0A%20%20%20%20%20%20%20%20find_dotenv(%0A%20%20%20%20%20%20%20%20%20%20%20%20filename%3Df'%7Bworking_dir%7D%2Ftutorials%2F.env'%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20raise_error_if_not_found%3DTrue)%0A%20%20%20%20)%0A%0A%20%20%20%20%23%20API%20configuration%0A%20%20%20%20client%20%3D%20openai.OpenAI(api_key%3D'')%0A%20%20%20%20client.api_key%20%3D%20os.getenv(%22OPENAI_API_KEY%22)%0A%0A%20%20%20%20%23%20LangChain%0A%20%20%20%20os.environ%5B%22OPENAI_API_KEY%22%5D%20%3D%20os.getenv(%22OPENAI_API_KEY%22)%0A%20%20%20%20return%20client%2C%20status%2C%20working_dir%0A%0A%0A%40app.cell%0Adef%20_(client)%3A%0A%20%20%20%20def%20set_open_params(%0A%20%20%20%20%20%20%20%20model%3D%22gpt-3.5-turbo%22%2C%0A%20%20%20%20%20%20%20%20temperature%3D0.7%2C%0A%20%20%20%20%20%20%20%20max_tokens%3D256%2C%0A%20%20%20%20%20%20%20%20top_p%3D1%2C%0A%20%20%20%20%20%20%20%20frequency_penalty%3D0%2C%0A%20%20%20%20%20%20%20%20presence_penalty%3D0%2C%0A%20%20%20%20)%3A%0A%20%20%20%20%20%20%20%20%22%22%22%20set%20openai%20parameters%22%22%22%0A%0A%20%20%20%20%20%20%20%20openai_params%20%3D%20%7B%7D%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20openai_params%5B'model'%5D%20%3D%20model%0A%20%20%20%20%20%20%20%20openai_params%5B'temperature'%5D%20%3D%20temperature%0A%20%20%20%20%20%20%20%20openai_params%5B'max_tokens'%5D%20%3D%20max_tokens%0A%20%20%20%20%20%20%20%20openai_params%5B'top_p'%5D%20%3D%20top_p%0A%20%20%20%20%20%20%20%20openai_params%5B'frequency_penalty'%5D%20%3D%20frequency_penalty%0A%20%20%20%20%20%20%20%20openai_params%5B'presence_penalty'%5D%20%3D%20presence_penalty%0A%20%20%20%20%20%20%20%20return%20openai_params%0A%0A%20%20%20%20def%20get_completion(params%2C%20messages)%3A%0A%20%20%20%20%20%20%20%20%22%22%22%20GET%20completion%20from%20openai%20api%22%22%22%0A%0A%20%20%20%20%20%20%20%20response%20%3D%20client.chat.completions.create(%0A%20%20%20%20%20%20%20%20%20%20%20%20model%20%3D%20params%5B'model'%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20messages%20%3D%20messages%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20temperature%20%3D%20params%5B'temperature'%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20max_tokens%20%3D%20params%5B'max_tokens'%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20top_p%20%3D%20params%5B'top_p'%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20frequency_penalty%20%3D%20params%5B'frequency_penalty'%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20presence_penalty%20%3D%20params%5B'presence_penalty'%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20return%20response%0A%20%20%20%20return%20get_completion%2C%20set_open_params%0A%0A%0A%40app.cell%0Adef%20_(ResponseSchema)%3A%0A%20%20%20%20%23%20Define%20the%20expected%20output%20schema.%0A%20%20%20%20response_schemas%20%3D%20%5B%0A%20%20%20%20%20%20%20%20ResponseSchema(%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3D%22name%22%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20description%3D%22The%20full%20name%20of%20the%20customer.%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20ResponseSchema(%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3D%22email%22%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20description%3D%22The%20email%20address%20of%20the%20customer.%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20ResponseSchema(%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3D%22phone%22%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20description%3D%22The%20phone%20number%20of%20the%20customer.%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%5D%0A%20%20%20%20return%20(response_schemas%2C)%0A%0A%0A%40app.cell%0Adef%20_(StructuredOutputParser%2C%20response_schemas)%3A%0A%20%20%20%20%23%20Build%20the%20output%20parser%20from%20the%20response%20schemas.%0A%20%20%20%20output_parser%20%3D%20StructuredOutputParser.from_response_schemas(response_schemas)%0A%20%20%20%20%23%20Get%20formatting%20instructions%20that%20will%20tell%20the%20LLM%20how%20to%20format%20its%20output.%0A%20%20%20%20format_instructions%20%3D%20output_parser.get_format_instructions()%0A%0A%20%20%20%20%23%20Create%20a%20prompt%20template%20instructing%20the%20LLM%20to%20extract%20customer%20info%20and%20output%20in%20JSON%20format.%0A%20%20%20%20template%20%3D%20%22%22%22%0A%20%20%20%20Extract%20the%20following%20customer%20information%20from%20the%20text%3A%0A%20%20%20%20-%20Full%20name%0A%20%20%20%20-%20Email%20address%0A%20%20%20%20-%20Phone%20number%0A%0A%20%20%20%20Text%3A%0A%20%20%20%20%7Btext%7D%0A%0A%20%20%20%20%7Bformat_instructions%7D%0A%20%20%20%20%22%22%22%0A%20%20%20%20return%20format_instructions%2C%20output_parser%2C%20template%0A%0A%0A%40app.cell%0Adef%20_(PromptTemplate%2C%20template)%3A%0A%20%20%20%20prompt%20%3D%20PromptTemplate(%0A%20%20%20%20%20%20%20%20input_variables%3D%5B%22text%22%2C%20%22format_instructions%22%5D%2C%0A%20%20%20%20%20%20%20%20template%3Dtemplate%2C%0A%20%20%20%20)%0A%20%20%20%20return%20(prompt%2C)%0A%0A%0A%40app.cell%0Adef%20_(OpenAI)%3A%0A%20%20%20%20%23%20Initialize%20the%20OpenAI%20LLM.%0A%20%20%20%20llm%20%3D%20OpenAI(temperature%3D0.5)%0A%20%20%20%20return%20(llm%2C)%0A%0A%0A%40app.cell%0Adef%20_(llm%2C%20prompt)%3A%0A%20%20%20%20%23%20Compose%20the%20prompt%20and%20LLM%20using%20the%20chaining%20operator.%0A%20%20%20%20chain%20%3D%20prompt%20%7C%20llm%0A%20%20%20%20return%20(chain%2C)%0A%0A%0A%40app.cell%0Adef%20_(format_instructions)%3A%0A%20%20%20%20%23%20Input%20text%20containing%20customer%20information.%0A%20%20%20%20input_data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22text%22%3A%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22I%20recently%20ordered%20a%20new%20laptop%2C%20and%20I%20had%20a%20question.%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%22My%20name%20is%20Alice%20Johnson.%20Please%20contact%20me%20at%20alice.johnson%40example.com%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%22or%20call%20me%20at%20(555)%20123-4567.%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%22format_instructions%22%3A%20format_instructions%0A%20%20%20%20%7D%0A%20%20%20%20return%20(input_data%2C)%0A%0A%0A%40app.cell%0Adef%20_(chain%2C%20input_data)%3A%0A%20%20%20%20%23%20Execute%20the%20chain%20using%20the%20.invoke()%20method.%0A%20%20%20%20raw_output%20%3D%20chain.invoke(input_data)%0A%20%20%20%20print(%22Raw%20LLM%20output%3A%22)%0A%20%20%20%20print(raw_output)%0A%20%20%20%20return%20(raw_output%2C)%0A%0A%0A%40app.cell%0Adef%20_(output_parser%2C%20raw_output)%3A%0A%20%20%20%20%23%20Parse%20the%20LLM's%20output%20string%20into%20a%20Python%20dictionary.%0A%20%20%20%20parsed_output%20%3D%20output_parser.parse(raw_output)%0A%20%20%20%20print(%22%5CnParsed%20output%20as%20Python%20dictionary%3A%22)%0A%20%20%20%20print(parsed_output)%0A%20%20%20%20return%20(parsed_output%2C)%0A%0A%0A%40app.cell%0Adef%20_(parsed_output)%3A%0A%20%20%20%20print(type(parsed_output))%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
9734ab969f8487a17357570423cabd849fdab660110b0c43d02803e442e6a35e