Add/Update wolf/task.py by Wolf
This commit is contained in:
63
wolf/task.py
Normal file
63
wolf/task.py
Normal 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
|
||||||
Reference in New Issue
Block a user