Package: prefect-openai
Coordinate and use AI in your dataflow withprefect-openaiVisit the full docshereto see additional examples and the API reference.Theprefect-openaicollection makes it easy to leverage the capabilities of AI in your flows. Check out the examples below to get started!Getting StartedSummarize tracebacks with GPT3Tracebacks--it's quintessential in programming. They are a record of every line of code leading to the error, to help us, humans, determine what's wrong with the program and find a solution.However, tracebacks can be extraordinarily complex, especially for someone new to the codebase.To streamline this process, we could add AI to the mix, to offer a more human-readable summary of the issue, so it's easier for the developer to understand what went wrong and implement a fix.After installingprefect-openaiandsaving an OpenAI key, you can easily incorporate OpenAI within your flows to help you achieve the aforementioned benefits!fromprefectimportflow,get_run_loggerfromprefect_openaiimportOpenAICredentials,CompletionModel@flowdefsummarize_traceback(traceback:str)->str:logger=get_run_logger()openai_credentials=OpenAICredentials.load("openai-credentials")completion_model=CompletionModel(openai_credentials=openai_credentials,model="text-curie-001",max_tokens=512,)prompt=f"Summarize cause of error from this traceback: ```{traceback}```"summary=completion_model.submit_prompt(traceback).choices[0]["text"]logger.info(f"Summary of the traceback:{summary}")returnsummaryif__name__=="__main__":traceback="""ParameterBindError: Error binding parameters for function 'summarize_traceback': missing a required argument: 'traceback'.Function 'summarize_traceback' has signature 'traceback: str) -> str' but received args: () and kwargs:{}."""summarize_traceback(traceback)...12:29:32.085|INFO|Flowrun'analytic-starling'-Finishedtextcompletionusingthe'text-curie-001'modelwith113tokens,creating1choice(s).12:29:32.089|INFO|Flowrun'analytic-starling'-Summaryofthetraceback:Thiserroriscausedbythemissingargumenttraceback.Thefunctionexpectsatracebackobjectasitsfirstargument,butreceivednothing.
...Notice how the original traceback was quite long and confusing.On the flip side, the Curie GPT3 model was able to summarize the issue eloquently!!!! info "Built-in decorator"No need to build this yourself, `prefect-openai` features a
[built-in decorator](completion/#prefect_openai.completion.interpret_exception)
to help you automatically catch and interpret exceptions in flows, tasks, and even
vanilla Python functions.

```python
import httpx
from prefect_openai.completion import interpret_exception

@interpret_exception("COMPLETION_MODEL_BLOCK_NAME_PLACEHOLDER")
def example_func():
    resp = httpx.get("https://httpbin.org/status/403")
    resp.raise_for_status()

example_func()
```Create a story around a flow run name with GPT3 and DALL-EHave you marveled at all the AI-generated images and wondered how others did it?After installingprefect-openaiandsaving an OpenAI key, you, too, can create AI-generated art.Here's an example on how to create a story and an image based off a flow run name.fromprefectimportflow,task,get_run_loggerfromprefect.contextimportget_run_contextfromprefect_openaiimportOpenAICredentials,ImageModel,CompletionModel@taskdefcreate_story_from_name(credentials:OpenAICredentials,flow_run_name:str)->str:"""Create a fun story about the flow run name."""text_model=CompletionModel(openai_credentials=credentials,model="text-curie-001",max_tokens=288)text_prompt=f"Provide a fun story about a{flow_run_name}"story=text_model.submit_prompt(text_prompt).choices[0].text.strip()returnstory@taskdefcreate_image_from_story(credentials:OpenAICredentials,story:str)->str:"""Create an image associated with the story."""image_model=ImageModel(openai_credentials=credentials,size="512x512")image_result=image_model.submit_prompt(story)image_url=image_result.data[0]["url"]returnimage_url@flowdefcreate_story_and_image_from_flow_run_name()->str:"""Get the flow run name and create a story and image associated with it."""context=get_run_context()flow_run_name=context.flow_run.name.replace("-"," ")credentials=OpenAICredentials.load("openai-credentials")story=create_story_from_name(credentials=credentials,flow_run_name=flow_run_name)image_url=create_image_from_story(credentials=credentials,story=story)story_and_image=(f"The story about a{flow_run_name}: '{story}' "f"And its image:{image_url}")print(story_and_image)returnstory_and_imagecreate_story_and_image_from_flow_run_name()Saving an OpenAI keyIt's easy to set up anOpenAICredentialsblock!Head over tohttps://beta.openai.com/account/api-keysLogin to your OpenAI accountClick "+ Create new secret key"Copy the generated API keyCreate a short script, replacing the placeholders (or do so in the UI)fromprefect_openaiimportOpenAICredentials`OpenAICredentials(api_key="API_KEY_PLACEHOLDER").save("BLOCK_NAME_PLACEHOLDER")Congrats! You can now easily load the saved block, which holds your OpenAI API key:fromprefect_openaiimportOpenAICredentialsOpenAICredentials.load("BLOCK_NAME_PLACEHOLDER")VisitFlow Run Name Artto see some example output!ResourcesFor more tips on how to use tasks and flows in a Collection, check outUsing Collections!InstallationInstallprefect-openaiwithpip:pipinstallprefect-openaiRequires an installation of Python 3.7+.We recommend using a Python virtual environment manager such as pipenv, conda or virtualenv.These tasks are designed to work with Prefect 2.0. For more information about how to use Prefect, please refer to thePrefect documentation.FeedbackIf you encounter any bugs while usingprefect-openai, feel free to open an issue in theprefect-openairepository.If you have any questions or issues while usingprefect-openai, you can find help in either thePrefect Discourse forumor thePrefect Slack community.Feel free to star or watchprefect-openaifor updates too!ContributingIf you'd like to help contribute to fix an issue or add a feature toprefect-openai, pleasepropose changes through a pull request from a fork of the repository.Here are the steps:Fork the repositoryClone the forked repositoryInstall the repository and its dependencies:pip install -e ".[dev]"Make desired changesAdd testsInsert an entry toCHANGELOG.mdInstallpre-committo perform quality checks prior to commit:pre-commit installgit commit,git push, and create a pull request