Introduction and Overview

Welcome to the first lesson of our course on building a short story generation service using Flask. In this lesson, we will focus on creating the base prompt, which is a crucial component for guiding the story generation process. A well-structured prompt serves as the foundation for generating creative content, ensuring that the output aligns with the desired theme and style. By the end of this lesson, you will understand how to create and manage a story prompt template, which will be used throughout the course to generate engaging short stories.

Recall: Basics of File Handling in Python

Before we dive into creating the base prompt, let's quickly recall some basics of file handling in Python. This will be essential as we will be working with a text file to store our story prompt template.

In Python, you can open a file using the open() function. This function requires the file path and the mode in which you want to open the file. For reading a file, you use the 'r' mode.

Here, file is a variable that holds a file object, which allows you to interact with the file's contents.

Once you have opened a file, you can read its contents using the read() method.

After reading the file, it's important to close it to free up system resources.

Alternatively, you can use the with statement to handle files, which automatically closes the file after the block of code is executed.

The with statement also helps prevent common issues such as file descriptor leaks or forgetting to close the file in case an exception occurs midway. It simplifies file handling logic and is a Pythonic way to manage external resources.

Understanding the Story Prompt Template

The story prompt template is a text file that outlines the structure and requirements for generating a short story. Let's examine the components of the story_prompt_template.txt file:

  • Role: Defines the perspective of the writer.
  • Theme: A placeholder {user_input} that will be replaced with the user's input.
  • Task: Describes the main objective of the story.
  • Style Requirements: Specifies the tone, language, structure, and length of the story.
  • Output Requirements: Lists the intended uses for the story.

These components guide the story generation process, ensuring consistency and alignment with the desired output.

Implementing the PromptManager Class

Now, let's implement the PromptManager class, which will manage the loading and formatting of the story prompt template.

Start by defining the PromptManager class with a docstring to describe its purpose.

The load_base_prompt method reads the template file and returns its contents. It includes error handling to manage any issues that arise during file reading.

The @classmethod decorator allows the method to be called on the class itself, rather than requiring an instance. This is useful here because we don’t need to maintain state between method calls, making PromptManager.format_prompt(...) directly usable without instantiating the class.

  • The method attempts to open and read the file specified by file_path.
  • If successful, it returns the file's contents.
  • If an error occurs, it prints an error message and returns a default prompt.

The format_prompt method formats the prompt by inserting the user's input into the template.

  • It calls load_base_prompt to get the template.
  • It uses the format method to replace {user_input} with the actual user input.
Integrating the PromptManager in the Main Application

Finally, let's see how to use the PromptManager class in the main application to generate a formatted prompt.

  • Import the PromptManager class.
  • Define a user_input string with the desired theme.
  • Call format_prompt to generate the formatted prompt.
  • Print the generated prompt to see the result.

Output:

Summary and Preparation for Practice

In this lesson, we explored the importance of a structured prompt in guiding the story generation process. We examined the components of the story_prompt_template.txt file and implemented the PromptManager class to manage and format the prompt. By integrating the PromptManager in the main application, we demonstrated how to generate a formatted prompt using user input.

As you move on to the practice exercises, focus on experimenting with different themes and observe how the prompt adapts. This hands-on practice will reinforce the concepts learned and prepare you for more advanced topics in subsequent lessons.

Sign up
Join the 1M+ learners on CodeSignal
Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal