ankigen / README.md
brickfrog's picture
Upload folder using huggingface_hub
efea6b6 verified
---
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.