# `HfHub.Users`
[🔗](https://github.com/North-Shore-AI/hf_hub_ex/blob/v0.3.1/lib/hf_hub/users.ex#L1)

User profile and activity API.

Provides functions to interact with HuggingFace Hub user profiles,
followers/following relationships, and repository likes.

## Examples

    # Get user profile
    {:ok, user} = HfHub.Users.get("username")
    IO.inspect(user.num_followers)

    # List followers
    {:ok, followers} = HfHub.Users.list_followers("username")

    # Like/unlike repos
    :ok = HfHub.Users.like("bert-base-uncased")
    :ok = HfHub.Users.unlike("bert-base-uncased")

# `get`

```elixir
@spec get(
  String.t(),
  keyword()
) :: {:ok, HfHub.Users.User.t()} | {:error, term()}
```

Gets a user's public profile.

## Arguments

  * `username` - The HuggingFace username

## Options

  * `:token` - Authentication token

## Examples

    {:ok, user} = HfHub.Users.get("julien-c")
    IO.inspect(user.username)   # "julien-c"
    IO.inspect(user.fullname)   # "Julien Chaumond"

# `like`

```elixir
@spec like(
  String.t(),
  keyword()
) :: :ok | {:error, term()}
```

Likes a repository.

Requires authentication.

## Arguments

  * `repo_id` - Repository ID (e.g., "bert-base-uncased")

## Options

  * `:token` - Authentication token. If not provided, uses configured token.
  * `:repo_type` - Type of repository (`:model`, `:dataset`, `:space`). Defaults to `:model`.

## Examples

    :ok = HfHub.Users.like("bert-base-uncased")
    :ok = HfHub.Users.like("squad", repo_type: :dataset)

# `list_followers`

```elixir
@spec list_followers(
  String.t(),
  keyword()
) :: {:ok, [HfHub.Users.User.t()]} | {:error, term()}
```

Lists users who follow a user.

## Arguments

  * `username` - The HuggingFace username

## Options

  * `:token` - Authentication token

## Examples

    {:ok, followers} = HfHub.Users.list_followers("julien-c")
    Enum.each(followers, &IO.inspect(&1.username))

# `list_following`

```elixir
@spec list_following(
  String.t(),
  keyword()
) :: {:ok, [HfHub.Users.User.t()]} | {:error, term()}
```

Lists users a user is following.

## Arguments

  * `username` - The HuggingFace username

## Options

  * `:token` - Authentication token

## Examples

    {:ok, following} = HfHub.Users.list_following("julien-c")

# `list_liked_repos`

```elixir
@spec list_liked_repos(
  String.t(),
  keyword()
) :: {:ok, [map()]} | {:error, term()}
```

Lists repositories liked by a user.

## Arguments

  * `username` - The HuggingFace username

## Options

  * `:token` - Authentication token

## Examples

    {:ok, liked} = HfHub.Users.list_liked_repos("julien-c")

# `list_likers`

```elixir
@spec list_likers(
  String.t(),
  keyword()
) :: {:ok, [HfHub.Users.User.t()]} | {:error, term()}
```

Lists users who liked a repository.

## Arguments

  * `repo_id` - Repository ID (e.g., "bert-base-uncased")

## Options

  * `:token` - Authentication token
  * `:repo_type` - Type of repository (`:model`, `:dataset`, `:space`). Defaults to `:model`.

## Examples

    {:ok, likers} = HfHub.Users.list_likers("bert-base-uncased")

# `unlike`

```elixir
@spec unlike(
  String.t(),
  keyword()
) :: :ok | {:error, term()}
```

Unlikes a repository.

Requires authentication.

## Arguments

  * `repo_id` - Repository ID (e.g., "bert-base-uncased")

## Options

  * `:token` - Authentication token. If not provided, uses configured token.
  * `:repo_type` - Type of repository (`:model`, `:dataset`, `:space`). Defaults to `:model`.

## Examples

    :ok = HfHub.Users.unlike("bert-base-uncased")

---

*Consult [api-reference.md](api-reference.md) for complete listing*
