goha

Command Palette

Search for a command to run...

Open data

The index, as JSON

Every page on goha is rendered from static JSON files under /data/. There is no API key, no auth and no rate limit — the same files the site fetches are the ones you can read. They are rebuilt by the daily scrape, so everything here is a snapshot, not a live stream.

Endpoints

PathWhat it holdsShape
/data/projects.jsonEvery entity in one contract: models, datasets, companies, papers.Project[]
/data/papers.jsonResearch index with derived language and task tags.{ data: Paper[] }
/data/orgs.jsonOrganization footprints merged with curated company records.{ data: Org[] }
/data/leaderboard.jsonPublished evaluations normalized per task, best first.{ sections: Section[] }
/data/stats.jsonCounts, index freshness and the featured model.Stats
/data/activity.jsonRecent ecosystem events with entity links.{ data: Event[] }
/data/insights.jsonWeekly download movers and most-downloaded models.Insights
/data/languages.jsonLanguage index — name, slug and script glyph.{ data: Language[] }
/data/language-coverage.jsonLanguage × task matrix used by the radar and gap report.{ rows, languages, tasks }
/data/growth.jsonDaily model/dataset counts from every snapshot.{ data: GrowthPoint[] }
/data/top-models-history.jsonDownload history of the five most-used models.{ rows, series }
/data/lineage.jsonModel family tree — nodes, edges, families, layout.{ nodes, links, families }
/data/taxonomy.jsonCategories and language/tech stacks used by filters.{ categories, techStacks }

Examples

Read the freshness of the index:

curl -s https://goha.enoch.et/data/stats.json | jq .counts

Filter Amharic speech models with jq:

curl -s https://goha.enoch.et/data/projects.json \
  | jq '[.[] | select(
      (.projectCategories[1].name // "") == "ASR"
      and ((.repositoryDetails.languages // []) | index("Amharic"))
    ) | { title, downloadsMonthly, repoUrl }]'

Pull published ASR results as CSV:

curl -s https://goha.enoch.et/data/leaderboard.json \
  | jq -r '.sections[] | select(.task=="ASR")
      | .rows[] | [.model, .org, .metric, .display, .dataset]
      | @csv'

The Project shape

projects.json is the one contract everything else renders from. The goha-specific fields are additive to the original open-source schema:

{
  "id": "pjt_…",
  "title": "wav2vec2-large-xlsr-53-amharic",
  "description": "Speech recognition model for Amharic.",
  "owner": { "name": "agkphysics" },
  "projectCategories": [{ "name": "Model" }, { "name": "ASR" }],
  "repositoryDetails": {
    "stars": 5,
    "license": "mit",
    "languages": ["Amharic"],
    "readme": "<base64 model card>"
  },
  "downloadsMonthly": 73007,
  "growth": 30,
  "sparkline": { "points": [ … ], "timestamps": [ … ] },
  "evaluations": [ … ],      // published metric tables
  "baseModel": "…",          // lineage edge
  "paramCount": 315678570
}

Honest caveats

  • These are static files. Freshness is the scrape cadence — check stats.json → indexedAt.
  • Language and task tags are derived from model-card metadata and names, not authored by us; the derivation is documented on the gap report.
  • Hosting is GitHub Pages. Server-side fetches always work; for browser fetch from another origin, check the response's CORS headers before relying on it.
  • The data is public ecosystem data aggregated under MIT; the upstream model cards keep their own licenses — always check the asset itself before reuse.

Find what's new
in Ethiopian AI

goha surfaces every model, dataset, company and paper built for Ethiopian languages — indexed daily and open to everyone.