Перейти к содержимому
На главную

Руководство по работе с SDK

  • SDK являются pure-code пакетами. Они не предоставляют UI, CLI prompts, config-file discovery, credential storage, local file upload или shell-style flag parsing.
  • Инициализация клиента требует явный непустой API key. Приложение может сначала прочитать environment variable, но SDK сами не читают API keys из environment variables.
  • Выпущенные SDK поставляются с production service endpoints. Maintainer-only endpoint overrides записываются в package defaults во время build и не читаются из окружения вызывающего приложения в runtime.
  • timeout можно настроить на уровне клиента и переопределить для отдельного запроса.
  • getSeaCloudDocs() работает offline и не требует ни клиента, ни API key.
  • Generation calls по умолчанию читают model contracts, чтобы спланировать queue requests. SDK локально проверяет только top-level required fields из input_schema.required; model-specific type, format, range, default и mutual-exclusion rules обрабатываются API.
ВозможностьEndpoint
ChatPOST https://cloud.seaart.ai/llm/chat/completions
Model listGET https://sea-cloud-admin-web.real-cloud.seaart.ai/api/v1/skill/models
Queue submitPOST https://cloud.seaart.ai/model/v1/queue/{modelId}
Queue statusGET https://cloud.seaart.ai/model/v1/queue/{modelId}/requests/{request_id}/status
Queue responseGET https://cloud.seaart.ai/model/v1/queue/{modelId}/requests/{request_id}/response
Model contractGET https://sea-cloud-admin-web.real-cloud.seaart.ai/api/v1/skill/model-contracts/{modelId}
SkillHub searchGET https://skill-hub.vtrix.ai/api/v1/search
SkillHub listGET https://skill-hub.vtrix.ai/api/v1/skills
ModeПоведение
autoЗначение по умолчанию. SDK читает model contract, если возможно, планирует queue endpoint и headers, затем откатывается к raw queue JSON, если contract временно недоступен или отсутствует.
strictModel contract должен быть доступен и пригоден для планирования. Ошибки чтения contract возвращаются вызывающему коду без fallback.
offSDK пропускает чтение contract и отправляет caller-provided params как raw queue JSON.

Успешно прочитанные contracts могут кратко кэшироваться внутри процесса SDK. Используйте models.getSpec() или models.get_spec(), когда нужно напрямую посмотреть contract.

flowchart TD
  User["Вызов run / runSync"] --> ValidateInput["Проверить modelId и params object"]
  ValidateInput --> ContractMode{"Использовать contract mode?"}
  ContractMode -- "auto / strict" --> ReadContract["Прочитать model contract"]
  ContractMode -- "off" --> PlanRaw["Использовать raw queue request"]
  ReadContract --> PlanContract["Спланировать protocol, bodyMode, queue endpoint и headers"]
  ReadContract -- "auto недоступен" --> PlanRaw
  PlanContract --> RequiredFields["Проверить top-level fields из input_schema.required"]
  PlanRaw --> DryRun{"dryRun?"}
  RequiredFields --> DryRun
  DryRun -- "да" --> Preview["Вернуть request preview"]
  DryRun -- "нет" --> Submit["POST queue request"]
  Submit --> Task["Вернуть task handle"]
  Task --> Sync{"Ждать синхронно?"}
  Sync -- "нет" --> Manual["Caller polls через tasks.get / getResponse"]
  Sync -- "да" --> Poll["Опросить statusUrl"]
  Poll --> Response["GET responseUrl"]
  Response --> Result["Вернуть normalized result"]

Используйте run, когда приложение сохраняет task ID или передает polling отдельному worker.

const params = {
prompt: "Generate cute cats programming",
n: 1,
size: "1024x1024",
output_format: "png",
quality: "auto",
moderation: "auto",
};
const task = await client.run("gpt_image_2", params, {
timeout: 60_000,
contract: "auto",
});
console.log(task.id, task.statusUrl, task.responseUrl);

run возвращает task handle. В нем нет final output, потому что queue response доступен только после завершения task.

Используйте runSync, когда вызывающий код ожидает final result в одном SDK call. При успехе output.raw сохраняет исходный response, а output.urls рекурсивно собирает URL fields. При task failure SDK возвращает status: "failed" с error и не придумывает output.

const result = await client.runSync("gpt_image_2", {
prompt: "Generate cute cats programming",
n: 1,
size: "1024x1024",
output_format: "png",
quality: "auto",
moderation: "auto",
}, {
timeout: 600_000,
});
if (result.status === "failed") {
console.error(result.error?.message);
} else {
console.log(result.output?.urls);
}

runSync / run_sync опрашивает task status с bounded backoff и читает responseUrl после completion. Общая длительность ожидания все равно ограничена настроенным timeout.

dryRun использует тот же planning path, что и реальный generation call, и возвращает endpoint, method, redacted headers, request body и validation metadata. Он не создает task, не опрашивает status и не читает final response.

Когда включен contract mode, dryRun может прочитать model contract и локально проверяет только top-level fields из input_schema.required.

const preview = await client.run("gpt_image_2", {
prompt: "Generate cute cats programming",
n: 1,
size: "1024x1024",
output_format: "png",
quality: "auto",
moderation: "auto",
}, {
dryRun: true,
});
console.log(preview.endpoint);
console.log(preview.request);

tasks.get читает task status. tasks.getResponse читает final response. Предпочитайте полные statusUrl и responseUrl, которые возвращает API; используйте endpoint-based URL construction только когда эти URL недоступны.

const status = await client.tasks.get(task.id, {
statusUrl: task.statusUrl,
endpoint: "gpt_image_2",
});
const finalResult = await client.tasks.getResponse(task.id, {
responseUrl: status.responseUrl ?? task.responseUrl,
endpoint: "gpt_image_2",
});
  • models.list: список доступных моделей по page, type, keywords и provider.
  • models.getSpec и models.get_spec: читают model contract, используемый для generation planning, включая protocol, body mode, submit endpoint, inputSchema, prerequisites, context inputs, field aliases и input rules, если они есть.
  • skills.find: поиск в SkillHub по keyword.
  • skills.list: список SkillHub skills с pagination.

Частые SDK errors:

ErrorСценарий
AuthErrorAPI key отсутствует, invalid или unauthorized.
BalanceErrorНедостаточный баланс.
ValidationErrorОтсутствует modelId / params, неподдерживаемый protocol или body mode, либо отсутствуют top-level required fields из model contract.
ModelNotFoundErrorМодель отсутствует или обязательный model contract не может быть прочитан.
NetworkErrorHTTP non-2xx или network failure.
TimeoutErrorТаймаут одного HTTP request.
TaskTimeoutErrorТаймаут synchronous task wait.

TypeScript и Python callers могут использовать isSeaCloudError(error), чтобы определить SDK errors и прочитать стабильные поля type, message и hint.

ТемаTypeScriptPython
Async modelPromise / async iteratorcoroutine / async iterator
NamingcamelCasesnake_case first, with camelCase aliases
Optional paramsoption objectdict или keyword args
Errorsthrows SDK errorsraises SDK errors
dry run resultoverload returns DryRunResultdict with dryRun: True