rird 1.0.200
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +27 -0
- package/Dockerfile +18 -0
- package/README.md +15 -0
- package/bin/opencode +336 -0
- package/bin/pty-wrapper.js +285 -0
- package/bunfig.toml +4 -0
- package/facebook_ads_library.png +0 -0
- package/nul`nif +0 -0
- package/package.json +111 -0
- package/parsers-config.ts +239 -0
- package/rird-1.0.199.tgz +0 -0
- package/script/build-windows.ts +54 -0
- package/script/build.ts +167 -0
- package/script/postinstall.mjs +544 -0
- package/script/publish-registries.ts +187 -0
- package/script/publish.ts +72 -0
- package/script/schema.ts +47 -0
- package/src/acp/README.md +164 -0
- package/src/acp/agent.ts +1063 -0
- package/src/acp/session.ts +101 -0
- package/src/acp/types.ts +22 -0
- package/src/agent/agent.ts +367 -0
- package/src/agent/generate.txt +75 -0
- package/src/agent/prompt/compaction.txt +12 -0
- package/src/agent/prompt/explore.txt +18 -0
- package/src/agent/prompt/summary.txt +10 -0
- package/src/agent/prompt/title.txt +36 -0
- package/src/auth/index.ts +70 -0
- package/src/bun/index.ts +114 -0
- package/src/bus/bus-event.ts +43 -0
- package/src/bus/global.ts +10 -0
- package/src/bus/index.ts +105 -0
- package/src/cli/bootstrap.ts +17 -0
- package/src/cli/cmd/acp.ts +88 -0
- package/src/cli/cmd/agent.ts +256 -0
- package/src/cli/cmd/auth.ts +391 -0
- package/src/cli/cmd/cmd.ts +7 -0
- package/src/cli/cmd/debug/config.ts +15 -0
- package/src/cli/cmd/debug/file.ts +91 -0
- package/src/cli/cmd/debug/index.ts +43 -0
- package/src/cli/cmd/debug/lsp.ts +48 -0
- package/src/cli/cmd/debug/ripgrep.ts +83 -0
- package/src/cli/cmd/debug/scrap.ts +15 -0
- package/src/cli/cmd/debug/skill.ts +15 -0
- package/src/cli/cmd/debug/snapshot.ts +48 -0
- package/src/cli/cmd/export.ts +88 -0
- package/src/cli/cmd/generate.ts +38 -0
- package/src/cli/cmd/github.ts +1400 -0
- package/src/cli/cmd/import.ts +98 -0
- package/src/cli/cmd/mcp.ts +654 -0
- package/src/cli/cmd/models.ts +77 -0
- package/src/cli/cmd/pr.ts +112 -0
- package/src/cli/cmd/run.ts +368 -0
- package/src/cli/cmd/serve.ts +31 -0
- package/src/cli/cmd/session.ts +106 -0
- package/src/cli/cmd/stats.ts +298 -0
- package/src/cli/cmd/tui/app.tsx +696 -0
- package/src/cli/cmd/tui/attach.ts +30 -0
- package/src/cli/cmd/tui/component/border.tsx +21 -0
- package/src/cli/cmd/tui/component/dialog-agent.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-command.tsx +124 -0
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
- package/src/cli/cmd/tui/component/dialog-model.tsx +245 -0
- package/src/cli/cmd/tui/component/dialog-provider.tsx +224 -0
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +102 -0
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-stash.tsx +86 -0
- package/src/cli/cmd/tui/component/dialog-status.tsx +162 -0
- package/src/cli/cmd/tui/component/dialog-tag.tsx +44 -0
- package/src/cli/cmd/tui/component/dialog-theme-list.tsx +50 -0
- package/src/cli/cmd/tui/component/did-you-know.tsx +85 -0
- package/src/cli/cmd/tui/component/logo.tsx +35 -0
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +574 -0
- package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
- package/src/cli/cmd/tui/component/prompt/index.tsx +1090 -0
- package/src/cli/cmd/tui/component/prompt/stash.tsx +101 -0
- package/src/cli/cmd/tui/component/tips.ts +27 -0
- package/src/cli/cmd/tui/component/todo-item.tsx +32 -0
- package/src/cli/cmd/tui/context/args.tsx +14 -0
- package/src/cli/cmd/tui/context/directory.ts +13 -0
- package/src/cli/cmd/tui/context/exit.tsx +23 -0
- package/src/cli/cmd/tui/context/helper.tsx +25 -0
- package/src/cli/cmd/tui/context/keybind.tsx +101 -0
- package/src/cli/cmd/tui/context/kv.tsx +49 -0
- package/src/cli/cmd/tui/context/local.tsx +354 -0
- package/src/cli/cmd/tui/context/prompt.tsx +18 -0
- package/src/cli/cmd/tui/context/route.tsx +46 -0
- package/src/cli/cmd/tui/context/sdk.tsx +74 -0
- package/src/cli/cmd/tui/context/sync.tsx +372 -0
- package/src/cli/cmd/tui/context/theme/aura.json +69 -0
- package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +233 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +233 -0
- package/src/cli/cmd/tui/context/theme/catppuccin.json +112 -0
- package/src/cli/cmd/tui/context/theme/cobalt2.json +228 -0
- package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
- package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
- package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
- package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
- package/src/cli/cmd/tui/context/theme/github.json +233 -0
- package/src/cli/cmd/tui/context/theme/gruvbox.json +95 -0
- package/src/cli/cmd/tui/context/theme/kanagawa.json +77 -0
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +227 -0
- package/src/cli/cmd/tui/context/theme/material.json +235 -0
- package/src/cli/cmd/tui/context/theme/matrix.json +77 -0
- package/src/cli/cmd/tui/context/theme/mercury.json +252 -0
- package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
- package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
- package/src/cli/cmd/tui/context/theme/nord.json +223 -0
- package/src/cli/cmd/tui/context/theme/one-dark.json +84 -0
- package/src/cli/cmd/tui/context/theme/orng.json +245 -0
- package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
- package/src/cli/cmd/tui/context/theme/rird.json +245 -0
- package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
- package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
- package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
- package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
- package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
- package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
- package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
- package/src/cli/cmd/tui/context/theme.tsx +1109 -0
- package/src/cli/cmd/tui/event.ts +40 -0
- package/src/cli/cmd/tui/routes/home.tsx +138 -0
- package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +64 -0
- package/src/cli/cmd/tui/routes/session/dialog-message.tsx +109 -0
- package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +26 -0
- package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
- package/src/cli/cmd/tui/routes/session/footer.tsx +88 -0
- package/src/cli/cmd/tui/routes/session/header.tsx +125 -0
- package/src/cli/cmd/tui/routes/session/index.tsx +1864 -0
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +318 -0
- package/src/cli/cmd/tui/spawn.ts +60 -0
- package/src/cli/cmd/tui/thread.ts +142 -0
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +57 -0
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +83 -0
- package/src/cli/cmd/tui/ui/dialog-help.tsx +38 -0
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +77 -0
- package/src/cli/cmd/tui/ui/dialog-select.tsx +332 -0
- package/src/cli/cmd/tui/ui/dialog.tsx +170 -0
- package/src/cli/cmd/tui/ui/spinner.ts +368 -0
- package/src/cli/cmd/tui/ui/toast.tsx +100 -0
- package/src/cli/cmd/tui/util/clipboard.ts +127 -0
- package/src/cli/cmd/tui/util/editor.ts +32 -0
- package/src/cli/cmd/tui/util/terminal.ts +114 -0
- package/src/cli/cmd/tui/worker.ts +63 -0
- package/src/cli/cmd/uninstall.ts +344 -0
- package/src/cli/cmd/upgrade.ts +100 -0
- package/src/cli/cmd/web.ts +84 -0
- package/src/cli/error.ts +56 -0
- package/src/cli/ui.ts +84 -0
- package/src/cli/upgrade.ts +25 -0
- package/src/command/index.ts +80 -0
- package/src/command/template/initialize.txt +10 -0
- package/src/command/template/review.txt +97 -0
- package/src/config/config.ts +995 -0
- package/src/config/markdown.ts +41 -0
- package/src/env/index.ts +26 -0
- package/src/file/ignore.ts +83 -0
- package/src/file/index.ts +328 -0
- package/src/file/ripgrep.ts +393 -0
- package/src/file/time.ts +64 -0
- package/src/file/watcher.ts +103 -0
- package/src/flag/flag.ts +46 -0
- package/src/format/formatter.ts +315 -0
- package/src/format/index.ts +137 -0
- package/src/global/index.ts +52 -0
- package/src/id/id.ts +73 -0
- package/src/ide/index.ts +76 -0
- package/src/index.ts +240 -0
- package/src/installation/index.ts +239 -0
- package/src/lsp/client.ts +229 -0
- package/src/lsp/index.ts +485 -0
- package/src/lsp/language.ts +116 -0
- package/src/lsp/server.ts +1895 -0
- package/src/mcp/auth.ts +135 -0
- package/src/mcp/index.ts +690 -0
- package/src/mcp/oauth-callback.ts +200 -0
- package/src/mcp/oauth-provider.ts +154 -0
- package/src/patch/index.ts +622 -0
- package/src/permission/index.ts +199 -0
- package/src/plugin/index.ts +91 -0
- package/src/project/bootstrap.ts +31 -0
- package/src/project/instance.ts +78 -0
- package/src/project/project.ts +221 -0
- package/src/project/state.ts +65 -0
- package/src/project/vcs.ts +76 -0
- package/src/provider/auth.ts +143 -0
- package/src/provider/models-macro.ts +11 -0
- package/src/provider/models.ts +106 -0
- package/src/provider/provider.ts +1071 -0
- package/src/provider/sdk/openai-compatible/src/README.md +5 -0
- package/src/provider/sdk/openai-compatible/src/index.ts +2 -0
- package/src/provider/sdk/openai-compatible/src/openai-compatible-provider.ts +100 -0
- package/src/provider/sdk/openai-compatible/src/responses/convert-to-openai-responses-input.ts +303 -0
- package/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts +22 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-config.ts +18 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +22 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-api-types.ts +207 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-language-model.ts +1713 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-prepare-tools.ts +177 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-settings.ts +1 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/code-interpreter.ts +88 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/file-search.ts +128 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/image-generation.ts +115 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/local-shell.ts +65 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/web-search-preview.ts +104 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/web-search.ts +103 -0
- package/src/provider/transform.ts +455 -0
- package/src/pty/index.ts +231 -0
- package/src/security/guardrails.test.ts +341 -0
- package/src/security/guardrails.ts +558 -0
- package/src/security/index.ts +19 -0
- package/src/server/error.ts +36 -0
- package/src/server/project.ts +79 -0
- package/src/server/server.ts +2642 -0
- package/src/server/tui.ts +71 -0
- package/src/session/compaction.ts +223 -0
- package/src/session/index.ts +461 -0
- package/src/session/llm.ts +201 -0
- package/src/session/message-v2.ts +690 -0
- package/src/session/message.ts +189 -0
- package/src/session/processor.ts +409 -0
- package/src/session/prompt/act-switch.txt +5 -0
- package/src/session/prompt/anthropic-20250930.txt +166 -0
- package/src/session/prompt/anthropic.txt +85 -0
- package/src/session/prompt/anthropic_spoof.txt +1 -0
- package/src/session/prompt/beast.txt +103 -0
- package/src/session/prompt/codex.txt +304 -0
- package/src/session/prompt/copilot-gpt-5.txt +138 -0
- package/src/session/prompt/gemini.txt +85 -0
- package/src/session/prompt/max-steps.txt +16 -0
- package/src/session/prompt/plan-reminder-anthropic.txt +35 -0
- package/src/session/prompt/plan.txt +24 -0
- package/src/session/prompt/polaris.txt +84 -0
- package/src/session/prompt/qwen.txt +106 -0
- package/src/session/prompt.ts +1509 -0
- package/src/session/retry.ts +86 -0
- package/src/session/revert.ts +108 -0
- package/src/session/sensitive-filter.test.ts +327 -0
- package/src/session/sensitive-filter.ts +466 -0
- package/src/session/status.ts +76 -0
- package/src/session/summary.ts +194 -0
- package/src/session/system.ts +120 -0
- package/src/session/todo.ts +37 -0
- package/src/share/share-next.ts +194 -0
- package/src/share/share.ts +87 -0
- package/src/shell/shell.ts +67 -0
- package/src/skill/index.ts +1 -0
- package/src/skill/skill.ts +83 -0
- package/src/snapshot/index.ts +197 -0
- package/src/storage/storage.ts +226 -0
- package/src/tests/agent.test.ts +308 -0
- package/src/tests/build-guards.test.ts +267 -0
- package/src/tests/config.test.ts +664 -0
- package/src/tests/tool-registry.test.ts +589 -0
- package/src/tool/bash.ts +317 -0
- package/src/tool/bash.txt +158 -0
- package/src/tool/batch.ts +175 -0
- package/src/tool/batch.txt +24 -0
- package/src/tool/codesearch.ts +168 -0
- package/src/tool/codesearch.txt +12 -0
- package/src/tool/edit.ts +675 -0
- package/src/tool/edit.txt +10 -0
- package/src/tool/glob.ts +65 -0
- package/src/tool/glob.txt +6 -0
- package/src/tool/grep.ts +121 -0
- package/src/tool/grep.txt +8 -0
- package/src/tool/invalid.ts +17 -0
- package/src/tool/ls.ts +110 -0
- package/src/tool/ls.txt +1 -0
- package/src/tool/lsp-diagnostics.ts +26 -0
- package/src/tool/lsp-diagnostics.txt +1 -0
- package/src/tool/lsp-hover.ts +31 -0
- package/src/tool/lsp-hover.txt +1 -0
- package/src/tool/lsp.ts +87 -0
- package/src/tool/lsp.txt +19 -0
- package/src/tool/multiedit.ts +46 -0
- package/src/tool/multiedit.txt +41 -0
- package/src/tool/patch.ts +233 -0
- package/src/tool/patch.txt +1 -0
- package/src/tool/read.ts +219 -0
- package/src/tool/read.txt +12 -0
- package/src/tool/registry.ts +162 -0
- package/src/tool/skill.ts +100 -0
- package/src/tool/task.ts +136 -0
- package/src/tool/task.txt +51 -0
- package/src/tool/todo.ts +39 -0
- package/src/tool/todoread.txt +14 -0
- package/src/tool/todowrite.txt +167 -0
- package/src/tool/tool.ts +71 -0
- package/src/tool/webfetch.ts +198 -0
- package/src/tool/webfetch.txt +13 -0
- package/src/tool/websearch.ts +180 -0
- package/src/tool/websearch.txt +11 -0
- package/src/tool/write.ts +110 -0
- package/src/tool/write.txt +8 -0
- package/src/util/archive.ts +16 -0
- package/src/util/color.ts +19 -0
- package/src/util/context.ts +25 -0
- package/src/util/defer.ts +12 -0
- package/src/util/eventloop.ts +20 -0
- package/src/util/filesystem.ts +83 -0
- package/src/util/fn.ts +11 -0
- package/src/util/iife.ts +3 -0
- package/src/util/keybind.ts +102 -0
- package/src/util/lazy.ts +11 -0
- package/src/util/license.ts +325 -0
- package/src/util/locale.ts +81 -0
- package/src/util/lock.ts +98 -0
- package/src/util/log.ts +180 -0
- package/src/util/queue.ts +32 -0
- package/src/util/rpc.ts +42 -0
- package/src/util/scrap.ts +10 -0
- package/src/util/signal.ts +12 -0
- package/src/util/timeout.ts +14 -0
- package/src/util/token.ts +7 -0
- package/src/util/wildcard.ts +54 -0
- package/sst-env.d.ts +9 -0
- package/test/agent/agent.test.ts +146 -0
- package/test/bun.test.ts +53 -0
- package/test/cli/github-remote.test.ts +80 -0
- package/test/config/agent-color.test.ts +66 -0
- package/test/config/config.test.ts +535 -0
- package/test/config/markdown.test.ts +89 -0
- package/test/file/ignore.test.ts +10 -0
- package/test/fixture/fixture.ts +36 -0
- package/test/fixture/lsp/fake-lsp-server.js +77 -0
- package/test/ide/ide.test.ts +82 -0
- package/test/keybind.test.ts +421 -0
- package/test/lsp/client.test.ts +95 -0
- package/test/mcp/headers.test.ts +153 -0
- package/test/patch/patch.test.ts +348 -0
- package/test/preload.ts +57 -0
- package/test/project/project.test.ts +72 -0
- package/test/provider/provider.test.ts +1809 -0
- package/test/provider/transform.test.ts +411 -0
- package/test/session/retry.test.ts +111 -0
- package/test/session/session.test.ts +71 -0
- package/test/skill/skill.test.ts +131 -0
- package/test/snapshot/snapshot.test.ts +939 -0
- package/test/tool/__snapshots__/tool.test.ts.snap +9 -0
- package/test/tool/bash.test.ts +434 -0
- package/test/tool/grep.test.ts +108 -0
- package/test/tool/patch.test.ts +259 -0
- package/test/tool/read.test.ts +42 -0
- package/test/util/iife.test.ts +36 -0
- package/test/util/lazy.test.ts +50 -0
- package/test/util/timeout.test.ts +21 -0
- package/test/util/wildcard.test.ts +55 -0
- package/tsconfig.json +16 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { LanguageModelV2 } from "@ai-sdk/provider"
|
|
2
|
+
import { OpenAICompatibleChatLanguageModel } from "@ai-sdk/openai-compatible"
|
|
3
|
+
import { type FetchFunction, withoutTrailingSlash, withUserAgentSuffix } from "@ai-sdk/provider-utils"
|
|
4
|
+
import { OpenAIResponsesLanguageModel } from "./responses/openai-responses-language-model"
|
|
5
|
+
|
|
6
|
+
// Import the version or define it
|
|
7
|
+
const VERSION = "0.1.0"
|
|
8
|
+
|
|
9
|
+
export type OpenaiCompatibleModelId = string
|
|
10
|
+
|
|
11
|
+
export interface OpenaiCompatibleProviderSettings {
|
|
12
|
+
/**
|
|
13
|
+
* API key for authenticating requests.
|
|
14
|
+
*/
|
|
15
|
+
apiKey?: string
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Base URL for the OpenAI Compatible API calls.
|
|
19
|
+
*/
|
|
20
|
+
baseURL?: string
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Name of the provider.
|
|
24
|
+
*/
|
|
25
|
+
name?: string
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Custom headers to include in the requests.
|
|
29
|
+
*/
|
|
30
|
+
headers?: Record<string, string>
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Custom fetch implementation.
|
|
34
|
+
*/
|
|
35
|
+
fetch?: FetchFunction
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface OpenaiCompatibleProvider {
|
|
39
|
+
(modelId: OpenaiCompatibleModelId): LanguageModelV2
|
|
40
|
+
chat(modelId: OpenaiCompatibleModelId): LanguageModelV2
|
|
41
|
+
responses(modelId: OpenaiCompatibleModelId): LanguageModelV2
|
|
42
|
+
languageModel(modelId: OpenaiCompatibleModelId): LanguageModelV2
|
|
43
|
+
|
|
44
|
+
// embeddingModel(modelId: any): EmbeddingModelV2
|
|
45
|
+
|
|
46
|
+
// imageModel(modelId: any): ImageModelV2
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Create an OpenAI Compatible provider instance.
|
|
51
|
+
*/
|
|
52
|
+
export function createOpenaiCompatible(options: OpenaiCompatibleProviderSettings = {}): OpenaiCompatibleProvider {
|
|
53
|
+
const baseURL = withoutTrailingSlash(options.baseURL ?? "https://api.openai.com/v1")
|
|
54
|
+
|
|
55
|
+
if (!baseURL) {
|
|
56
|
+
throw new Error("baseURL is required")
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Merge headers: defaults first, then user overrides
|
|
60
|
+
const headers = {
|
|
61
|
+
// Default OpenAI Compatible headers (can be overridden by user)
|
|
62
|
+
...(options.apiKey && { Authorization: `Bearer ${options.apiKey}` }),
|
|
63
|
+
...options.headers,
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const getHeaders = () => withUserAgentSuffix(headers, `ai-sdk/openai-compatible/${VERSION}`)
|
|
67
|
+
|
|
68
|
+
const createChatModel = (modelId: OpenaiCompatibleModelId) => {
|
|
69
|
+
return new OpenAICompatibleChatLanguageModel(modelId, {
|
|
70
|
+
provider: `${options.name ?? "openai-compatible"}.chat`,
|
|
71
|
+
headers: getHeaders,
|
|
72
|
+
url: ({ path }) => `${baseURL}${path}`,
|
|
73
|
+
fetch: options.fetch,
|
|
74
|
+
})
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const createResponsesModel = (modelId: OpenaiCompatibleModelId) => {
|
|
78
|
+
return new OpenAIResponsesLanguageModel(modelId, {
|
|
79
|
+
provider: `${options.name ?? "openai-compatible"}.responses`,
|
|
80
|
+
headers: getHeaders,
|
|
81
|
+
url: ({ path }) => `${baseURL}${path}`,
|
|
82
|
+
fetch: options.fetch,
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const createLanguageModel = (modelId: OpenaiCompatibleModelId) => createChatModel(modelId)
|
|
87
|
+
|
|
88
|
+
const provider = function (modelId: OpenaiCompatibleModelId) {
|
|
89
|
+
return createChatModel(modelId)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
provider.languageModel = createLanguageModel
|
|
93
|
+
provider.chat = createChatModel
|
|
94
|
+
provider.responses = createResponsesModel
|
|
95
|
+
|
|
96
|
+
return provider as OpenaiCompatibleProvider
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Default OpenAI Compatible provider instance
|
|
100
|
+
export const openaiCompatible = createOpenaiCompatible()
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type LanguageModelV2CallWarning,
|
|
3
|
+
type LanguageModelV2Prompt,
|
|
4
|
+
type LanguageModelV2ToolCallPart,
|
|
5
|
+
UnsupportedFunctionalityError,
|
|
6
|
+
} from "@ai-sdk/provider"
|
|
7
|
+
import { convertToBase64, parseProviderOptions } from "@ai-sdk/provider-utils"
|
|
8
|
+
import { z } from "zod/v4"
|
|
9
|
+
import type { OpenAIResponsesInput, OpenAIResponsesReasoning } from "./openai-responses-api-types"
|
|
10
|
+
import { localShellInputSchema, localShellOutputSchema } from "./tool/local-shell"
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Check if a string is a file ID based on the given prefixes
|
|
14
|
+
* Returns false if prefixes is undefined (disables file ID detection)
|
|
15
|
+
*/
|
|
16
|
+
function isFileId(data: string, prefixes?: readonly string[]): boolean {
|
|
17
|
+
if (!prefixes) return false
|
|
18
|
+
return prefixes.some((prefix) => data.startsWith(prefix))
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export async function convertToOpenAIResponsesInput({
|
|
22
|
+
prompt,
|
|
23
|
+
systemMessageMode,
|
|
24
|
+
fileIdPrefixes,
|
|
25
|
+
store,
|
|
26
|
+
hasLocalShellTool = false,
|
|
27
|
+
}: {
|
|
28
|
+
prompt: LanguageModelV2Prompt
|
|
29
|
+
systemMessageMode: "system" | "developer" | "remove"
|
|
30
|
+
fileIdPrefixes?: readonly string[]
|
|
31
|
+
store: boolean
|
|
32
|
+
hasLocalShellTool?: boolean
|
|
33
|
+
}): Promise<{
|
|
34
|
+
input: OpenAIResponsesInput
|
|
35
|
+
warnings: Array<LanguageModelV2CallWarning>
|
|
36
|
+
}> {
|
|
37
|
+
const input: OpenAIResponsesInput = []
|
|
38
|
+
const warnings: Array<LanguageModelV2CallWarning> = []
|
|
39
|
+
|
|
40
|
+
for (const { role, content } of prompt) {
|
|
41
|
+
switch (role) {
|
|
42
|
+
case "system": {
|
|
43
|
+
switch (systemMessageMode) {
|
|
44
|
+
case "system": {
|
|
45
|
+
input.push({ role: "system", content })
|
|
46
|
+
break
|
|
47
|
+
}
|
|
48
|
+
case "developer": {
|
|
49
|
+
input.push({ role: "developer", content })
|
|
50
|
+
break
|
|
51
|
+
}
|
|
52
|
+
case "remove": {
|
|
53
|
+
warnings.push({
|
|
54
|
+
type: "other",
|
|
55
|
+
message: "system messages are removed for this model",
|
|
56
|
+
})
|
|
57
|
+
break
|
|
58
|
+
}
|
|
59
|
+
default: {
|
|
60
|
+
const _exhaustiveCheck: never = systemMessageMode
|
|
61
|
+
throw new Error(`Unsupported system message mode: ${_exhaustiveCheck}`)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
break
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
case "user": {
|
|
68
|
+
input.push({
|
|
69
|
+
role: "user",
|
|
70
|
+
content: content.map((part, index) => {
|
|
71
|
+
switch (part.type) {
|
|
72
|
+
case "text": {
|
|
73
|
+
return { type: "input_text", text: part.text }
|
|
74
|
+
}
|
|
75
|
+
case "file": {
|
|
76
|
+
if (part.mediaType.startsWith("image/")) {
|
|
77
|
+
const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType
|
|
78
|
+
|
|
79
|
+
return {
|
|
80
|
+
type: "input_image",
|
|
81
|
+
...(part.data instanceof URL
|
|
82
|
+
? { image_url: part.data.toString() }
|
|
83
|
+
: typeof part.data === "string" && isFileId(part.data, fileIdPrefixes)
|
|
84
|
+
? { file_id: part.data }
|
|
85
|
+
: {
|
|
86
|
+
image_url: `data:${mediaType};base64,${convertToBase64(part.data)}`,
|
|
87
|
+
}),
|
|
88
|
+
detail: part.providerOptions?.openai?.imageDetail,
|
|
89
|
+
}
|
|
90
|
+
} else if (part.mediaType === "application/pdf") {
|
|
91
|
+
if (part.data instanceof URL) {
|
|
92
|
+
return {
|
|
93
|
+
type: "input_file",
|
|
94
|
+
file_url: part.data.toString(),
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
type: "input_file",
|
|
99
|
+
...(typeof part.data === "string" && isFileId(part.data, fileIdPrefixes)
|
|
100
|
+
? { file_id: part.data }
|
|
101
|
+
: {
|
|
102
|
+
filename: part.filename ?? `part-${index}.pdf`,
|
|
103
|
+
file_data: `data:application/pdf;base64,${convertToBase64(part.data)}`,
|
|
104
|
+
}),
|
|
105
|
+
}
|
|
106
|
+
} else {
|
|
107
|
+
throw new UnsupportedFunctionalityError({
|
|
108
|
+
functionality: `file part media type ${part.mediaType}`,
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}),
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
break
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
case "assistant": {
|
|
120
|
+
const reasoningMessages: Record<string, OpenAIResponsesReasoning> = {}
|
|
121
|
+
const toolCallParts: Record<string, LanguageModelV2ToolCallPart> = {}
|
|
122
|
+
|
|
123
|
+
for (const part of content) {
|
|
124
|
+
switch (part.type) {
|
|
125
|
+
case "text": {
|
|
126
|
+
input.push({
|
|
127
|
+
role: "assistant",
|
|
128
|
+
content: [{ type: "output_text", text: part.text }],
|
|
129
|
+
id: (part.providerOptions?.openai?.itemId as string) ?? undefined,
|
|
130
|
+
})
|
|
131
|
+
break
|
|
132
|
+
}
|
|
133
|
+
case "tool-call": {
|
|
134
|
+
toolCallParts[part.toolCallId] = part
|
|
135
|
+
|
|
136
|
+
if (part.providerExecuted) {
|
|
137
|
+
break
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (hasLocalShellTool && part.toolName === "local_shell") {
|
|
141
|
+
const parsedInput = localShellInputSchema.parse(part.input)
|
|
142
|
+
input.push({
|
|
143
|
+
type: "local_shell_call",
|
|
144
|
+
call_id: part.toolCallId,
|
|
145
|
+
id: (part.providerOptions?.openai?.itemId as string) ?? undefined,
|
|
146
|
+
action: {
|
|
147
|
+
type: "exec",
|
|
148
|
+
command: parsedInput.action.command,
|
|
149
|
+
timeout_ms: parsedInput.action.timeoutMs,
|
|
150
|
+
user: parsedInput.action.user,
|
|
151
|
+
working_directory: parsedInput.action.workingDirectory,
|
|
152
|
+
env: parsedInput.action.env,
|
|
153
|
+
},
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
break
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
input.push({
|
|
160
|
+
type: "function_call",
|
|
161
|
+
call_id: part.toolCallId,
|
|
162
|
+
name: part.toolName,
|
|
163
|
+
arguments: JSON.stringify(part.input),
|
|
164
|
+
id: (part.providerOptions?.openai?.itemId as string) ?? undefined,
|
|
165
|
+
})
|
|
166
|
+
break
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// assistant tool result parts are from provider-executed tools:
|
|
170
|
+
case "tool-result": {
|
|
171
|
+
if (store) {
|
|
172
|
+
// use item references to refer to tool results from built-in tools
|
|
173
|
+
input.push({ type: "item_reference", id: part.toolCallId })
|
|
174
|
+
} else {
|
|
175
|
+
warnings.push({
|
|
176
|
+
type: "other",
|
|
177
|
+
message: `Results for OpenAI tool ${part.toolName} are not sent to the API when store is false`,
|
|
178
|
+
})
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
break
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
case "reasoning": {
|
|
185
|
+
const providerOptions = await parseProviderOptions({
|
|
186
|
+
provider: "openai",
|
|
187
|
+
providerOptions: part.providerOptions,
|
|
188
|
+
schema: openaiResponsesReasoningProviderOptionsSchema,
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
const reasoningId = providerOptions?.itemId
|
|
192
|
+
|
|
193
|
+
if (reasoningId != null) {
|
|
194
|
+
const reasoningMessage = reasoningMessages[reasoningId]
|
|
195
|
+
|
|
196
|
+
if (store) {
|
|
197
|
+
if (reasoningMessage === undefined) {
|
|
198
|
+
// use item references to refer to reasoning (single reference)
|
|
199
|
+
input.push({ type: "item_reference", id: reasoningId })
|
|
200
|
+
|
|
201
|
+
// store unused reasoning message to mark id as used
|
|
202
|
+
reasoningMessages[reasoningId] = {
|
|
203
|
+
type: "reasoning",
|
|
204
|
+
id: reasoningId,
|
|
205
|
+
summary: [],
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
} else {
|
|
209
|
+
const summaryParts: Array<{
|
|
210
|
+
type: "summary_text"
|
|
211
|
+
text: string
|
|
212
|
+
}> = []
|
|
213
|
+
|
|
214
|
+
if (part.text.length > 0) {
|
|
215
|
+
summaryParts.push({
|
|
216
|
+
type: "summary_text",
|
|
217
|
+
text: part.text,
|
|
218
|
+
})
|
|
219
|
+
} else if (reasoningMessage !== undefined) {
|
|
220
|
+
warnings.push({
|
|
221
|
+
type: "other",
|
|
222
|
+
message: `Cannot append empty reasoning part to existing reasoning sequence. Skipping reasoning part: ${JSON.stringify(part)}.`,
|
|
223
|
+
})
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (reasoningMessage === undefined) {
|
|
227
|
+
reasoningMessages[reasoningId] = {
|
|
228
|
+
type: "reasoning",
|
|
229
|
+
id: reasoningId,
|
|
230
|
+
encrypted_content: providerOptions?.reasoningEncryptedContent,
|
|
231
|
+
summary: summaryParts,
|
|
232
|
+
}
|
|
233
|
+
input.push(reasoningMessages[reasoningId])
|
|
234
|
+
} else {
|
|
235
|
+
reasoningMessage.summary.push(...summaryParts)
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
} else {
|
|
239
|
+
warnings.push({
|
|
240
|
+
type: "other",
|
|
241
|
+
message: `Non-OpenAI reasoning parts are not supported. Skipping reasoning part: ${JSON.stringify(part)}.`,
|
|
242
|
+
})
|
|
243
|
+
}
|
|
244
|
+
break
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
break
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
case "tool": {
|
|
253
|
+
for (const part of content) {
|
|
254
|
+
const output = part.output
|
|
255
|
+
|
|
256
|
+
if (hasLocalShellTool && part.toolName === "local_shell" && output.type === "json") {
|
|
257
|
+
input.push({
|
|
258
|
+
type: "local_shell_call_output",
|
|
259
|
+
call_id: part.toolCallId,
|
|
260
|
+
output: localShellOutputSchema.parse(output.value).output,
|
|
261
|
+
})
|
|
262
|
+
break
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
let contentValue: string
|
|
266
|
+
switch (output.type) {
|
|
267
|
+
case "text":
|
|
268
|
+
case "error-text":
|
|
269
|
+
contentValue = output.value
|
|
270
|
+
break
|
|
271
|
+
case "content":
|
|
272
|
+
case "json":
|
|
273
|
+
case "error-json":
|
|
274
|
+
contentValue = JSON.stringify(output.value)
|
|
275
|
+
break
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
input.push({
|
|
279
|
+
type: "function_call_output",
|
|
280
|
+
call_id: part.toolCallId,
|
|
281
|
+
output: contentValue,
|
|
282
|
+
})
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
break
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
default: {
|
|
289
|
+
const _exhaustiveCheck: never = role
|
|
290
|
+
throw new Error(`Unsupported role: ${_exhaustiveCheck}`)
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
return { input, warnings }
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
const openaiResponsesReasoningProviderOptionsSchema = z.object({
|
|
299
|
+
itemId: z.string().nullish(),
|
|
300
|
+
reasoningEncryptedContent: z.string().nullish(),
|
|
301
|
+
})
|
|
302
|
+
|
|
303
|
+
export type OpenAIResponsesReasoningProviderOptions = z.infer<typeof openaiResponsesReasoningProviderOptionsSchema>
|
package/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { LanguageModelV2FinishReason } from "@ai-sdk/provider"
|
|
2
|
+
|
|
3
|
+
export function mapOpenAIResponseFinishReason({
|
|
4
|
+
finishReason,
|
|
5
|
+
hasFunctionCall,
|
|
6
|
+
}: {
|
|
7
|
+
finishReason: string | null | undefined
|
|
8
|
+
// flag that checks if there have been client-side tool calls (not executed by openai)
|
|
9
|
+
hasFunctionCall: boolean
|
|
10
|
+
}): LanguageModelV2FinishReason {
|
|
11
|
+
switch (finishReason) {
|
|
12
|
+
case undefined:
|
|
13
|
+
case null:
|
|
14
|
+
return hasFunctionCall ? "tool-calls" : "stop"
|
|
15
|
+
case "max_output_tokens":
|
|
16
|
+
return "length"
|
|
17
|
+
case "content_filter":
|
|
18
|
+
return "content-filter"
|
|
19
|
+
default:
|
|
20
|
+
return hasFunctionCall ? "tool-calls" : "unknown"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FetchFunction } from "@ai-sdk/provider-utils"
|
|
2
|
+
|
|
3
|
+
export type OpenAIConfig = {
|
|
4
|
+
provider: string
|
|
5
|
+
url: (options: { modelId: string; path: string }) => string
|
|
6
|
+
headers: () => Record<string, string | undefined>
|
|
7
|
+
fetch?: FetchFunction
|
|
8
|
+
generateId?: () => string
|
|
9
|
+
/**
|
|
10
|
+
* File ID prefixes used to identify file IDs in Responses API.
|
|
11
|
+
* When undefined, all file data is treated as base64 content.
|
|
12
|
+
*
|
|
13
|
+
* Examples:
|
|
14
|
+
* - OpenAI: ['file-'] for IDs like 'file-abc123'
|
|
15
|
+
* - Azure OpenAI: ['assistant-'] for IDs like 'assistant-abc123'
|
|
16
|
+
*/
|
|
17
|
+
fileIdPrefixes?: readonly string[]
|
|
18
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod/v4"
|
|
2
|
+
import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils"
|
|
3
|
+
|
|
4
|
+
export const openaiErrorDataSchema = z.object({
|
|
5
|
+
error: z.object({
|
|
6
|
+
message: z.string(),
|
|
7
|
+
|
|
8
|
+
// The additional information below is handled loosely to support
|
|
9
|
+
// OpenAI-compatible providers that have slightly different error
|
|
10
|
+
// responses:
|
|
11
|
+
type: z.string().nullish(),
|
|
12
|
+
param: z.any().nullish(),
|
|
13
|
+
code: z.union([z.string(), z.number()]).nullish(),
|
|
14
|
+
}),
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
export type OpenAIErrorData = z.infer<typeof openaiErrorDataSchema>
|
|
18
|
+
|
|
19
|
+
export const openaiFailedResponseHandler: any = createJsonErrorResponseHandler({
|
|
20
|
+
errorSchema: openaiErrorDataSchema,
|
|
21
|
+
errorToMessage: (data) => data.error.message,
|
|
22
|
+
})
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import type { JSONSchema7 } from "@ai-sdk/provider"
|
|
2
|
+
|
|
3
|
+
export type OpenAIResponsesInput = Array<OpenAIResponsesInputItem>
|
|
4
|
+
|
|
5
|
+
export type OpenAIResponsesInputItem =
|
|
6
|
+
| OpenAIResponsesSystemMessage
|
|
7
|
+
| OpenAIResponsesUserMessage
|
|
8
|
+
| OpenAIResponsesAssistantMessage
|
|
9
|
+
| OpenAIResponsesFunctionCall
|
|
10
|
+
| OpenAIResponsesFunctionCallOutput
|
|
11
|
+
| OpenAIResponsesComputerCall
|
|
12
|
+
| OpenAIResponsesLocalShellCall
|
|
13
|
+
| OpenAIResponsesLocalShellCallOutput
|
|
14
|
+
| OpenAIResponsesReasoning
|
|
15
|
+
| OpenAIResponsesItemReference
|
|
16
|
+
|
|
17
|
+
export type OpenAIResponsesIncludeValue =
|
|
18
|
+
| "web_search_call.action.sources"
|
|
19
|
+
| "code_interpreter_call.outputs"
|
|
20
|
+
| "computer_call_output.output.image_url"
|
|
21
|
+
| "file_search_call.results"
|
|
22
|
+
| "message.input_image.image_url"
|
|
23
|
+
| "message.output_text.logprobs"
|
|
24
|
+
| "reasoning.encrypted_content"
|
|
25
|
+
|
|
26
|
+
export type OpenAIResponsesIncludeOptions = Array<OpenAIResponsesIncludeValue> | undefined | null
|
|
27
|
+
|
|
28
|
+
export type OpenAIResponsesSystemMessage = {
|
|
29
|
+
role: "system" | "developer"
|
|
30
|
+
content: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type OpenAIResponsesUserMessage = {
|
|
34
|
+
role: "user"
|
|
35
|
+
content: Array<
|
|
36
|
+
| { type: "input_text"; text: string }
|
|
37
|
+
| { type: "input_image"; image_url: string }
|
|
38
|
+
| { type: "input_image"; file_id: string }
|
|
39
|
+
| { type: "input_file"; file_url: string }
|
|
40
|
+
| { type: "input_file"; filename: string; file_data: string }
|
|
41
|
+
| { type: "input_file"; file_id: string }
|
|
42
|
+
>
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export type OpenAIResponsesAssistantMessage = {
|
|
46
|
+
role: "assistant"
|
|
47
|
+
content: Array<{ type: "output_text"; text: string }>
|
|
48
|
+
id?: string
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type OpenAIResponsesFunctionCall = {
|
|
52
|
+
type: "function_call"
|
|
53
|
+
call_id: string
|
|
54
|
+
name: string
|
|
55
|
+
arguments: string
|
|
56
|
+
id?: string
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export type OpenAIResponsesFunctionCallOutput = {
|
|
60
|
+
type: "function_call_output"
|
|
61
|
+
call_id: string
|
|
62
|
+
output: string
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export type OpenAIResponsesComputerCall = {
|
|
66
|
+
type: "computer_call"
|
|
67
|
+
id: string
|
|
68
|
+
status?: string
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export type OpenAIResponsesLocalShellCall = {
|
|
72
|
+
type: "local_shell_call"
|
|
73
|
+
id: string
|
|
74
|
+
call_id: string
|
|
75
|
+
action: {
|
|
76
|
+
type: "exec"
|
|
77
|
+
command: string[]
|
|
78
|
+
timeout_ms?: number
|
|
79
|
+
user?: string
|
|
80
|
+
working_directory?: string
|
|
81
|
+
env?: Record<string, string>
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export type OpenAIResponsesLocalShellCallOutput = {
|
|
86
|
+
type: "local_shell_call_output"
|
|
87
|
+
call_id: string
|
|
88
|
+
output: string
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export type OpenAIResponsesItemReference = {
|
|
92
|
+
type: "item_reference"
|
|
93
|
+
id: string
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* A filter used to compare a specified attribute key to a given value using a defined comparison operation.
|
|
98
|
+
*/
|
|
99
|
+
export type OpenAIResponsesFileSearchToolComparisonFilter = {
|
|
100
|
+
/**
|
|
101
|
+
* The key to compare against the value.
|
|
102
|
+
*/
|
|
103
|
+
key: string
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Specifies the comparison operator: eq, ne, gt, gte, lt, lte.
|
|
107
|
+
*/
|
|
108
|
+
type: "eq" | "ne" | "gt" | "gte" | "lt" | "lte"
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The value to compare against the attribute key; supports string, number, or boolean types.
|
|
112
|
+
*/
|
|
113
|
+
value: string | number | boolean
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Combine multiple filters using and or or.
|
|
118
|
+
*/
|
|
119
|
+
export type OpenAIResponsesFileSearchToolCompoundFilter = {
|
|
120
|
+
/**
|
|
121
|
+
* Type of operation: and or or.
|
|
122
|
+
*/
|
|
123
|
+
type: "and" | "or"
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Array of filters to combine. Items can be ComparisonFilter or CompoundFilter.
|
|
127
|
+
*/
|
|
128
|
+
filters: Array<OpenAIResponsesFileSearchToolComparisonFilter | OpenAIResponsesFileSearchToolCompoundFilter>
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export type OpenAIResponsesTool =
|
|
132
|
+
| {
|
|
133
|
+
type: "function"
|
|
134
|
+
name: string
|
|
135
|
+
description: string | undefined
|
|
136
|
+
parameters: JSONSchema7
|
|
137
|
+
strict: boolean | undefined
|
|
138
|
+
}
|
|
139
|
+
| {
|
|
140
|
+
type: "web_search"
|
|
141
|
+
filters: { allowed_domains: string[] | undefined } | undefined
|
|
142
|
+
search_context_size: "low" | "medium" | "high" | undefined
|
|
143
|
+
user_location:
|
|
144
|
+
| {
|
|
145
|
+
type: "approximate"
|
|
146
|
+
city?: string
|
|
147
|
+
country?: string
|
|
148
|
+
region?: string
|
|
149
|
+
timezone?: string
|
|
150
|
+
}
|
|
151
|
+
| undefined
|
|
152
|
+
}
|
|
153
|
+
| {
|
|
154
|
+
type: "web_search_preview"
|
|
155
|
+
search_context_size: "low" | "medium" | "high" | undefined
|
|
156
|
+
user_location:
|
|
157
|
+
| {
|
|
158
|
+
type: "approximate"
|
|
159
|
+
city?: string
|
|
160
|
+
country?: string
|
|
161
|
+
region?: string
|
|
162
|
+
timezone?: string
|
|
163
|
+
}
|
|
164
|
+
| undefined
|
|
165
|
+
}
|
|
166
|
+
| {
|
|
167
|
+
type: "code_interpreter"
|
|
168
|
+
container: string | { type: "auto"; file_ids: string[] | undefined }
|
|
169
|
+
}
|
|
170
|
+
| {
|
|
171
|
+
type: "file_search"
|
|
172
|
+
vector_store_ids: string[]
|
|
173
|
+
max_num_results: number | undefined
|
|
174
|
+
ranking_options: { ranker?: string; score_threshold?: number } | undefined
|
|
175
|
+
filters: OpenAIResponsesFileSearchToolComparisonFilter | OpenAIResponsesFileSearchToolCompoundFilter | undefined
|
|
176
|
+
}
|
|
177
|
+
| {
|
|
178
|
+
type: "image_generation"
|
|
179
|
+
background: "auto" | "opaque" | "transparent" | undefined
|
|
180
|
+
input_fidelity: "low" | "high" | undefined
|
|
181
|
+
input_image_mask:
|
|
182
|
+
| {
|
|
183
|
+
file_id: string | undefined
|
|
184
|
+
image_url: string | undefined
|
|
185
|
+
}
|
|
186
|
+
| undefined
|
|
187
|
+
model: string | undefined
|
|
188
|
+
moderation: "auto" | undefined
|
|
189
|
+
output_compression: number | undefined
|
|
190
|
+
output_format: "png" | "jpeg" | "webp" | undefined
|
|
191
|
+
partial_images: number | undefined
|
|
192
|
+
quality: "auto" | "low" | "medium" | "high" | undefined
|
|
193
|
+
size: "auto" | "1024x1024" | "1024x1536" | "1536x1024" | undefined
|
|
194
|
+
}
|
|
195
|
+
| {
|
|
196
|
+
type: "local_shell"
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export type OpenAIResponsesReasoning = {
|
|
200
|
+
type: "reasoning"
|
|
201
|
+
id: string
|
|
202
|
+
encrypted_content?: string | null
|
|
203
|
+
summary: Array<{
|
|
204
|
+
type: "summary_text"
|
|
205
|
+
text: string
|
|
206
|
+
}>
|
|
207
|
+
}
|