Spaces:
Running
Download README.md from RAc1928/second-brain-env: direct link, hf CLI and curl.
- Browser
- Download file 7.42 kB
-
https://huggingface.co/spaces/RAc1928/second-brain-env/resolve/main/README.md
- Command line
-
hf download hf://spaces/RAc1928/second-brain-env/README.md
-
curl -L -o README.md https://huggingface.co/spaces/RAc1928/second-brain-env/resolve/main/README.md
title: Second Brain Environment
emoji: π§
colorFrom: indigo
colorTo: purple
sdk: docker
app_port: 8000
π§ Second Brain β OpenEnv Environment
A Personal Knowledge Management environment where AI agents learn to capture, organize, and retrieve information β simulating the real-world challenge of managing a second brain.
π Motivation
Millions of people struggle with information overload daily. We save articles, capture meeting notes, jot down ideas β but rarely retrieve them when we actually need them.
This environment trains AI agents to act as a Personal Knowledge Manager: capturing raw notes, organizing them correctly, and retrieving the right information at the right time. This is a genuine real-world skill that benefits students, professionals, researchers, and anyone who manages information.
π― Tasks
Task 1 β note_categorization π’ Easy
| Property | Value |
|---|---|
| Goal | Assign each of 10 raw notes to the correct category |
| Categories | work, personal, reference, action_item |
| Max Steps | 12 |
| Reward | +0.10 per correct, -0.02 per wrong, 0.00 per skip |
| Score Formula | correct_count / 10 |
Task 2 β memory_retrieval π‘ Medium
| Property | Value |
|---|---|
| Goal | Find the most relevant note in a 30-note KB for each of 5 questions |
| Max Steps | 15 |
| Reward | +0.20 exact match, +0.05β0.16 near miss, -0.05 miss, -0.10 repeated failure |
| Score Formula | avg(retrieval_scores) / 5 |
Task 3 β knowledge_synthesis π΄ Hard
| Property | Value |
|---|---|
| Goal | Synthesize multi-theme insights from a 50-note knowledge base |
| Max Steps | 20 |
| Reward | Up to +0.35 per question (theme coverage + note coverage + length) |
| Score Formula | avg(synthesis_scores) / 3 |
π Action Space
class SecondBrainAction(BaseModel):
action_type: str # "categorize" | "retrieve" | "synthesize" | "tag" | "skip"
content: str # category name / search query / synthesized answer
note_id: Optional[str] # target note ID (optional)
tags: Optional[List[str]] # tags to apply (optional)
Action types:
categorizeβ assign a category label to the current note (Task 1)retrieveβ search the knowledge base with a query string (Task 2 & 3)synthesizeβ produce a final synthesized answer (Task 3)skipβ skip the current item (no reward)
ποΈ Observation Space
class SecondBrainObservation(BaseModel):
current_note: Optional[Dict] # note being processed (Task 1)
query: str # question to answer (Task 2 & 3)
retrieved_notes: Optional[List] # top notes from KB search
knowledge_base_size: int # total notes in KB
step_count: int # current step
task_name: str # active task
reward: float # reward from last action
done: bool # episode finished?
score: float # running score in [0.0, 1.0]
feedback: str # human-readable feedback
valid_categories: List[str] # valid labels for Task 1
remaining_items: int # items left to process
ποΈ Setup & Usage
Install
pip install openenv-core python-dotenv
pip install git+https://huggingface.co/spaces/RAc1928/second-brain-env
Run locally with Docker
git clone https://huggingface.co/spaces/RAc1928/second-brain-env
cd second-brain-env
docker build -t second-brain-env .
docker run -p 8000:8000 -p 8001:8001 -p 8002:8002 -p 8003:8003 second-brain-env
Connect as a client
import asyncio
from second_brain_env import SecondBrainEnv, SecondBrainAction
async def main():
async with SecondBrainEnv(base_url="http://localhost:8000") as env:
# Reset
result = await env.reset()
print(result.observation.feedback)
# Task 1: categorize a note
result = await env.step(SecondBrainAction(
action_type="categorize",
content="work"
))
print(f"Reward: {result.observation.reward}")
print(f"Score: {result.observation.score}")
asyncio.run(main())
Run baseline inference
export HF_TOKEN=hf_your_token_here
export API_BASE_URL=https://router.huggingface.co/v1
export MODEL_NAME=Qwen/Qwen2.5-72B-Instruct
export SECOND_BRAIN_URL=http://localhost:8000
python inference.py
Validate submission
openenv validate
π Baseline Scores
Scores produced by the Qwen/Qwen2.5-72B-Instruct model via HuggingFace router:
| Task | Difficulty | Baseline Score |
|---|---|---|
note_categorization |
π’ Easy | 0.70 |
memory_retrieval |
π‘ Medium | 0.52 |
knowledge_synthesis |
π΄ Hard | 0.38 |
| Average | 0.53 |
π Reward Design
Rewards are dense β every step produces a signal:
Task 1 (categorization):
Correct category β +0.10 (agent gets immediate confirmation)
Wrong category β -0.02 (small penalty, not catastrophic)
Skip β 0.00 (neutral β no progress)
Task 2 (retrieval):
Exact match β +0.20 (top-1 is the correct note)
Near miss rank 2 β +0.16 (partial credit)
Near miss rank 3 β +0.12
Not in top 5 β -0.05 (try a different query)
3 consecutive bad β -0.10 (penalty for looping)
Task 3 (synthesis):
Per relevant note found β +0.05
Synthesis theme coverage β up to +0.12
Synthesis note coverage β up to +0.11
Answer length bonus β up to +0.07
Multi-theme connection β +0.05 bonus
Hallucinated facts β -0.10 penalty
π³ Docker
# Build
docker build -t second-brain-env .
# Run (starts all 3 task servers automatically)
docker run -p 8000:8000 -p 8001:8001 -p 8002:8002 -p 8003:8003 second-brain-env
# Test
curl -X POST http://localhost:8000/reset
curl -X POST http://localhost:8000/step \
-H "Content-Type: application/json" \
-d '{"action_type": "categorize", "content": "work"}'
π Project Structure
second_brain_env/
βββ inference.py β baseline inference script (root level)
βββ openenv.yaml β environment manifest
βββ pyproject.toml β dependencies
βββ README.md
βββ __init__.py β exports Action, Observation, Env
βββ models.py β Pydantic typed models
βββ client.py β WebSocket client
βββ server/
βββ app.py β FastAPI server
βββ second_brain_env_environment.py β step/reset/state logic
βββ data.py β seed notes and knowledge base
βββ requirements.txt
βββ Dockerfile
π₯ Team
Team TwinCoders
- Rachana N
- Rakshith N
Built for the Meta Γ PyTorch Γ HuggingFace OpenEnv Hackathon 2026.