Skip to content

Release v1.0.81#44

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

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

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 cbdcb2f2c12b5fbf1983da92c1597d28f6178e55

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented May 26, 2026

Greptile Summary

This release (v1.0.81) adds three new API endpoints to the SDK — model discovery, agent engine type discovery, and CSV table upload — along with their generated models and endpoint wrappers, and corrects a version-string typo (1.0.8011.0.81).

  • New discovery endpoints: GET /v1/agents/models/ and GET /v1/agents/types/ with corresponding SupportedLLMModel, SupportedLLMModelList, AgentEngineTypeList, and AgentEngineTypeListEnginesItem models — all generated cleanly.
  • New table upload endpoint: POST /v1/tables/upload/ with TableUploadRequest/TableUploadResponse models; to_multipart() in TableUploadRequest has a bug where organization_id=None is serialised as the literal string \"None\" instead of being omitted, which will cause server-side UUID validation failures.
  • Generator artefacts: duplicate imports (from typing import cast, from ..types import UNSET, Unset, unused quote) appear across the new generated files — harmless at runtime but will trigger linter warnings.

Confidence Score: 4/5

Safe to merge for the discovery endpoints; the table upload path has a bug in multipart serialisation that will surface when callers explicitly pass organization_id=None.

The discovery endpoints and their models are straightforward and look correct. The table upload multipart serialiser sends the literal string "None" for organization_id=None rather than omitting the field, which breaks any caller that explicitly passes None for that optional field. The impact is bounded to that one code path, and the fix is a one-line guard, but it is a current defect on the changed code path.

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

Important Files Changed

Filename Overview
src/roe/_generated/models/table_upload_request.py New model for CSV upload; to_multipart() sends the literal string "None" when organization_id is None instead of omitting the field, which will cause server-side UUID-parse failures.
src/roe/_generated/api/tables/upload_table.py New sync/async API wrappers for POST /v1/tables/upload/; correctly handles 201/400 responses; has duplicate cast import (generator artefact).
src/roe/_generated/api/discovery/discovery_supported_models_list.py New sync/async wrappers for GET /v1/agents/models/; capability query param handling is correct; duplicate imports are generator artefacts.
src/roe/_generated/api/discovery/discovery_agent_engine_types_list.py New sync/async wrappers for GET /v1/agents/types/; straightforward no-param GET endpoint; duplicate/unused imports are generator artefacts.
openapi/openapi.yml Three new endpoints added (GET /v1/agents/models/, GET /v1/agents/types/, POST /v1/tables/upload/) with correct schema definitions and response codes.
pyproject.toml Version corrected from typo 1.0.801 to 1.0.81; matching change applied in uv.lock.

Sequence Diagram

sequenceDiagram
    participant Caller
    participant SDK Client
    participant Roe API

    Caller->>SDK Client: discovery.sync(client) [GET /v1/agents/types/]
    SDK Client->>Roe API: GET /v1/agents/types/
    Roe API-->>SDK Client: 200 AgentEngineTypeList JSON
    SDK Client-->>Caller: AgentEngineTypeList

    Caller->>SDK Client: discovery.sync(client, capability=...) [GET /v1/agents/models/]
    SDK Client->>Roe API: GET /v1/agents/models/?capability=...
    Roe API-->>SDK Client: 200 SupportedLLMModelList JSON
    SDK Client-->>Caller: SupportedLLMModelList

    Caller->>SDK Client: upload_table.sync(client, body=TableUploadRequest(...))
    SDK Client->>SDK Client: body.to_multipart()
    Note over SDK Client: ⚠️ organization_id=None → "None" string
    SDK Client->>Roe API: POST /v1/tables/upload/ (multipart/form-data)
    alt 201 Created
        Roe API-->>SDK Client: TableUploadResponse JSON
        SDK Client-->>Caller: TableUploadResponse
    else 400 Bad Request
        Roe API-->>SDK Client: ErrorResponse JSON
        SDK Client-->>Caller: ErrorResponse
    end
Loading

Comments Outside Diff (1)

  1. src/roe/_generated/models/table_upload_request.py, line 1465-1471 (link)

    P1 organization_id=None serialized as literal "None" string

    When organization_id is explicitly None (a valid union member: None | Unset | UUID), the to_multipart() branch falls to else and calls str(None).encode(), producing b"None". The server receives the literal string "None" as the form field value, which is not a valid UUID and will cause the request to fail with a 400 or unexpected server-side behaviour. The field should be omitted when None, matching the intent of the OpenAPI nullable+optional semantics — similar to how Unset is already skipped by the outer if not isinstance(self.organization_id, Unset) guard.

    Fix in Claude Code

Fix All in Claude Code

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

Comment on lines +1 to +9
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
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 and unused imports in generated API files

from typing import cast is imported twice (once via from typing import Any, cast and again as a standalone statement). Additionally, from urllib.parse import quote is imported but never referenced. The same pattern appears in discovery_supported_models_list.py (duplicate from ...types import UNSET, Unset and cast), upload_table.py (duplicate cast), table_upload_request.py (duplicate from ..types import UNSET, Unset), and table_upload_response.py (duplicate from ..types import UNSET, Unset). These are artefacts of the code generator and do not affect runtime, but they will produce linter warnings.

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