openai/openai-python · error · ValueError

Expected a non-empty value for `version` but received {versi

Error message

Expected a non-empty value for `version` but received {version!r}

What it means

Sync skill-version retrieval's second guard: version must be non-empty for GET /skills/{skill_id}/versions/{version}. Fires when skill_id is valid but version is empty/None, preventing an accidental request to the version-list path.

Source

Thrown at src/openai/resources/skills/versions/versions.py:155

    ) -> SkillVersion:
        """
        Get a specific skill version.

        Args:
          version: The version number to retrieve.

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        """
        if not skill_id:
            raise ValueError(f"Expected a non-empty value for `skill_id` but received {skill_id!r}")
        if not version:
            raise ValueError(f"Expected a non-empty value for `version` but received {version!r}")
        return self._get(
            path_template("/skills/{skill_id}/versions/{version}", skill_id=skill_id, version=version),
            options=make_request_options(
                extra_headers=extra_headers,
                extra_query=extra_query,
                extra_body=extra_body,
                timeout=timeout,
                security={"bearer_auth": True},
            ),
            cast_to=SkillVersion,
        )

    def list(
        self,
        skill_id: str,
        *,
        after: str | Omit = omit,
        limit: int | Omit = omit,

View on GitHub (pinned to 9917c6e28e)

Solutions

  1. Resolve the concrete version first (skill.default_version or versions.list)
  2. Treat empty version resolution as an error upstream
  3. Use versions.list(skill_id=...) when you actually want the collection

Example fix

# before
v = client.skills.versions.retrieve(sid, "")

# after
skill = client.skills.retrieve(sid)
v = client.skills.versions.retrieve(sid, skill.default_version)
Defensive patterns

Strategy: validation

Validate before calling

if not (isinstance(version, str) and version.strip()):
    skill = client.skills.retrieve(skill_id)
    version = skill.default_version
v = client.skills.versions.retrieve(skill_id, version)

Type guard

def is_valid_version(value: object) -> bool:
    return isinstance(value, str) and bool(value.strip())

Prevention

When it happens

Trigger: Calling retrieve(skill_id=<valid>, version="") — e.g. wanting the default version but passing an empty string rather than resolving it first.

Common situations: Passing version="" as a 'just give me the default' convention that this API does not support; version lookups that return "" on not-found and are passed through unchecked.

Related errors


AI-assisted analysis of openai/openai-python@9917c6e28e (2026-08-28). Data as JSON: /api/errors/75bfa2f5e44c361a. Report an issue: GitHub.