xai-org/x-algorithm · error · IllegalArgumentException

Never heard of $c before! Is this a new model version?

Error message

Never heard of $c before! Is this a new model version?

What it means

UserKnownForReadableStore.get dispatches on the ModelVersion enum and this is the catch-all branch: any ModelVersion constant not explicitly cased (Dec11, Updated, 2020) reaches `case c` and throws. It guards against serving known-for data for an unimplemented model version.

Source

Thrown at simclusters/simclusters_v2/summingbird/stores/UserKnownForReadableStore.scala:73

case class Query(userId: Long, modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated)

case class UserKnownForReadableStore(
  knownForStoreDec11: ReadableStore[Long, ClustersUserIsKnownFor],
  knownForStoreUpdated: ReadableStore[Long, ClustersUserIsKnownFor],
  knownForStore2020: ReadableStore[Long, ClustersUserIsKnownFor])
    extends ReadableStore[Query, ClustersUserIsKnownFor] {

  override def get(query: Query): Future[Option[ClustersUserIsKnownFor]] = {
    query.modelVersion match {
      case ModelVersion.Model20m145kDec11 =>
        knownForStoreDec11.get(query.userId)
      case ModelVersion.Model20m145kUpdated =>
        knownForStoreUpdated.get(query.userId)
      case ModelVersion.Model20m145k2020 =>
        knownForStore2020.get(query.userId)
      case c =>
        throw new IllegalArgumentException(
          s"Never heard of $c before! Is this a new model version?")
    }
  }
}

View on GitHub (pinned to 24c60942c5)

Solutions

  1. Use one of the explicitly handled versions (Dec11, Updated, 2020)
  2. Add a case for the new ModelVersion constant backed by an appropriate knownFor store and rebuild
  3. Check the ModelVersion enum in your classpath versus the version that produced the request
  4. Guard at the API boundary: reject requests with unhandled model versions before they reach this store

Example fix

// before
case ModelVersion.Model20m145k2020 => knownForStore2020.get(query.userId)
case c => throw new IllegalArgumentException(s"Never heard of $c before!")
// after
case ModelVersion.Model20m145k2020 => knownForStore2020.get(query.userId)
case ModelVersion.Model44m25k => knownForStore44m.get(query.userId)
Defensive patterns

Strategy: validation

Validate before calling

val handled = Set(ModelVersion.Model20m145kDec11, ModelVersion.Model20m145kUpdated, ModelVersion.Model20m145k2020)
require(handled.contains(query.modelVersion))

Type guard

def isServedVersion(v: ModelVersion): Boolean = v match {
  case ModelVersion.Model20m145kDec11 | ModelVersion.Model20m145kUpdated | ModelVersion.Model20m145k2020 => true
  case _ => false
}

Try / catch

try { store.get(query) } catch { case e: IllegalArgumentException if e.getMessage.contains("new model version") => Future.None }

Prevention

When it happens

Trigger: Calling UserKnownForReadableStore.get with a query whose modelVersion is a newly added enum constant (anything other than Model20m145kDec11, Model20m145kUpdated, Model20m145k2020), or a version introduced by a newer simclusters release.

Common situations: Adding a new ModelVersion to the shared enum without extending this store's match; cross-team enum extension where serving code lags; deserializing a request containing a version constant that this build does not know.

Related errors


AI-assisted analysis of xai-org/x-algorithm@24c60942c5 (2026-08-28). Data as JSON: /api/errors/e1bc6234feb262a6. Report an issue: GitHub.