Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
437 changes: 221 additions & 216 deletions .speakeasy/gen.lock

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion .speakeasy/gen.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ generation:
requestResponseComponentNamesFeb2024: true
securityFeb2025: false
sharedErrorComponentsApr2025: false
sharedNestedComponentsJan2026: false
auth:
oAuth2ClientCredentialsEnabled: false
oAuth2PasswordEnabled: false
Expand All @@ -29,7 +30,7 @@ generation:
generateNewTests: false
skipResponseBodyAssertions: false
python:
version: 1.15.1
version: 1.15.2
additionalDependencies:
dev: {}
main: {}
Expand Down Expand Up @@ -76,3 +77,4 @@ python:
responseFormat: flat
sseFlatResponse: false
templateVersion: v2
useAsyncHooks: false
14 changes: 7 additions & 7 deletions .speakeasy/workflow.lock
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
speakeasyVersion: 1.682.0
speakeasyVersion: 1.691.0
sources:
Ragie-OAS:
sourceNamespace: ragie-oas
sourceRevisionDigest: sha256:bbff923159484b6f5a7027ee8c16c13a60ce2d9e9f523603fcba9243d1b38da7
sourceBlobDigest: sha256:e781f18c8b4e50249a130e038774b0f9e647fa416eb773f6d638506da7b70f14
sourceRevisionDigest: sha256:f42fb754a21b1dedb69db5f27056f318642ecedb7f28d82e80925ebcae3168f2
sourceBlobDigest: sha256:9dff3a519b26b3891c484abf6ec355ac0d958d1a56b4ad083e39c63b310bc74c
tags:
- latest
- speakeasy-sdk-regen-1765152535
- speakeasy-sdk-regen-1767917334
- 1.0.0
targets:
ragie:
source: Ragie-OAS
sourceNamespace: ragie-oas
sourceRevisionDigest: sha256:bbff923159484b6f5a7027ee8c16c13a60ce2d9e9f523603fcba9243d1b38da7
sourceBlobDigest: sha256:e781f18c8b4e50249a130e038774b0f9e647fa416eb773f6d638506da7b70f14
sourceRevisionDigest: sha256:f42fb754a21b1dedb69db5f27056f318642ecedb7f28d82e80925ebcae3168f2
sourceBlobDigest: sha256:9dff3a519b26b3891c484abf6ec355ac0d958d1a56b4ad083e39c63b310bc74c
codeSamplesNamespace: ragie-oas-python-code-samples
codeSamplesRevisionDigest: sha256:cb4c40794dfa72db1e2fca9d89f1a2f529ec8379fd12a0d7525ebabf3bee82f7
codeSamplesRevisionDigest: sha256:d8ba9823680d45c692023095f4ad40d6d86aea6e968b52b567b806a13ffd02fe
workflow:
workflowVersion: 1.0.0
speakeasyVersion: latest
Expand Down
12 changes: 11 additions & 1 deletion RELEASES.md
Original file line number Diff line number Diff line change
Expand Up @@ -278,4 +278,14 @@ Based on:
### Generated
- [python v1.15.1] .
### Releases
- [PyPI v1.15.1] https://pypi.org/project/ragie/1.15.1 - .
- [PyPI v1.15.1] https://pypi.org/project/ragie/1.15.1 - .

## 2026-01-21 00:09:21
### Changes
Based on:
- OpenAPI Doc
- Speakeasy CLI 1.691.0 (2.797.1) https://github.com/speakeasy-api/speakeasy
### Generated
- [python v1.15.2] .
### Releases
- [PyPI v1.15.2] https://pypi.org/project/ragie/1.15.2 - .
3 changes: 2 additions & 1 deletion docs/models/webhookendpoint.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@
| `name` | *str* | :heavy_check_mark: | N/A |
| `url` | *str* | :heavy_check_mark: | N/A |
| `partition_pattern` | *Nullable[str]* | :heavy_check_mark: | N/A |
| `active` | *bool* | :heavy_check_mark: | N/A |
| `active` | *bool* | :heavy_check_mark: | N/A |
| `secret` | *str* | :heavy_check_mark: | N/A |
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

[project]
name = "ragie"
version = "1.15.1"
version = "1.15.2"
description = "Python Client SDK Generated by Speakeasy."
authors = [{ name = "Speakeasy" },]
readme = "README-PYPI.md"
Expand Down
6 changes: 3 additions & 3 deletions src/ragie/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import importlib.metadata

