Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 6 additions & 11 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,11 @@ jobs:

- name: Install dependencies
run: |
cd v2
uv pip install -e ".[dev]"
uv sync --extra dev

- name: Run unit tests
run: |
cd v2
pytest tests/ -v -m "not integration" --tb=short
uv run pytest tests/ -v -m "not integration" --tb=short

docker-build:
runs-on: ubuntu-latest
Expand All @@ -42,12 +40,11 @@ jobs:

- name: Build Docker image
run: |
cd v2
docker build -f docker/codex-runtime.Dockerfile -t agentic-datagen-codex:v2 .
docker build -f docker/codex-runtime.Dockerfile -t teich-codex:ci .

- name: Test Codex CLI in container
run: |
docker run --rm agentic-datagen-codex:v2 codex --version
docker run --rm teich-codex:ci codex --version

integration-tests:
runs-on: ubuntu-latest
Expand All @@ -70,12 +67,10 @@ jobs:

- name: Install dependencies
run: |
cd v2
uv pip install -e ".[dev]"
uv sync --extra dev

- name: Run integration tests
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
cd v2
pytest tests/test_integration.py -v --tb=short
uv run pytest tests/test_integration.py -v --tb=short
3 changes: 1 addition & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,13 @@ dev = ["pytest>=8.0", "pytest-asyncio>=0.23", "ruff>=0.4", "respx>=0.22"]

[project.scripts]
teich = "teich.cli:main"
agentic-datagen = "teich.cli:main"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["src/agentic_datagen", "src/teich"]
packages = ["src/teich"]

[tool.pytest.ini_options]
testpaths = ["tests"]
Expand Down
18 changes: 0 additions & 18 deletions src/agentic_datagen/__init__.py

This file was deleted.

4 changes: 0 additions & 4 deletions src/agentic_datagen/__main__.py

This file was deleted.

30 changes: 6 additions & 24 deletions src/teich/__init__.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,11 @@
from __future__ import annotations
"""Teich - generate training data from Codex and Pi traces."""

import sys
from importlib import import_module
from .config import Config, load_config
from .converter import TrainingExample, convert_trace_to_training_example, convert_traces_to_training_data
from .formatter import format_and_mask
from .loader import load_traces

from agentic_datagen import (
Config,
TrainingExample,
__version__,
convert_trace_to_training_example,
convert_traces_to_training_data,
format_and_mask,
load_config,
load_traces,
)

for _module_name in (
"cli",
"config",
"converter",
"formatter",
"loader",
"runner",
"trace_readme",
):
sys.modules[f"{__name__}.{_module_name}"] = import_module(f"agentic_datagen.{_module_name}")
__version__ = "0.1.1a3"

__all__ = [
"Config",
Expand Down
File renamed without changes.
55 changes: 10 additions & 45 deletions src/agentic_datagen/config.py → src/teich/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@

from __future__ import annotations

import csv
import os
from pathlib import Path
import re

import yaml
from pydantic import BaseModel, Field, field_validator, model_validator

from .utils.prompts import load_prompt_rows


GITHUB_REPO_ID_PATTERN = re.compile(r"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$")

Expand Down Expand Up @@ -225,57 +226,21 @@ def get_prompt_inputs(self) -> list[PromptInput]:
"""Get structured prompt inputs from config and prompts_file."""
prompt_inputs = [PromptInput(prompt=prompt) for prompt in self.prompts]
if self.prompts_file:
prompt_inputs.extend(self._load_prompt_inputs_from_file(self.prompts_file))
prompt_inputs.extend(
PromptInput(
image=row.get("image"),
github_repo=row.get("github_repo"),
prompt=row.get("prompt") or "",
)
for row in load_prompt_rows(self.prompts_file)
)
for prompt_input in prompt_inputs:
if prompt_input.image is not None:
raise ValueError(
"Prompt image inputs are not supported yet. Leave the image column blank or set it to None."
)
return prompt_inputs

@staticmethod
def _load_prompt_inputs_from_file(path: Path) -> list[PromptInput]:
if path.suffix.lower() == ".csv":
return Config._load_prompt_inputs_from_csv(path)
return Config._load_prompt_inputs_from_text(path)

@staticmethod
def _load_prompt_inputs_from_text(path: Path) -> list[PromptInput]:
with path.open("r", encoding="utf-8") as handle:
return [
PromptInput(prompt=line.strip())
for line in handle
if line.strip() and not line.startswith("#")
]

@staticmethod
def _load_prompt_inputs_from_csv(path: Path) -> list[PromptInput]:
with path.open("r", encoding="utf-8", newline="") as handle:
reader = csv.DictReader(handle)
fieldnames = [name.strip().lower() for name in reader.fieldnames or [] if isinstance(name, str)]
if "prompt" not in fieldnames:
raise ValueError("Prompt CSV must include a 'prompt' column")
prompt_inputs: list[PromptInput] = []
for row in reader:
normalized_row = {
key.strip().lower(): value
for key, value in row.items()
if isinstance(key, str)
}
if not any(
isinstance(value, str) and value.strip()
for value in normalized_row.values()
):
continue
prompt_inputs.append(
PromptInput(
image=normalized_row.get("image"),
github_repo=normalized_row.get("github_repo"),
prompt=normalized_row.get("prompt") or "",
)
)
return prompt_inputs


def load_config(path: Path) -> Config:
"""Load configuration from YAML file.
Expand Down
Loading
Loading