Add/Update wolf/task.py by Wolf

This commit is contained in:
2026-04-05 17:59:25 +00:00
parent fcfbb7f106
commit f1787e50da

63
wolf/task.py Normal file
View File

@@ -0,0 +1,63 @@
import logging
import json
from dataclasses import dataclass, asdict
from typing import List, Dict, Any, Optional
@dataclass
class Task:
id: str
title: str
description: str
repo_owner: str
repo_name: str
issue_number: Optional[int] = None
assigned_model: Optional[str] = None
assigned_provider: Optional[str] = None
class TaskGenerator:
"""
Task generator for Wolf.
"""
def __init__(self, gitea_client):
self.gitea = gitea_client
def from_gitea_issues(self, owner, repo, label="wolf-task"):
issues = self.gitea.get_issues(owner, repo)
tasks = []
for issue in issues:
# Check for label if needed
labels = [l['name'] for l in issue.get('labels', [])]
if label and label not in labels:
continue
task = Task(
id=f"gitea-{owner}-{repo}-{issue['number']}",
title=issue['title'],
description=issue['body'],
repo_owner=owner,
repo_name=repo,
issue_number=issue['number']
)
tasks.append(task)
return tasks
def from_spec(self, spec_path):
with open(spec_path, 'r') as f:
data = json.load(f)
tasks = []
for item in data:
task = Task(**item)
tasks.append(task)
return tasks
def assign_tasks(self, tasks: List[Task], models: List[Dict[str, str]]):
"""
Assign tasks to models in a round-robin fashion or similar.
"""
assigned_tasks = []
for i, task in enumerate(tasks):
model_info = models[i % len(models)]
task.assigned_model = model_info['model']
task.assigned_provider = model_info['provider']
assigned_tasks.append(task)
return assigned_tasks