118 lines
2.8 KiB
Markdown
118 lines
2.8 KiB
Markdown
# Project: Raw Text → Flat Task Card
|
||
|
||
## 📖 Overview
|
||
|
||
This project turns a natural‑language description of an assignment into a **structured, machine‑readable card**.
|
||
Given a single sentence or short paragraph from a teacher (e.g., “Write a report on LangChain”), the script uses OpenAI via LangChain to produce a validated `TaskCard` object containing:
|
||
|
||
| Field | Description |
|
||
|-------|-------------|
|
||
| `title` | Short title of the task |
|
||
| `subject` | Subject area (optional) |
|
||
| `deadline_hint` | Free‑form hint about when it’s due |
|
||
| `deliverable_type` | What to submit (report, code, presentation…) |
|
||
| `grading_hints` | List of grading criteria mentioned |
|
||
|
||
The output is printed as JSON and a concise summary.
|
||
|
||
---
|
||
|
||
## 🚀 Installation
|
||
|
||
```bash
|
||
# Clone the repo (or copy the file)
|
||
git clone https://github.com/your‑repo/task‑card.git
|
||
cd task-card
|
||
|
||
# Create virtual environment (optional but recommended)
|
||
python -m venv .venv
|
||
source .venv/bin/activate # Windows: .venv\\Scripts\\activate
|
||
|
||
# Install dependencies
|
||
pip install langchain-core langchain-openai pydantic python-dotenv
|
||
```
|
||
|
||
> **Environment variables**
|
||
> The script uses `OPENAI_API_KEY`. Create a `.env` file in the project root:
|
||
|
||
```dotenv
|
||
OPENAI_API_KEY=sk-...
|
||
```
|
||
|
||
or export it directly:
|
||
|
||
```bash
|
||
export OPENAI_API_KEY="sk-..."
|
||
```
|
||
|
||
---
|
||
|
||
## 📦 Usage
|
||
|
||
The main entry point is `solution.py`.
|
||
|
||
### 1. Run with an inline string
|
||
|
||
```bash
|
||
python solution.py "Write a short report on LangChain and its applications."
|
||
```
|
||
|
||
**Output**
|
||
|
||
```json
|
||
{
|
||
"title": "Short Report on LangChain",
|
||
"subject": null,
|
||
"deadline_hint": "Submit by the end of the week.",
|
||
"deliverable_type": "report",
|
||
"grading_hints": [
|
||
"Clarity of explanation",
|
||
"Depth of examples"
|
||
]
|
||
}
|
||
```
|
||
|
||
### 2. Run with a file
|
||
|
||
Create `task.txt` containing your assignment description:
|
||
|
||
```text
|
||
Develop a Python script that uses LangChain to parse user input and produce a structured task card.
|
||
```
|
||
|
||
Run:
|
||
|
||
```bash
|
||
python solution.py -f task.txt
|
||
```
|
||
|
||
The same JSON will be printed.
|
||
|
||
### 3. Using the output programmatically
|
||
|
||
You can import `TaskCard` from `solution.py` in another Python script:
|
||
|
||
```python
|
||
from solution import TaskCard, parse_task_description
|
||
|
||
description = "Create a presentation on AI ethics."
|
||
card: TaskCard = parse_task_description(description)
|
||
print(card.title) # -> "Presentation on AI Ethics"
|
||
```
|
||
|
||
---
|
||
|
||
## 🛠️ How It Works
|
||
|
||
1. **Prompt** – A `PromptTemplate` instructs the model to output JSON matching the `TaskCard` schema.
|
||
2. **LLM** – `ChatOpenAI` (any OpenAI-compatible model) processes the prompt.
|
||
3. **Parser** – `PydanticOutputParser` validates and converts the raw text into a `TaskCard`.
|
||
4. **Result** – The script prints the JSON representation and a short human‑readable summary.
|
||
|
||
---
|
||
|
||
## 📄 License
|
||
|
||
MIT © 2026
|
||
|
||
--- |