|
--- |
|
title: AnkiGen |
|
emoji: π |
|
app_file: app.py |
|
requirements: requirements.txt |
|
python: 3.10 |
|
sdk: gradio |
|
sdk_version: 5.34.2 |
|
--- |
|
|
|
# AnkiGen - Anki Card Generator |
|
|
|
AnkiGen is a Gradio-based web application that generates high-quality Anki-compatible CSV and `.apkg` deck files using an advanced multi-agent system powered by OpenAI Agents. The system employs specialized generator agents, quality assessment judges, and enhancement agents to create superior flashcards. |
|
|
|
## Features |
|
|
|
- **Multi-Agent Card Generation**: Utilizes specialized agents for subject expertise, pedagogical guidance, and content structuring |
|
- **Quality Assurance System**: Multiple judge agents evaluate cards for accuracy, clarity, pedagogical value, and completeness |
|
- **Adaptive Enhancement**: Revision and enhancement agents improve cards based on judge feedback |
|
- Generate Anki cards for various subjects or from provided text/URLs |
|
- Generate a structured learning path for a complex topic |
|
- Customizable number of topics and cards per topic |
|
- User-friendly interface powered by Gradio |
|
- Exports to CSV for manual import or `.apkg` format with default styling |
|
- Advanced OpenAI Agents SDK integration with structured outputs |
|
|
|
## How It Works |
|
|
|
```mermaid |
|
graph TD |
|
A[User Input] --> B[Generation Coordinator] |
|
B --> C[Subject Expert Agent] |
|
B --> D[Pedagogical Agent] |
|
B --> E[Content Structuring Agent] |
|
|
|
C --> F[Generated Cards] |
|
D --> F |
|
E --> F |
|
|
|
F --> G[Judge Coordinator] |
|
G --> H[Content Accuracy Judge] |
|
G --> I[Pedagogical Judge] |
|
G --> J[Clarity Judge] |
|
G --> K[Technical Judge] |
|
G --> L[Completeness Judge] |
|
|
|
H --> M{60% Consensus?} |
|
I --> M |
|
J --> M |
|
K --> M |
|
L --> M |
|
|
|
M -->|No| N[Revision Agent] |
|
N --> O[Enhancement Agent] |
|
O --> B |
|
|
|
M -->|Yes| P[Final High-Quality Cards] |
|
P --> Q[Export to CSV/APKG] |
|
``` |
|
|
|
## Installation for Local Use |
|
|
|
Preferred usage: [uv](https://github.com/astral-sh/uv) |
|
|
|
1. Clone this repository: |
|
|
|
```bash |
|
git clone https://github.com/brickfrog/ankigen.git |
|
cd ankigen |
|
uv venv |
|
source .venv/bin/activate # Activate the virtual environment |
|
``` |
|
|
|
2. Install the required dependencies: |
|
|
|
```bash |
|
uv pip install -e . # Install the package in editable mode |
|
``` |
|
|
|
3. Set up your OpenAI API key: |
|
- Create a `.env` file in the project root (`ankigen/`). |
|
- Add your key like this: `OPENAI_API_KEY="your_sk-xxxxxxxx_key_here"` |
|
- The application will load this key automatically. |
|
- **Note**: This application requires OpenAI API access and uses the `openai-agents` SDK for advanced multi-agent functionality. |
|
|
|
## Usage |
|
|
|
1. Ensure your virtual environment is active (`source .venv/bin/activate`). |
|
|
|
2. Run the application: |
|
|
|
```bash |
|
uv run python app.py |
|
``` |
|
*(Note: The `gradio app.py` command might also work but using `python app.py` within the `uv run` context is recommended.)* |
|
|
|
3. Open your web browser and navigate to the provided local URL (typically `http://127.0.0.1:7860`). |
|
|
|
4. In the application interface: |
|
- Your API key should be loaded automatically if using a `.env` file, otherwise enter it. |
|
- Select the desired generation mode ("Single Subject", "Learning Path", "From Text", "From Web"). |
|
- Fill in the relevant inputs for the chosen mode. |
|
- Adjust generation parameters (model, number of topics/cards, preferences). |
|
- Click "Generate Cards" or "Analyze Learning Path". |
|
|
|
5. Review the generated output. |
|
|
|
6. For card generation, click "Export to CSV" or "Export to Anki Deck (.apkg)" to download the results. |
|
|
|
## Project Structure |
|
|
|
The codebase uses a sophisticated multi-agent architecture powered by the OpenAI Agents SDK: |
|
|
|
- `app.py`: Main Gradio application interface and event handling. |
|
- `ankigen_core/`: Directory containing the core logic modules: |
|
- `agents/`: **OpenAI Agents system implementation**: |
|
- `base.py`: Base agent wrapper and configuration classes |
|
- `generators.py`: Specialized generator agents (SubjectExpertAgent, PedagogicalAgent, ContentStructuringAgent) |
|
- `judges.py`: Quality assessment agents (ContentAccuracyJudge, PedagogicalJudge, ClarityJudge, etc.) |
|
- `enhancers.py`: Revision and enhancement agents for card improvement |
|
- `integration.py`: AgentOrchestrator for coordinating the entire agent system |
|
- `config.py`: Agent configuration management |
|
- `schemas.py`: Pydantic schemas for structured agent outputs |
|
- `templates/`: Jinja2 templates for agent prompts |
|
- `models.py`: Pydantic models for data structures. |
|
- `utils.py`: Logging, caching, web fetching utilities. |
|
- `llm_interface.py`: OpenAI API client management. |
|
- `card_generator.py`: Integration layer for agent-based card generation. |
|
- `learning_path.py`: Logic for the learning path analysis feature. |
|
- `exporters.py`: Functions for exporting data to CSV and `.apkg`. |
|
- `ui_logic.py`: Functions handling UI component updates and visibility. |
|
- `tests/`: Contains unit and integration tests. |
|
- `unit/`: Tests for individual modules in `ankigen_core`. |
|
- `integration/`: Tests for interactions between modules and the app. |
|
- `pyproject.toml`: Defines project metadata, dependencies, and build system configuration. |
|
- `README.md`: This file. |
|
|
|
## Agent System Architecture |
|
|
|
AnkiGen employs a sophisticated multi-agent system built on the OpenAI Agents SDK that ensures high-quality flashcard generation through specialized roles and quality control: |
|
|
|
### Generator Agents |
|
- **SubjectExpertAgent**: Provides domain-specific expertise for accurate content creation |
|
- **PedagogicalAgent**: Ensures cards follow effective learning principles and memory techniques |
|
- **ContentStructuringAgent**: Optimizes card structure, formatting, and information hierarchy |
|
|
|
### Quality Assurance Judges |
|
- **ContentAccuracyJudge**: Verifies factual correctness and subject matter accuracy |
|
- **PedagogicalJudge**: Evaluates learning effectiveness and educational value |
|
- **ClarityJudge**: Assesses readability, comprehension, and clear communication |
|
- **TechnicalJudge**: Reviews technical accuracy for specialized subjects |
|
- **CompletenessJudge**: Ensures comprehensive coverage without information gaps |
|
|
|
### Enhancement Agents |
|
- **RevisionAgent**: Identifies areas for improvement based on judge feedback |
|
- **EnhancementAgent**: Implements refinements and optimizations to failed cards |
|
|
|
### Orchestration |
|
- **GenerationCoordinator**: Manages the card generation workflow and agent handoffs |
|
- **JudgeCoordinator**: Coordinates quality assessment across all judge agents |
|
- **AgentOrchestrator**: Main system controller that initializes and manages the entire agent ecosystem |
|
|
|
This architecture ensures that every generated flashcard undergoes rigorous quality control and iterative improvement, resulting in superior learning materials. |
|
|
|
## Development |
|
|
|
This project uses `uv` for environment and package management and `pytest` for testing. |
|
|
|
1. **Setup:** Follow the Installation steps above. |
|
|
|
2. **Install Development Dependencies:** |
|
```bash |
|
uv pip install -e ".[dev]" |
|
``` |
|
|
|
3. **Running Tests:** |
|
- To run all tests: |
|
```bash |
|
uv run pytest tests/ |
|
``` |
|
- To run with coverage: |
|
```bash |
|
uv run pytest --cov=ankigen_core tests/ |
|
``` |
|
*(Current test coverage target is >= 80%. As of the last run, coverage was ~89%.)* |
|
|
|
4. **Code Style:** Please use `black` and `ruff` for formatting and linting (configured in `pyproject.toml` implicitly via dev dependencies, can be run manually). |
|
|
|
5. **Making Changes:** |
|
- Core logic changes should primarily be made within the `ankigen_core` modules. |
|
- UI layout and event wiring are in `app.py`. |
|
- Add or update tests in the `tests/` directory for any new or modified functionality. |
|
|
|
## TODO |
|
|
|
- [ ] Edit columns /fields |
|
- [ ] Improve crawler / RAG integration with agents |
|
- [ ] Add agent performance metrics and monitoring |
|
- [ ] Implement agent conversation history and context persistence |
|
- [ ] Add custom agent configuration UI |
|
- [ ] Expand subject-specific agent templates |
|
|
|
## License |
|
|
|
BSD 2-Clause License |
|
|
|
## Acknowledgments |
|
|
|
- This project uses the Gradio library (https://gradio.app/) for the web interface. |
|
- Card generation is powered by OpenAI's language models. |
|
- Card generation principles inspired by ["An Opinionated Guide to Using Anki Correctly"](https://www.lesswrong.com/posts/7Q7DPSk4iGFJd8DRk/an-opinionated-guide-to-using-anki-correctly) by Luise, which emphasizes atomic card design, standardized prompts, and effective spaced repetition practices. |
|
|