quizgen-ai 1.0.2
AI-Powered Question Generation Tool
License: MIT
Requires Python: <4.0,>=3.10
Keywords: ai, quiz, anki, llm

# QuizGen: AI-Powered Question Generation Tool

*Effortlessly create AI-generated quizzes from your educational content.*

QuizGen is a Python-based tool that generates quiz questions from educational materials using state-of-the-art AI models. It's designed for educators, course creators, and developers looking to automate question creation from textbooks, lecture notes, and other learning resources, saving time and enhancing the learning experience. With QuizGen, you can streamline quiz creation for online courses, exam preparation, and interactive learning tools like Anki.

The tool processes content, extracts key concepts, generates relevant questions, and outputs them in formats suitable for e-learning platforms, such as Anki.

## Key Features

- **Automatic concept extraction**: Identifies key concepts from provided educational content.
- **AI-powered question generation**: Uses advanced AI models to create high-quality, diverse quiz questions.
- **Question similarity reduction**: Reduces redundancy in generated questions by comparing embeddings.
- **Anki integration**: Easily import generated questions into Anki for flashcard-based learning.
- **Extensible and customizable**: Modify templates and fine-tune the output to suit specific educational needs.

## Installation

Before you begin, ensure you have:

- Python 3.10 or later installed.
- An OpenAI API key (available from [OpenAI](https://platform.openai.com/signup)).
- Anki with AnkiConnect installed if you plan to use the Anki import feature.

### PyPI Installation

The easiest way to install QuizGen is via pip:

```bash
pip install quizgen-ai
```

### Development Setup

If you want to contribute or modify the tool, follow these steps:

1. Clone the repository:

   ```bash
   git clone https://github.com/kdunee/quizgen.git
   cd quizgen
   ```

1. Install Poetry (if not already installed):

   ```bash
   curl -sSL https://install.python-poetry.org | python3 -
   ```

1. Install the project dependencies:

   ```bash
   poetry install
   ```

1. Set up your OpenAI API key as an environment variable:

   ```bash
   export OPENAI_API_KEY=your_api_key_here
   ```

### Troubleshooting

- **Python version issues**: Ensure your Python version is 3.10+ by running `python --version`.
- **Poetry installation**: If you encounter issues with Poetry, refer to the [official Poetry documentation](https://python-poetry.org/docs/).
- For additional help, check the [OpenAI documentation](https://platform.openai.com/docs).

## Workflow

Here's the typical workflow for using QuizGen:

1. **Generate Questions:** Use the `generate` command to create questions from your source material. This outputs JSON files.
2. **Convert to CSV (Optional):** If needed, use the `convert` command to convert the JSON files to CSV.
3. **Generate Embeddings:** Use the `embeddings` command to create embeddings from the JSON questions. This is necessary for the next step.
4. **Thin Out Questions (Optional):** Use the `thin` command with the CSV and embeddings to reduce similar questions.
5. **Import to Anki (Optional):** Use the `anki` command with the CSV files to import your questions into Anki.

## Usage

QuizGen provides a unified command-line interface (CLI) to access all its functionalities. Here's how you can use it:

```bash
quizgen <command> [options]
```

**Available Commands:**

- **generate:** Generate questions from educational content.

   ```bash
    # Generate questions from a single chapter:
    quizgen generate --chapter-path path/to/chapter.md --title "Course Title" --output path/to/output.json

    # Generate questions in batch mode:
    quizgen generate --batch --input-dir path/to/source/files --output-dir path/to/output/json --title "Course Title"
    ```

- **convert:** Convert questions from JSON to CSV format.

    ```bash
    # Convert questions to CSV:
    quizgen convert --batch --input-dir path/to/json/files --output-dir path/to/csv/output
    ```

- **embeddings:** Generate embeddings for question comparison.

    ```bash
    # Generate embeddings:
    quizgen embeddings --batch --input-dir path/to/json/files --output-dir path/to/embeddings/output
    ```

- **thin:** Reduce similar questions using embeddings.

    ```bash
    # Thin out questions:
    quizgen thin --csv-dir path/to/csv/files --embeddings-dir path/to/embeddings --output-dir path/to/output --T 10 
    ```

- **anki:** Import questions into Anki.

    ```bash
    # Import to Anki:
    quizgen anki --input-dir path/to/csv/files --root-deck-name "Root Deck Name" 
    ```

## Model Selection

QuizGen allows you to select specific AI models for different stages of the question generation process. This can be useful for experimenting with different models or fine-tuning the output to your needs.

The following model selection arguments are available:

- `--concept-model`: Specifies the model used for concept extraction. Default is `gpt-4o-mini-2024-07-18`.
- `--questions-model`: Specifies the model used for question generation. Default is `gpt-4o-2024-08-06`.
- `--embedding-model`: Specifies the model used for generating embeddings. Default is `text-embedding-3-small`.

These arguments can be used with both single chapter and batch commands. For example:

```bash
# Generate questions using a specific model:
quizgen generate --chapter-path path/to/chapter.md --title "Course Title" --output path/to/output.json --questions-model gpt-4

# Generate embeddings using a specific model:
quizgen embeddings --batch --input-dir path/to/json/files --output-dir path/to/embeddings/output --embedding-model text-embedding-ada-002
```

## Example Anki Decks

Check out these example Anki decks generated using QuizGen:

- **Gradle Flashcards:** This deck is based on the official Gradle User Manual (October 2024) and covers a wide range of topics related to the Gradle build tool.
  - [Download the Anki deck](https://ankiweb.net/shared/info/1572773429)
- **Go Language Specification (October 2024)** - This deck is based on The Go Programming Language Specification.
  - [Download the Anki deck](https://ankiweb.net/shared/info/383266601)

## Contributing

Contributions are welcome! Here's how you can contribute:

1. Fork the repository.
1. Create a new branch (`git checkout -b feature-branch`).
1. Install the project using Poetry: `poetry install`
1. Make your changes.
1. Submit a Pull Request with a description of your changes.

For bug reports or feature requests, please open an issue on GitHub. Ensure that your contributions follow the coding guidelines.

## License

This project is licensed under the MIT License. See the `LICENSE` file for more details.