__title__: str = "ragie"
__version__: str = "1.15.1"
__version__: str = "1.15.2"
__openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.791.1"
__user_agent__: str = "speakeasy-sdk/python 1.15.1 2.791.1 1.0.0 ragie"
__gen_version__: str = "2.797.1"
__user_agent__: str = "speakeasy-sdk/python 1.15.2 2.797.1 1.0.0 ragie"

try:
if __package__ is not None:
Expand Down
26 changes: 20 additions & 6 deletions src/ragie/basesdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@
import httpx
from ragie import models, utils
from ragie._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext
from ragie.utils import RetryConfig, SerializedRequestBody, get_body_content
from ragie.utils import (
RetryConfig,
SerializedRequestBody,
get_body_content,
run_sync_in_thread,
)
from typing import Callable, List, Mapping, Optional, Tuple
from urllib.parse import parse_qs, urlparse

Expand Down Expand Up @@ -307,7 +312,10 @@ async def do_request_async(
async def do():
http_res = None
try:
req = hooks.before_request(BeforeRequestContext(hook_ctx), request)
req = await run_sync_in_thread(
hooks.before_request, BeforeRequestContext(hook_ctx), request
)

logger.debug(
"Request:\nMethod: %s\nURL: %s\nHeaders: %s\nBody: %s",
req.method,
Expand All @@ -321,7 +329,10 @@ async def do():

http_res = await client.send(req, stream=stream)
except Exception as e:
_, e = hooks.after_error(AfterErrorContext(hook_ctx), None, e)
_, e = await run_sync_in_thread(
hooks.after_error, AfterErrorContext(hook_ctx), None, e
)

if e is not None:
logger.debug("Request Exception", exc_info=True)
raise e
Expand All @@ -339,9 +350,10 @@ async def do():
)

if utils.match_status_codes(error_status_codes, http_res.status_code):
result, err = hooks.after_error(
AfterErrorContext(hook_ctx), http_res, None
result, err = await run_sync_in_thread(
hooks.after_error, AfterErrorContext(hook_ctx), http_res, None
)

if err is not None:
logger.debug("Request Exception", exc_info=True)
raise err
Expand All @@ -361,6 +373,8 @@ async def do():
http_res = await do()

if not utils.match_status_codes(error_status_codes, http_res.status_code):
http_res = hooks.after_success(AfterSuccessContext(hook_ctx), http_res)
http_res = await run_sync_in_thread(
hooks.after_success, AfterSuccessContext(hook_ctx), http_res
)

return http_res
19 changes: 18 additions & 1 deletion src/ragie/models/agent_hopps_models_models_usage.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

from __future__ import annotations
from .modelusage import ModelUsage, ModelUsageTypedDict
from ragie.types import BaseModel
from pydantic import model_serializer
from ragie.types import BaseModel, UNSET_SENTINEL
from typing import List, Optional
from typing_extensions import NotRequired, TypedDict

Expand All @@ -13,3 +14,19 @@ class AgentHoppsModelsModelsUsageTypedDict(TypedDict):

class AgentHoppsModelsModelsUsage(BaseModel):
models: Optional[List[ModelUsage]] = None

@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = set(["models"])
serialized = handler(self)
m = {}

for n, f in type(self).model_fields.items():
k = f.alias or n
val = serialized.get(k)

if val != UNSET_SENTINEL:
if val is not None or k not in optional_fields:
m[k] = val

return m
19 changes: 18 additions & 1 deletion src/ragie/models/answer.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""

from __future__ import annotations
from ragie.types import BaseModel
from pydantic import model_serializer
from ragie.types import BaseModel, UNSET_SENTINEL
from typing import List, Optional
from typing_extensions import NotRequired, TypedDict

Expand All @@ -19,3 +20,19 @@ class Answer(BaseModel):

evidence: Optional[List[str]] = None
r"""The evidence used to derive the answer."""

@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = set(["evidence"])
serialized = handler(self)
m = {}

for n, f in type(self).model_fields.items():
k = f.alias or n
val = serialized.get(k)

if val != UNSET_SENTINEL:
if val is not None or k not in optional_fields:
m[k] = val

return m
19 changes: 18 additions & 1 deletion src/ragie/models/answerstep.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
from __future__ import annotations
from .answer import Answer, AnswerTypedDict
import pydantic
from pydantic import model_serializer
from pydantic.functional_validators import AfterValidator
from ragie.types import BaseModel
from ragie.types import BaseModel, UNSET_SENTINEL
from ragie.utils import validate_const
from typing import List, Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
Expand Down Expand Up @@ -38,3 +39,19 @@ class AnswerStep(BaseModel):

other_resolved_question_ids: Optional[List[str]] = None
r"""A list of question ids that are no longer relevant to the current answer referenced by their IDs."""

@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = set(["type", "errored", "other_resolved_question_ids"])
serialized = handler(self)
m = {}

for n, f in type(self).model_fields.items():
k = f.alias or n
val = serialized.get(k)

if val != UNSET_SENTINEL:
if val is not None or k not in optional_fields:
m[k] = val

return m
19 changes: 18 additions & 1 deletion src/ragie/models/audiomodalitydata.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
from __future__ import annotations
from .wordtimestamp import WordTimestamp, WordTimestampTypedDict
import pydantic
from pydantic import model_serializer
from pydantic.functional_validators import AfterValidator
from ragie.types import BaseModel
from ragie.types import BaseModel, UNSET_SENTINEL
from ragie.utils import validate_const
from typing import List, Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
Expand All @@ -22,3 +23,19 @@ class AudioModalityData(BaseModel):
] = "audio"

word_timestamps: Optional[List[WordTimestamp]] = None

@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = set(["type", "word_timestamps"])
serialized = handler(self)
m = {}

for n, f in type(self).model_fields.items():
k = f.alias or n
val = serialized.get(k)

if val != UNSET_SENTINEL:
if val is not None or k not in optional_fields:
m[k] = val

return m
33 changes: 14 additions & 19 deletions src/ragie/models/bucketdata.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,30 +22,25 @@ class BucketData(BaseModel):

@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = ["prefix", "import_file_metadata"]
nullable_fields = ["prefix"]
null_default_fields = []

optional_fields = set(["prefix", "import_file_metadata"])
nullable_fields = set(["prefix"])
serialized = handler(self)

m = {}

for n, f in type(self).model_fields.items():
k = f.alias or n
val = serialized.get(k)
serialized.pop(k, None)

optional_nullable = k in optional_fields and k in nullable_fields
is_set = (
self.__pydantic_fields_set__.intersection({n})
or k in null_default_fields
) # pylint: disable=no-member

if val is not None and val != UNSET_SENTINEL:
m[k] = val
elif val != UNSET_SENTINEL and (
not k in optional_fields or (optional_nullable and is_set)
):
m[k] = val
is_nullable_and_explicitly_set = (
k in nullable_fields
and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
)

if val != UNSET_SENTINEL:
if (
val is not None
or k not in optional_fields
or is_nullable_and_explicitly_set
):
m[k] = val

return m
19 changes: 18 additions & 1 deletion src/ragie/models/codeinterpreterevidence.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

from __future__ import annotations
import pydantic
from pydantic import model_serializer
from pydantic.functional_validators import AfterValidator
from ragie.types import BaseModel
from ragie.types import BaseModel, UNSET_SENTINEL
from ragie.utils import validate_const
from typing import Literal, Optional
from typing_extensions import Annotated, TypedDict
Expand Down Expand Up @@ -39,3 +40,19 @@ class CodeInterpreterEvidence(BaseModel):
],
pydantic.Field(alias="type"),
] = "code_interpreter"

@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = set(["type"])
serialized = handler(self)
m = {}

for n, f in type(self).model_fields.items():
k = f.alias or n
val = serialized.get(k)

if val != UNSET_SENTINEL:
if val is not None or k not in optional_fields:
m[k] = val

return m
19 changes: 18 additions & 1 deletion src/ragie/models/codeinterpreteroutput.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
)
from enum import Enum
import pydantic
from pydantic import model_serializer
from pydantic.functional_validators import AfterValidator
from ragie.types import BaseModel
from ragie.types import BaseModel, UNSET_SENTINEL
from ragie.utils import validate_const
from typing import List, Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
Expand Down Expand Up @@ -59,3 +60,19 @@ class CodeInterpreterOutput(BaseModel):
status: Optional[CodeInterpreterOutputStatus] = (
CodeInterpreterOutputStatus.COMPLETED
)

@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = set(["type", "status"])
serialized = handler(self)
m = {}

for n, f in type(self).model_fields.items():
k = f.alias or n
val = serialized.get(k)

if val != UNSET_SENTINEL:
if val is not None or k not in optional_fields:
m[k] = val

return m
Loading