modelforge 0.1.3

Model target parsing primitives for thesa archives
Documentation
# ModelForge

ModelForge provides model-provider and model-target parsing primitives used by
`thesa`.

Made by Trevor Knott for Knott Dynamics. ModelForge is part of the thesa archive
stack alongside `repoforge`, `siteforge`, Scrin, and Aisling.

The crate normalizes Hugging Face, Ollama, and CivitAI target forms into simple
archive targets. It does not call provider APIs and it does not download models;
it only turns user-facing target strings into stable Rust enums.

## Install

```toml
[dependencies]
modelforge = "0.1"
```

## Providers

```rust
assert_eq!(modelforge::ModelProvider::Hf.slug(), "hf");
assert_eq!(
    modelforge::ModelProvider::from_slug("hugging-face"),
    Some(modelforge::ModelProvider::Hf)
);
```

Supported providers:

- `ModelProvider::Hf`: Hugging Face Hub
- `ModelProvider::Ollama`: local Ollama registry/runtime
- `ModelProvider::Civitai`: CivitAI model catalog

## Targets

```rust
let target = modelforge::parse_model_target_for_provider(
    "https://huggingface.co/openai-community/gpt2",
    modelforge::ModelProvider::Hf,
)?;

assert_eq!(target.kind(), "model");
assert_eq!(target.value(), Some("openai-community/gpt2"));
# Ok::<(), modelforge::ModelForgeError>(())
```

Normalized targets:

- `ModelTarget::Org(String)`: namespace, organization, owner, or search keyword
- `ModelTarget::Model(String)`: concrete model id
- `ModelTarget::Top`: top/trending/popular preset
- `ModelTarget::Latest`: latest/newest/new preset

## Accepted Forms

Hugging Face:

- `owner`
- `owner/model`
- `https://huggingface.co/owner/model`
- `top`, `trending`, `popular`
- `latest`, `newest`, `new`

Ollama:

- `model-name` or search keyword
- `top`, `trending`, `popular`
- `latest`, `newest`, `new`

CivitAI:

- numeric model id, such as `827184`
- `https://civitai.com/models/827184`
- search keyword
- `top`, `trending`, `popular`
- `latest`, `newest`, `new`

## Design

ModelForge keeps parsing separate from provider API clients. Consumers such as
`thesa` can use the normalized target enum to decide whether to fetch a single
model, list a namespace, or run a provider-specific preset query.

## Role In Thesa

`thesa` uses ModelForge before calling provider APIs. The CLI and TUI collect a
target string, ModelForge normalizes it, and thesa then runs the provider flow
with Scrin/Aisling status panels and `.thesa` integrity manifests.