Skip to content

Release v1.0.81#42

Closed
roeai-release-bot[bot] wants to merge 1 commit into
mainfrom
release-sdk-python-1-0-81-d90d35f88e75d7d3684d5b803fa0737c76b55c20
Closed

Release v1.0.81#42
roeai-release-bot[bot] wants to merge 1 commit into
mainfrom
release-sdk-python-1-0-81-d90d35f88e75d7d3684d5b803fa0737c76b55c20

Conversation

@roeai-release-bot
Copy link
Copy Markdown

This PR updates the Python SDK for release 1.0.81.

Generated from:

  • roe-main release branch 1-0-81
  • roe-main commit d90d35f88e75d7d3684d5b803fa0737c76b55c20

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented May 23, 2026

Greptile Summary

This release (v1.0.81) adds three new API endpoints — GET /v1/agents/models/, GET /v1/agents/types/, and POST /v1/tables/upload/ — along with the generated Python client code and OpenAPI schema definitions for each. It also corrects a version-number typo (1.0.8011.0.81) introduced in the previous release.

  • Discovery endpoints: Two new read-only endpoints expose supported LLM models and agent engine types; corresponding models are cleanly generated and correctly typed.
  • Table upload endpoint: A new POST /v1/tables/upload/ endpoint accepts a multipart CSV upload; the TableUploadRequest.to_multipart() method has a logic bug where an explicit None organization_id is serialized as the literal string \"None\" instead of being omitted.
  • Generated code quality: Several files contain duplicate imports (cast, UNSET) and an unused quote import — typical generator artifacts that do not affect runtime behavior.

Confidence Score: 4/5

Safe to merge with one fix recommended before release: the to_multipart bug in TableUploadRequest will send the literal string "None" to the server when a caller passes organization_id=None, which the server will likely reject.

The discovery endpoints and their models are clean and correct. The TableUploadRequest.to_multipart() method mishandles the None case for organization_id, producing an invalid multipart value that would cause a server-side validation failure for any caller that explicitly passes None. The duplicate/unused imports are generator artifacts and do not affect behavior.

src/roe/_generated/models/table_upload_request.py — specifically the to_multipart method's handling of a None organization_id

Important Files Changed

Filename Overview
src/roe/_generated/models/table_upload_request.py New model for CSV upload requests; to_multipart sends b"None" when organization_id is explicitly None, and has inconsistent encoding for the UUID branch
src/roe/_generated/api/tables/upload_table.py New endpoint client for POST /v1/tables/upload/; has unused quote import and duplicate cast import, otherwise structurally correct
src/roe/_generated/api/discovery/discovery_supported_models_list.py New endpoint client for GET /v1/agents/models/; has duplicate cast import and unused quote import, logic is correct
src/roe/_generated/api/discovery/discovery_agent_engine_types_list.py New endpoint client for GET /v1/agents/types/; has duplicate cast import and unused quote import, logic is correct
src/roe/_generated/models/table_upload_response.py New response model for CSV upload; has duplicate from ..types import UNSET, Unset import, otherwise correct
openapi/openapi.yml Adds three new endpoint definitions and five new schema components; schemas are well-formed and consistent
pyproject.toml Version corrected from the erroneous 1.0.801 to 1.0.81

Sequence Diagram

sequenceDiagram
    participant C as Client
    participant S as Roe API

    Note over C,S: Discovery endpoints (new in v1.0.81)

    C->>S: "GET /v1/agents/models/?capability=image"
    S-->>C: 200 SupportedLLMModelList

    C->>S: GET /v1/agents/types/
    S-->>C: 200 AgentEngineTypeList

    Note over C,S: Table upload (new in v1.0.81)

    C->>S: POST /v1/tables/upload/ (multipart/form-data)
    Note right of C: table_name, file, with_headers,<br/>organization_id (optional)
    S-->>C: 201 TableUploadResponse
    S-->>C: 400 ErrorResponse (bad request)
Loading

Fix All in Claude Code

Reviews (1): Last reviewed commit: "Release v1.0.81" | Re-trigger Greptile

Comment on lines +97 to +102
if not isinstance(self.organization_id, Unset):
if isinstance(self.organization_id, UUID):

