# API em Python para Gerenciar Execuções

O Trackio fornece uma classe de API em Python (`trackio.Api()`) que permite gerenciar programaticamente execuções em seus projetos. Esta API é semelhante à `wandb.Api()` e fornece métodos para excluir execuções, mover execuções entre projetos e acessar informações de execução.

**Observação:** Isso é diferente de [Trackio como um Servidor de API](api_mcp_server), que executa o dashboard do Trackio como um servidor web com endpoints de API. A API em Python (`trackio.Api()`) é uma interface do lado do cliente para gerenciar execuções no seu banco de dados local do Trackio.

## Uso Básico

```python
import trackio

# Initialize the API
api = trackio.Api()

# Get all runs in a project
runs = api.runs("my_project")

# Access individual runs
for run in runs:
    print(f"Run: {run.name}, Project: {run.project}")
    print(f"Config: {run.config}")

# Or access by index
first_run = runs[0]
```

## Excluindo Execuções

```python
api = trackio.Api()
runs = api.runs("my_project")

# Delete a specific run
run = runs[0]
success = run.delete()  # Returns True if successful
```

## Movendo Execuções Entre Projetos

```python
api = trackio.Api()
runs = api.runs("source_project")

# Move a run to a different project
run = runs[0]
success = run.move("target_project")  # Returns True if successful

# After moving, the run object's project is updated
print(run.project)  # "target_project"
```

Ao mover uma execução, todos os dados associados são transferidos:
- Todas as métricas e logs
- Configuração de execução
- Métricas do sistema
- Arquivos de mídia (imagens, vídeos, áudio)

A execução é removida completamente do projeto de origem e adicionada ao projeto de destino.

## Referência da API

### Api

Ponto de entrada principal da API Python do Trackio.

```python
api = trackio.Api()
```

#### Métodos

- **`runs(project: str) -> Runs`**: Retorna uma coleção de execuções para o projeto especificado. Lança `ValueError` se o projeto não existir.

### Execuções

Uma coleção de execuções que suporta iteração e indexação.

```python
runs = api.runs("my_project")
len(runs)  # Number of runs
runs[0]    # First run
for run in runs:  # Iterate over runs
    ...
```

### Executar

Representa uma única execução em um projeto.

#### Propriedades

- **`id`**: O identificador estável de execução usado internamente pelo Trackio
- **`name`**: O nome legível da execução. Várias execuções podem compartilhar o mesmo nome.
- **`project`**: O projeto ao qual esta execução pertence
- **`config`**: Dicionário de configuração da execução (carregado sob demanda)

Note: Multiple runs can share the same `name`, as Trackio will use the `id` identifier to disambiguate them internally.

#### Métodos

- **`delete() -> bool`**: Remove a execução do seu projeto. Retorna `True` em caso de sucesso, `False` caso contrário.
- **`move(new_project: str) -> bool`**: Move a execução para um projeto diferente. Retorna `True` em caso de sucesso, `False` caso contrário. Atualiza a propriedade `project` da execução após um movimento bem-sucedido.

## Exemplos

### Listar todas as execuções entre os projetos

```python
import trackio
from trackio.sqlite_storage import SQLiteStorage

api = trackio.Api()

# Get all projects
projects = SQLiteStorage.get_projects()

# List runs in each project
for project in projects:
    print(f"\nProject: {project}")
    runs = api.runs(project)
    for run in runs:
        print(f"  - {run.name}")
```

### Limpar execuções antigas

```python
api = trackio.Api()
runs = api.runs("my_project")

# Delete runs older than a certain date
from datetime import datetime
cutoff_date = datetime(2024, 1, 1)

for run in runs:
    if run.config and "_Created" in run.config:
        created = datetime.fromisoformat(run.config["_Created"])
        if created < cutoff_date:
            run.delete()
            print(f"Deleted old run: {run.name}")
```

### Organize execuções movendo-as

```python
api = trackio.Api()

# Move all runs from "experiments" to "archive"
source_runs = api.runs("experiments")
for run in source_runs:
    run.move("archive")
    print(f"Moved {run.name} to archive")
```

