weaviate/weaviate · error

unknown type %T in Explore..className resolver

Error message

unknown type %T in Explore..className resolver

What it means

The Explore GraphQL object's className field resolver type-asserts its source to search.Result. If the GraphQL executor hands it any other type (a wiring bug in how the resolver is registered or an unexpected source object), it returns this error instead of panicking. End users cannot normally trigger it — it indicates an internal invariant violation in the Explore resolver setup.

Source

Thrown at adapters/handlers/graphql/local/explore/concepts.go:70

	if modulesProvider != nil {
		for name, argument := range modulesProvider.ExploreArguments(schema) {
			field.Args[name] = argument
		}
	}

	return field
}

func exploreObject() *graphql.Object {
	getLocalExploreFields := graphql.Fields{
		"className": &graphql.Field{
			Name:        "ExploreClassName",
			Description: descriptions.ClassName,
			Type:        graphql.String,
			Resolve: func(p graphql.ResolveParams) (interface{}, error) {
				vsr, ok := p.Source.(search.Result)
				if !ok {
					return nil, fmt.Errorf("unknown type %T in Explore..className resolver", p.Source)
				}

				return vsr.ClassName, nil
			},
		},

		"beacon": &graphql.Field{
			Name:        "ExploreBeacon",
			Description: descriptions.Beacon,
			Type:        graphql.String,
			Resolve: func(p graphql.ResolveParams) (interface{}, error) {
				vsr, ok := p.Source.(search.Result)
				if !ok {
					return nil, fmt.Errorf("unknown type %T in Explore..className resolver", p.Source)
				}

				return vsr.Beacon, nil
			},

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. Upgrade Weaviate to the latest patch release — this indicates an internal resolver/source mismatch bug
  2. Check any installed custom modules or patches that touch the Explore/nearestObjects pipeline and remove or update them
  3. Report the exact query and version to Weaviate maintainers with the full error including the %T type name
Defensive patterns

Strategy: try-catch

Try / catch

try {
  const res = await client.graphql.explore().withNearText(nearText).do();
} catch (e) {
  if (e.message.includes('unknown type') && e.message.includes('className resolver')) {
    // internal invariant violation: report version + query to maintainers
  }
  throw e;
}

Prevention

When it happens

Trigger: Querying the Explore { className } field when the resolver's p.Source is not a search.Result — e.g. after internal refactors, custom module patches, or a bug where Explore results are wrapped or converted into a different type before resolution.

Common situations: Running patched/custom Weaviate builds or modules that alter the Explore result pipeline; version upgrades where internal search.Result shapes changed; plugin code that replaces the Explore root resolver.

Related errors


AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04). Data as JSON: /api/errors/196de229cbe85bf8. Report an issue: GitHub.