files.append(("organization_id", (None, str(self.organization_id), "text/plain")))
else:
files.append(("organization_id", (None, str(self.organization_id).encode(), "text/plain")))
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 None organization_id serialized as "None" string — when a caller explicitly passes organization_id=None (not UNSET), the else branch encodes it as the literal bytes b"None", which the server will likely reject as an invalid UUID. The guard should skip the field when the value is None, consistent with how nullable optional fields are handled elsewhere in the generated code.

Suggested change
if not isinstance(self.organization_id, Unset):
if isinstance(self.organization_id, UUID):
files.append(("organization_id", (None, str(self.organization_id), "text/plain")))
else:
files.append(("organization_id", (None, str(self.organization_id).encode(), "text/plain")))
if not isinstance(self.organization_id, Unset) and self.organization_id is not None:
if isinstance(self.organization_id, UUID):
files.append(("organization_id", (None, str(self.organization_id).encode(), "text/plain")))
else:
files.append(("organization_id", (None, str(self.organization_id).encode(), "text/plain")))

Fix in Claude Code

Comment on lines +1 to +12
from http import HTTPStatus
from typing import Any, cast
from urllib.parse import quote

import httpx

from ...client import AuthenticatedClient, Client
from ...types import Response, UNSET
from ... import errors

from ...models.agent_engine_type_list import AgentEngineTypeList
from typing import cast
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Duplicate from typing import cast import and unused from urllib.parse import quote import. These are harmless but noisy; the duplicate was likely introduced by the code generator merging two import blocks.

Suggested change
from http import HTTPStatus
from typing import Any, cast
from urllib.parse import quote
import httpx
from ...client import AuthenticatedClient, Client
from ...types import Response, UNSET
from ... import errors
from ...models.agent_engine_type_list import AgentEngineTypeList
from typing import cast
from http import HTTPStatus
from typing import Any, cast
import httpx
from ...client import AuthenticatedClient, Client
from ...types import Response, UNSET
from ... import errors
from ...models.agent_engine_type_list import AgentEngineTypeList

Fix in Claude Code

Comment on lines +1 to +13
from http import HTTPStatus
from typing import Any, cast
from urllib.parse import quote

import httpx

from ...client import AuthenticatedClient, Client
from ...types import Response, UNSET
from ... import errors

from ...models.supported_llm_model_list import SupportedLLMModelList
from ...types import UNSET, Unset
from typing import cast
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Duplicate from typing import cast import, duplicate UNSET import via from ...types import Response, UNSET and from ...types import UNSET, Unset, and unused from urllib.parse import quote. Same code-generator artifact as in the other discovery file.

Suggested change
from http import HTTPStatus
from typing import Any, cast
from urllib.parse import quote
import httpx
from ...client import AuthenticatedClient, Client
from ...types import Response, UNSET
from ... import errors
from ...models.supported_llm_model_list import SupportedLLMModelList
from ...types import UNSET, Unset
from typing import cast
from http import HTTPStatus
from typing import Any, cast
import httpx
from ...client import AuthenticatedClient, Client
from ...types import Response, UNSET, Unset
from ... import errors
from ...models.supported_llm_model_list import SupportedLLMModelList

Fix in Claude Code

Comment on lines +1 to +14
from http import HTTPStatus
from typing import Any, cast
from urllib.parse import quote

import httpx

from ...client import AuthenticatedClient, Client
from ...types import Response, UNSET
from ... import errors

from ...models.error_response import ErrorResponse
from ...models.table_upload_request import TableUploadRequest
from ...models.table_upload_response import TableUploadResponse
from typing import cast
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Unused from urllib.parse import quote import and duplicate from typing import cast import at the end of the import block, same generator artifact as the discovery files.

Suggested change
from http import HTTPStatus
from typing import Any, cast
from urllib.parse import quote
import httpx
from ...client import AuthenticatedClient, Client
from ...types import Response, UNSET
from ... import errors
from ...models.error_response import ErrorResponse
from ...models.table_upload_request import TableUploadRequest
from ...models.table_upload_response import TableUploadResponse
from typing import cast
from http import HTTPStatus
from typing import Any, cast
import httpx
from ...client import AuthenticatedClient, Client
from ...types import Response, UNSET
from ... import errors
from ...models.error_response import ErrorResponse
from ...models.table_upload_request import TableUploadRequest
from ...models.table_upload_response import TableUploadResponse

Fix in Claude Code

@jadenfix
Copy link
Copy Markdown
Member

Closing per request.

@jadenfix jadenfix closed this May 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants