mirror of
https://github.com/anomalyco/opencode.git
synced 2026-08-14 15:32:52 -04:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a44316f9f2 |
@@ -1,4 +1,3 @@
|
|||||||
packages/core/migration/**/snapshot.json linguist-generated
|
packages/core/migration/**/snapshot.json linguist-generated
|
||||||
packages/core/src/database/migration.gen.ts linguist-generated
|
packages/core/src/database/migration.gen.ts linguist-generated
|
||||||
packages/core/src/models-dev/snapshot.txt linguist-generated
|
|
||||||
packages/core/src/**/*.txt text eol=lf
|
packages/core/src/**/*.txt text eol=lf
|
||||||
|
|||||||
@@ -124,66 +124,12 @@ jobs:
|
|||||||
|
|
||||||
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: opencode-preview-cli-unsigned
|
name: opencode-preview-cli
|
||||||
path: packages/cli/dist/cli-*
|
path: packages/cli/dist/cli-*
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
version: ${{ needs.version.outputs.version }}
|
version: ${{ needs.version.outputs.version }}
|
||||||
|
|
||||||
sign-cli-macos:
|
|
||||||
needs: build-cli
|
|
||||||
runs-on: macos-26
|
|
||||||
if: github.repository == 'anomalyco/opencode'
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
|
|
||||||
|
|
||||||
- uses: apple-actions/import-codesign-certs@8f3fb608891dd2244cdab3d69cd68c0d37a7fe93 # v2.0.0
|
|
||||||
with:
|
|
||||||
keychain: build
|
|
||||||
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }}
|
|
||||||
p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
|
|
||||||
with:
|
|
||||||
name: opencode-preview-cli-unsigned
|
|
||||||
path: packages/cli/dist
|
|
||||||
|
|
||||||
- name: Sign macOS CLI binaries
|
|
||||||
run: |
|
|
||||||
identity=$(security find-identity -v -p codesigning build.keychain | sed -n 's/.*"\(Developer ID Application:.*\)"/\1/p' | head -n 1)
|
|
||||||
if [ -z "$identity" ]; then
|
|
||||||
echo "Developer ID Application identity not found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
found=0
|
|
||||||
for file in packages/cli/dist/cli-darwin-*/bin/opencode2; do
|
|
||||||
if [ ! -f "$file" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
found=1
|
|
||||||
codesign \
|
|
||||||
--force \
|
|
||||||
--timestamp \
|
|
||||||
--options runtime \
|
|
||||||
--entitlements packages/cli/script/entitlements.plist \
|
|
||||||
--sign "$identity" \
|
|
||||||
"$file"
|
|
||||||
codesign --verify --deep --strict --verbose=4 "$file"
|
|
||||||
codesign --display --requirements - "$file"
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$found" -eq 0 ]; then
|
|
||||||
echo "No macOS CLI binaries found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
||||||
with:
|
|
||||||
name: opencode-preview-cli
|
|
||||||
path: packages/cli/dist/cli-*
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
build-node-cli:
|
build-node-cli:
|
||||||
needs: version
|
needs: version
|
||||||
if: github.repository == 'anomalyco/opencode' && github.ref_name != 'beta'
|
if: github.repository == 'anomalyco/opencode' && github.ref_name != 'beta'
|
||||||
@@ -522,7 +468,6 @@ jobs:
|
|||||||
needs:
|
needs:
|
||||||
- version
|
- version
|
||||||
- build-cli
|
- build-cli
|
||||||
- sign-cli-macos
|
|
||||||
- build-node-cli
|
- build-node-cli
|
||||||
- sign-cli-windows
|
- sign-cli-windows
|
||||||
- build-electron
|
- build-electron
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import type { Context } from "../../../packages/plugin/src/tui/context"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: "test.tui-discovery-smoke",
|
||||||
|
setup(_context: Context) {
|
||||||
|
// context.ui.toast.show({
|
||||||
|
// title: "TUI plugin discovery works",
|
||||||
|
// message: "Loaded .opencode/plugins/tui/discovery-smoke.ts",
|
||||||
|
// variant: "success",
|
||||||
|
// duration: 30_000,
|
||||||
|
// })
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
name: ideal-pseudocode
|
||||||
|
description: Function-by-function refactoring loop driven by ideal pseudocode. Use when the user says "ideal pseudocode", asks to make a function read like its pseudocode, or wants a dense module cleaned up one function at a time.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Ideal Pseudocode
|
||||||
|
|
||||||
|
Clean up one function at a time by writing the pseudocode it _should_ read as, naming every delta between that and the real code, and closing only the gaps the user approves.
|
||||||
|
|
||||||
|
## Loop
|
||||||
|
|
||||||
|
One function per round. Never touch code before the user picks a direction.
|
||||||
|
|
||||||
|
1. **Pick the target** with the user — usually the next function up or down the call chain from the last round.
|
||||||
|
2. **Read the current code** fresh from disk. It may have unsaved or parallel edits; ask before overwriting anything unexpected.
|
||||||
|
3. **Distill.** Write the function's ideal pseudocode in a `ts`-fenced code block — TypeScript-flavored for syntax highlighting, but pseudocode: comments over mechanics, one line per idea, every arm of a loop visible as an arm. For a dense or unfamiliar function, first show the _current_ structure as pseudocode, then the ideal.
|
||||||
|
4. **Name the deltas.** A numbered list; each delta is one concrete gap: control flow smuggled through combinators, a flag-typed parameter, colliding names, side-effect plumbing drowning a loop body, twin functions differing only by a filter. For each, give an honest cost/benefit and a decisive recommendation — including "leave it" when the density has reasons (state the reasons).
|
||||||
|
5. **Verify before proposing.** Any API the proposal builds on (a combinator, schedule, matcher) gets checked against the installed version's source, not memory.
|
||||||
|
6. **Get buy-in, then apply.** Minimal edits. Quarantine irreducible ugliness inside a small helper whose name is the pseudocode line it implements. Collapse shallow sibling functions into one deep function only when the distinguishing argument is a domain noun, not a behavior switch.
|
||||||
|
7. **Validate.** Typecheck and the focused test suites from the package directory; rerun timing-sensitive tests repeatedly. Flag any semantic change the restructure introduced, even when tests pass.
|
||||||
|
8. **Offer the next target** and stop.
|
||||||
|
|
||||||
|
## Style
|
||||||
|
|
||||||
|
- Keep each round tight: pseudocode block, deltas, recommendation, one question.
|
||||||
|
- State mutation belongs in one visible place (usually the loop tail), never spread across error channels or callback closures.
|
||||||
|
- Prefer early return and `if` chains for control flow; matchers are for producing values.
|
||||||
|
- Compare names against the question each caller is actually asking; rename toward the domain noun.
|
||||||
|
|
||||||
|
## Example round
|
||||||
|
|
||||||
|
Every round should read like this (abridged from a real one, on an Effect step-runner):
|
||||||
|
|
||||||
|
> `runStep` it is. The ideal pseudocode:
|
||||||
|
>
|
||||||
|
> ```ts
|
||||||
|
> // One logical step: one settled model call, however many attempts it takes.
|
||||||
|
> // An attempt can end without settling in two ways:
|
||||||
|
> // transient provider failure -> retry the same call, same assistant message
|
||||||
|
> // compaction rewrote history -> rebuild the request and call again
|
||||||
|
> function runStep(session, promotable, step) {
|
||||||
|
> while (true) {
|
||||||
|
> const result = callModel(session, promotable, step)
|
||||||
|
>
|
||||||
|
> if (result.completed) return result
|
||||||
|
>
|
||||||
|
> if (result.retryable) {
|
||||||
|
> wait(retrySchedule) // exhausted -> publish Step.Failed, fail drain
|
||||||
|
> promotable = none // never re-promote on a second attempt
|
||||||
|
> continue
|
||||||
|
> }
|
||||||
|
>
|
||||||
|
> // compaction restarted the step: fresh request from rewritten history
|
||||||
|
> promotable = none
|
||||||
|
> step = result.step
|
||||||
|
> }
|
||||||
|
> }
|
||||||
|
> ```
|
||||||
|
>
|
||||||
|
> Comparing against the real thing, three deltas:
|
||||||
|
>
|
||||||
|
> 1. **The retry arm doesn't live in the loop.** In the pseudocode, retry is just another loop arm. In the real code it's smuggled through the error channel: `Effect.tapError` mutating loop variables via `Effect.sync` closures, then `Effect.retryOrElse` re-running a suspended call. Four mutable variables mutated from three different places — the state flow is invisible unless you already know the trick.
|
||||||
|
> 2. **`recoverOverflow: typeof compaction.compact | undefined`** — a function-typed parameter used as a one-shot armed/disarmed flag. The callee already closes over `compaction`; a boolean says what it is.
|
||||||
|
> 3. **`assistantMessageID`** exists solely to resume the same durable message across retries — fine, but only legible once the retry arm is visible in the loop.
|
||||||
|
>
|
||||||
|
> The unifying move for (1): a schedule driver, so a retryable failure becomes a caught value handled in the loop body exactly like the compaction arm. One honest trade: it's more manual than the blessed combinator — but the manual version is the loop the combinator was hiding, and the loop already exists for restarts. Two restart mechanisms, one control structure.
|
||||||
|
>
|
||||||
|
> Want me to apply it — unified loop, simplified schedule input, boolean `recoverOverflow`?
|
||||||
@@ -375,6 +375,7 @@
|
|||||||
"@modelcontextprotocol/sdk": "1.29.0",
|
"@modelcontextprotocol/sdk": "1.29.0",
|
||||||
"@opencode-ai/ai": "workspace:*",
|
"@opencode-ai/ai": "workspace:*",
|
||||||
"@opencode-ai/codemode": "workspace:*",
|
"@opencode-ai/codemode": "workspace:*",
|
||||||
|
"@opencode-ai/effect-drizzle-sqlite": "workspace:*",
|
||||||
"@opencode-ai/plugin": "workspace:*",
|
"@opencode-ai/plugin": "workspace:*",
|
||||||
"@opencode-ai/schema": "workspace:*",
|
"@opencode-ai/schema": "workspace:*",
|
||||||
"@opencode-ai/util": "workspace:*",
|
"@opencode-ai/util": "workspace:*",
|
||||||
@@ -476,6 +477,20 @@
|
|||||||
"@parcel/watcher-win32-x64": "2.5.1",
|
"@parcel/watcher-win32-x64": "2.5.1",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"packages/effect-drizzle-sqlite": {
|
||||||
|
"name": "@opencode-ai/effect-drizzle-sqlite",
|
||||||
|
"version": "1.18.15",
|
||||||
|
"dependencies": {
|
||||||
|
"drizzle-orm": "catalog:",
|
||||||
|
"effect": "catalog:",
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@effect/sql-sqlite-bun": "catalog:",
|
||||||
|
"@tsconfig/bun": "catalog:",
|
||||||
|
"@types/bun": "catalog:",
|
||||||
|
"@typescript/native-preview": "catalog:",
|
||||||
|
},
|
||||||
|
},
|
||||||
"packages/enterprise": {
|
"packages/enterprise": {
|
||||||
"name": "@opencode-ai/enterprise",
|
"name": "@opencode-ai/enterprise",
|
||||||
"version": "1.18.15",
|
"version": "1.18.15",
|
||||||
@@ -1066,9 +1081,8 @@
|
|||||||
"@tanstack/virtual-core@3.17.3": "patches/@tanstack%2Fvirtual-core@3.17.3.patch",
|
"@tanstack/virtual-core@3.17.3": "patches/@tanstack%2Fvirtual-core@3.17.3.patch",
|
||||||
"@standard-community/standard-openapi@0.2.9": "patches/@standard-community%2Fstandard-openapi@0.2.9.patch",
|
"@standard-community/standard-openapi@0.2.9": "patches/@standard-community%2Fstandard-openapi@0.2.9.patch",
|
||||||
"@ai-sdk/mistral@3.0.51": "patches/@ai-sdk%2Fmistral@3.0.51.patch",
|
"@ai-sdk/mistral@3.0.51": "patches/@ai-sdk%2Fmistral@3.0.51.patch",
|
||||||
"@ff-labs/fff-bun@0.10.1": "patches/@ff-labs%2Ffff-bun@0.10.1.patch",
|
|
||||||
"@silvia-odwyer/photon-node@0.3.4": "patches/@silvia-odwyer%2Fphoton-node@0.3.4.patch",
|
|
||||||
"@npmcli/agent@4.0.2": "patches/@npmcli%2Fagent@4.0.2.patch",
|
"@npmcli/agent@4.0.2": "patches/@npmcli%2Fagent@4.0.2.patch",
|
||||||
|
"@silvia-odwyer/photon-node@0.3.4": "patches/@silvia-odwyer%2Fphoton-node@0.3.4.patch",
|
||||||
"solid-js@1.9.10": "patches/solid-js@1.9.10.patch",
|
"solid-js@1.9.10": "patches/solid-js@1.9.10.patch",
|
||||||
"@ai-sdk/google@3.0.73": "patches/@ai-sdk%2Fgoogle@3.0.73.patch",
|
"@ai-sdk/google@3.0.73": "patches/@ai-sdk%2Fgoogle@3.0.73.patch",
|
||||||
"@dnd-kit/dom@0.5.0": "patches/@dnd-kit%2Fdom@0.5.0.patch",
|
"@dnd-kit/dom@0.5.0": "patches/@dnd-kit%2Fdom@0.5.0.patch",
|
||||||
@@ -2073,6 +2087,8 @@
|
|||||||
|
|
||||||
"@opencode-ai/desktop": ["@opencode-ai/desktop@workspace:packages/desktop"],
|
"@opencode-ai/desktop": ["@opencode-ai/desktop@workspace:packages/desktop"],
|
||||||
|
|
||||||
|
"@opencode-ai/effect-drizzle-sqlite": ["@opencode-ai/effect-drizzle-sqlite@workspace:packages/effect-drizzle-sqlite"],
|
||||||
|
|
||||||
"@opencode-ai/enterprise": ["@opencode-ai/enterprise@workspace:packages/enterprise"],
|
"@opencode-ai/enterprise": ["@opencode-ai/enterprise@workspace:packages/enterprise"],
|
||||||
|
|
||||||
"@opencode-ai/function": ["@opencode-ai/function@workspace:packages/function"],
|
"@opencode-ai/function": ["@opencode-ai/function@workspace:packages/function"],
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
APP=opencode2
|
APP=opencode
|
||||||
|
|
||||||
MUTED='\033[0;2m'
|
MUTED='\033[0;2m'
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
@@ -15,14 +15,14 @@ Usage: install.sh [options]
|
|||||||
|
|
||||||
Options:
|
Options:
|
||||||
-h, --help Display this help message
|
-h, --help Display this help message
|
||||||
-v, --version <version> Install a specific version (e.g., 0.0.0-next-17236)
|
-v, --version <version> Install a specific version (e.g., 1.0.180)
|
||||||
-b, --binary <path> Install from a local binary instead of downloading
|
-b, --binary <path> Install from a local binary instead of downloading
|
||||||
--no-modify-path Don't modify shell config files (.zshrc, .bashrc, etc.)
|
--no-modify-path Don't modify shell config files (.zshrc, .bashrc, etc.)
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
curl -fsSL https://raw.githubusercontent.com/anomalyco/opencode/v2/install | bash
|
curl -fsSL https://opencode.ai/install | bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/anomalyco/opencode/v2/install | bash -s -- --version 0.0.0-next-17236
|
curl -fsSL https://opencode.ai/install | bash -s -- --version 1.0.180
|
||||||
./install --binary /path/to/opencode2
|
./install --binary /path/to/opencode
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,6 +109,11 @@ else
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
archive_ext=".zip"
|
||||||
|
if [ "$os" = "linux" ]; then
|
||||||
|
archive_ext=".tar.gz"
|
||||||
|
fi
|
||||||
|
|
||||||
is_musl=false
|
is_musl=false
|
||||||
if [ "$os" = "linux" ]; then
|
if [ "$os" = "linux" ]; then
|
||||||
if [ -f /etc/alpine-release ]; then
|
if [ -f /etc/alpine-release ]; then
|
||||||
@@ -160,42 +165,42 @@ else
|
|||||||
target="$target-musl"
|
target="$target-musl"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! command -v tar >/dev/null 2>&1; then
|
filename="$APP-$target$archive_ext"
|
||||||
echo -e "${RED}Error: 'tar' is required but not installed.${NC}"
|
|
||||||
exit 1
|
|
||||||
|
if [ "$os" = "linux" ]; then
|
||||||
|
if ! command -v tar >/dev/null 2>&1; then
|
||||||
|
echo -e "${RED}Error: 'tar' is required but not installed.${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if ! command -v unzip >/dev/null 2>&1; then
|
||||||
|
echo -e "${RED}Error: 'unzip' is required but not installed.${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$requested_version" ]; then
|
if [ -z "$requested_version" ]; then
|
||||||
metadata=$(curl -fsSL https://registry.npmjs.org/@opencode-ai%2fcli/next || true)
|
url="https://github.com/anomalyco/opencode/releases/latest/download/$filename"
|
||||||
specific_version=$(echo "$metadata" | sed -n 's/.*"version":"\([^"]*\)".*/\1/p')
|
specific_version=$(curl -s https://api.github.com/repos/anomalyco/opencode/releases/latest | sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p')
|
||||||
|
|
||||||
if [ -z "$specific_version" ]; then
|
if [[ $? -ne 0 || -z "$specific_version" ]]; then
|
||||||
echo -e "${RED}Failed to fetch version information${NC}"
|
echo -e "${RED}Failed to fetch version information${NC}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# Strip leading 'v' if present
|
# Strip leading 'v' if present
|
||||||
requested_version="${requested_version#v}"
|
requested_version="${requested_version#v}"
|
||||||
|
url="https://github.com/anomalyco/opencode/releases/download/v${requested_version}/$filename"
|
||||||
specific_version=$requested_version
|
specific_version=$requested_version
|
||||||
fi
|
|
||||||
|
|
||||||
package_name="@opencode-ai/cli-$target"
|
# Verify the release exists before downloading
|
||||||
http_status=$(curl -s -o /dev/null -w "%{http_code}" "https://registry.npmjs.org/@opencode-ai%2fcli-$target/$specific_version" || true)
|
http_status=$(curl -sI -o /dev/null -w "%{http_code}" "https://github.com/anomalyco/opencode/releases/tag/v${requested_version}")
|
||||||
if [ "$http_status" = "404" ]; then
|
if [ "$http_status" = "404" ]; then
|
||||||
echo -e "${RED}Error: Version ${specific_version} is not available for $target${NC}"
|
echo -e "${RED}Error: Release v${requested_version} not found${NC}"
|
||||||
echo -e "${MUTED}Available versions: https://www.npmjs.com/package/$package_name?activeTab=versions${NC}"
|
echo -e "${MUTED}Available releases: https://github.com/anomalyco/opencode/releases${NC}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [ "$http_status" != "200" ]; then
|
|
||||||
echo -e "${RED}Failed to fetch package information${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
filename="cli-$target-$specific_version.tgz"
|
|
||||||
url="https://registry.npmjs.org/$package_name/-/$filename"
|
|
||||||
binary_name="$APP"
|
|
||||||
if [ "$os" = "windows" ]; then
|
|
||||||
binary_name="$APP.exe"
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -214,13 +219,11 @@ print_message() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
check_version() {
|
check_version() {
|
||||||
if command -v "$APP" >/dev/null 2>&1; then
|
if command -v opencode >/dev/null 2>&1; then
|
||||||
opencode_path=$(which "$APP")
|
opencode_path=$(which opencode)
|
||||||
|
|
||||||
## Check the installed version
|
## Check the installed version
|
||||||
installed_version=$("$APP" --version 2>/dev/null || echo "")
|
installed_version=$(opencode --version 2>/dev/null || echo "")
|
||||||
installed_version="${installed_version##* }"
|
|
||||||
installed_version="${installed_version#v}"
|
|
||||||
|
|
||||||
if [[ "$installed_version" != "$specific_version" ]]; then
|
if [[ "$installed_version" != "$specific_version" ]]; then
|
||||||
print_message info "${MUTED}Installed version: ${NC}$installed_version."
|
print_message info "${MUTED}Installed version: ${NC}$installed_version."
|
||||||
@@ -284,7 +287,7 @@ download_with_progress() {
|
|||||||
trap "trap - RETURN; rm -f \"$tracefile\"; printf '\033[?25h' >&4; exec 4>&-" RETURN
|
trap "trap - RETURN; rm -f \"$tracefile\"; printf '\033[?25h' >&4; exec 4>&-" RETURN
|
||||||
|
|
||||||
(
|
(
|
||||||
curl --trace-ascii "$tracefile" -fsL -o "$output" "$url"
|
curl --trace-ascii "$tracefile" -s -L -o "$output" "$url"
|
||||||
) &
|
) &
|
||||||
local curl_pid=$!
|
local curl_pid=$!
|
||||||
|
|
||||||
@@ -322,25 +325,30 @@ download_with_progress() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
download_and_install() {
|
download_and_install() {
|
||||||
print_message info "\n${MUTED}Installing ${NC}$APP ${MUTED}version: ${NC}$specific_version"
|
print_message info "\n${MUTED}Installing ${NC}opencode ${MUTED}version: ${NC}$specific_version"
|
||||||
local tmp_dir="${TMPDIR:-/tmp}/opencode_install_$$"
|
local tmp_dir="${TMPDIR:-/tmp}/opencode_install_$$"
|
||||||
mkdir -p "$tmp_dir"
|
mkdir -p "$tmp_dir"
|
||||||
|
|
||||||
if [[ "$os" == "windows" ]] || ! [ -t 2 ] || ! download_with_progress "$url" "$tmp_dir/$filename"; then
|
if [[ "$os" == "windows" ]] || ! [ -t 2 ] || ! download_with_progress "$url" "$tmp_dir/$filename"; then
|
||||||
# Fallback to standard curl on Windows, non-TTY environments, or if custom progress fails
|
# Fallback to standard curl on Windows, non-TTY environments, or if custom progress fails
|
||||||
curl -f -# -L -o "$tmp_dir/$filename" "$url"
|
curl -# -L -o "$tmp_dir/$filename" "$url"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
tar -xzf "$tmp_dir/$filename" -C "$tmp_dir"
|
if [ "$os" = "linux" ]; then
|
||||||
mv "$tmp_dir/package/bin/$binary_name" "$INSTALL_DIR"
|
tar -xzf "$tmp_dir/$filename" -C "$tmp_dir"
|
||||||
chmod 755 "${INSTALL_DIR}/$binary_name"
|
else
|
||||||
|
unzip -q "$tmp_dir/$filename" -d "$tmp_dir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mv "$tmp_dir/opencode" "$INSTALL_DIR"
|
||||||
|
chmod 755 "${INSTALL_DIR}/opencode"
|
||||||
rm -rf "$tmp_dir"
|
rm -rf "$tmp_dir"
|
||||||
}
|
}
|
||||||
|
|
||||||
install_from_binary() {
|
install_from_binary() {
|
||||||
print_message info "\n${MUTED}Installing ${NC}$APP ${MUTED}from: ${NC}$binary_path"
|
print_message info "\n${MUTED}Installing ${NC}opencode ${MUTED}from: ${NC}$binary_path"
|
||||||
cp "$binary_path" "${INSTALL_DIR}/$APP"
|
cp "$binary_path" "${INSTALL_DIR}/opencode"
|
||||||
chmod 755 "${INSTALL_DIR}/$APP"
|
chmod 755 "${INSTALL_DIR}/opencode"
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ -n "$binary_path" ]; then
|
if [ -n "$binary_path" ]; then
|
||||||
@@ -445,8 +453,8 @@ echo -e ""
|
|||||||
echo -e "${MUTED}OpenCode includes free models, to start:${NC}"
|
echo -e "${MUTED}OpenCode includes free models, to start:${NC}"
|
||||||
echo -e ""
|
echo -e ""
|
||||||
echo -e "cd <project> ${MUTED}# Open directory${NC}"
|
echo -e "cd <project> ${MUTED}# Open directory${NC}"
|
||||||
echo -e "opencode2 ${MUTED}# Run command${NC}"
|
echo -e "opencode ${MUTED}# Run command${NC}"
|
||||||
echo -e ""
|
echo -e ""
|
||||||
echo -e "${MUTED}For more information visit ${NC}https://opencode.ai/v2/docs"
|
echo -e "${MUTED}For more information visit ${NC}https://opencode.ai/docs"
|
||||||
echo -e ""
|
echo -e ""
|
||||||
echo -e ""
|
echo -e ""
|
||||||
|
|||||||
+1
-2
@@ -171,7 +171,6 @@
|
|||||||
"@pierre/trees@1.0.0-beta.4": "patches/@pierre%2Ftrees@1.0.0-beta.4.patch",
|
"@pierre/trees@1.0.0-beta.4": "patches/@pierre%2Ftrees@1.0.0-beta.4.patch",
|
||||||
"@modelcontextprotocol/sdk@1.29.0": "patches/@modelcontextprotocol%2Fsdk@1.29.0.patch",
|
"@modelcontextprotocol/sdk@1.29.0": "patches/@modelcontextprotocol%2Fsdk@1.29.0.patch",
|
||||||
"effect@4.0.0-beta.101": "patches/effect@4.0.0-beta.101.patch",
|
"effect@4.0.0-beta.101": "patches/effect@4.0.0-beta.101.patch",
|
||||||
"@tanstack/virtual-core@3.17.3": "patches/@tanstack%2Fvirtual-core@3.17.3.patch",
|
"@tanstack/virtual-core@3.17.3": "patches/@tanstack%2Fvirtual-core@3.17.3.patch"
|
||||||
"@ff-labs/fff-bun@0.10.1": "patches/@ff-labs%2Ffff-bun@0.10.1.patch"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
//
|
//
|
||||||
// Manual `cache: CacheHint` placements on individual parts are preserved and
|
// Manual `cache: CacheHint` placements on individual parts are preserved and
|
||||||
// count against the four-breakpoint budget; auto only fills remaining slots.
|
// count against the four-breakpoint budget; auto only fills remaining slots.
|
||||||
import { CacheHint, type CachePolicy, type CachePolicyObject } from "./schema/options.js"
|
import { CacheHint, type CachePolicy, type CachePolicyObject } from "./schema/options"
|
||||||
import { LLMRequest, Message, ToolDefinition, type ContentPart } from "./schema/messages.js"
|
import { LLMRequest, Message, ToolDefinition, type ContentPart } from "./schema/messages"
|
||||||
|
|
||||||
const AUTO: CachePolicyObject = {
|
const AUTO: CachePolicyObject = {
|
||||||
tools: true,
|
tools: true,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Context, Effect, Layer } from "effect"
|
import { Context, Effect, Layer } from "effect"
|
||||||
import { RequestExecutor } from "./route/executor.js"
|
import { RequestExecutor } from "./route/executor"
|
||||||
import type { ImageOptions, ImageRequest, ImageRequestFor, ImageResponse } from "./image.js"
|
import type { ImageOptions, ImageRequest, ImageRequestFor, ImageResponse } from "./image"
|
||||||
import type { AIError } from "./schema/index.js"
|
import type { AIError } from "./schema"
|
||||||
|
|
||||||
export type Execute = RequestExecutor.Interface["execute"]
|
export type Execute = RequestExecutor.Interface["execute"]
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,6 @@
|
|||||||
import { Effect, Schema } from "effect"
|
import { Effect, Schema } from "effect"
|
||||||
import {
|
import { HttpOptions, InvalidRequestReason, AIError, ModelID, ProviderID, ProviderMetadata, Usage } from "./schema"
|
||||||
HttpOptions,
|
import { ImageClient, Service, type Execute as ImageExecute } from "./image-client"
|
||||||
InvalidRequestReason,
|
|
||||||
AIError,
|
|
||||||
ModelID,
|
|
||||||
ProviderID,
|
|
||||||
ProviderMetadata,
|
|
||||||
Usage,
|
|
||||||
} from "./schema/index.js"
|
|
||||||
import { ImageClient, Service, type Execute as ImageExecute } from "./image-client.js"
|
|
||||||
|
|
||||||
export interface ImageRoute<Options extends ImageOptions = ImageOptions> {
|
export interface ImageRoute<Options extends ImageOptions = ImageOptions> {
|
||||||
readonly id: string
|
readonly id: string
|
||||||
|
|||||||
+18
-21
@@ -1,22 +1,22 @@
|
|||||||
export { LLMClient } from "./route/client.js"
|
export { LLMClient } from "./route/client"
|
||||||
export { ImageClient } from "./image-client.js"
|
export { ImageClient } from "./image-client"
|
||||||
export { Auth } from "./route/auth.js"
|
export { Auth } from "./route/auth"
|
||||||
export { Provider } from "./provider.js"
|
export { Provider } from "./provider"
|
||||||
export { ProviderPackage } from "./provider-package.js"
|
export { ProviderPackage } from "./provider-package"
|
||||||
export { isContextOverflow, isContextOverflowFailure } from "./provider-error.js"
|
export { isContextOverflow, isContextOverflowFailure } from "./provider-error"
|
||||||
export type {
|
export type {
|
||||||
RouteLanguageModelInput,
|
RouteLanguageModelInput,
|
||||||
RouteRoutedLanguageModelInput,
|
RouteRoutedLanguageModelInput,
|
||||||
Interface as LLMClientShape,
|
Interface as LLMClientShape,
|
||||||
Service as LLMClientService,
|
Service as LLMClientService,
|
||||||
} from "./route/client.js"
|
} from "./route/client"
|
||||||
export * from "./schema/index.js"
|
export * from "./schema"
|
||||||
export { GeneratedImage, ImageInput, ImageInputSchema, ImageModel, ImageRequest, ImageResponse } from "./image.js"
|
export { GeneratedImage, ImageInput, ImageInputSchema, ImageModel, ImageRequest, ImageResponse } from "./image"
|
||||||
export type { ImageModelOptions, ImageOptions, ImageRequestFor, ImageRequestInput, ImageRoute } from "./image.js"
|
export type { ImageModelOptions, ImageOptions, ImageRequestFor, ImageRequestInput, ImageRoute } from "./image"
|
||||||
export { Image } from "./image.js"
|
export { Image } from "./image"
|
||||||
export { Tool, ToolFailure, toDefinitions } from "./tool.js"
|
export { Tool, ToolFailure, toDefinitions } from "./tool"
|
||||||
export { ToolRuntime } from "./tool-runtime.js"
|
export { ToolRuntime } from "./tool-runtime"
|
||||||
export type { DispatchResult as ToolDispatchResult, ToolSettlement } from "./tool-runtime.js"
|
export type { DispatchResult as ToolDispatchResult, ToolSettlement } from "./tool-runtime"
|
||||||
export type {
|
export type {
|
||||||
AnyExecutableTool,
|
AnyExecutableTool,
|
||||||
AnyTool,
|
AnyTool,
|
||||||
@@ -29,14 +29,11 @@ export type {
|
|||||||
Tools,
|
Tools,
|
||||||
ToolSchema,
|
ToolSchema,
|
||||||
ToolToModelOutput,
|
ToolToModelOutput,
|
||||||
} from "./tool.js"
|
} from "./tool"
|
||||||
export * as LLM from "./llm.js"
|
export * as LLM from "./llm"
|
||||||
export type {
|
export type {
|
||||||
Definition as ProviderDefinition,
|
Definition as ProviderDefinition,
|
||||||
LanguageModelFactory as ProviderLanguageModelFactory,
|
LanguageModelFactory as ProviderLanguageModelFactory,
|
||||||
LanguageModelOptions as ProviderLanguageModelOptions,
|
LanguageModelOptions as ProviderLanguageModelOptions,
|
||||||
} from "./provider.js"
|
} from "./provider"
|
||||||
export type {
|
export type { Definition as ProviderPackageDefinition, Settings as ProviderPackageSettings } from "./provider-package"
|
||||||
Definition as ProviderPackageDefinition,
|
|
||||||
Settings as ProviderPackageSettings,
|
|
||||||
} from "./provider-package.js"
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Effect, JsonSchema, Schema } from "effect"
|
import { Effect, JsonSchema, Schema } from "effect"
|
||||||
import { LLMClient, Service } from "./route/client.js"
|
import { LLMClient, Service } from "./route/client"
|
||||||
import {
|
import {
|
||||||
GenerationOptions,
|
GenerationOptions,
|
||||||
HttpOptions,
|
HttpOptions,
|
||||||
@@ -15,8 +15,8 @@ import {
|
|||||||
ToolDefinition,
|
ToolDefinition,
|
||||||
type ContentPart,
|
type ContentPart,
|
||||||
type LanguageModelProviderOptions,
|
type LanguageModelProviderOptions,
|
||||||
} from "./schema/index.js"
|
} from "./schema"
|
||||||
import { make as makeTool, toDefinitions, type ToolSchema } from "./tool.js"
|
import { make as makeTool, toDefinitions, type ToolSchema } from "./tool"
|
||||||
|
|
||||||
/** Input accepted by `LLM.request`, normalized into the canonical `LLMRequest` class. */
|
/** Input accepted by `LLM.request`, normalized into the canonical `LLMRequest` class. */
|
||||||
export type RequestInput<SelectedLanguageModel extends LanguageModel = LanguageModel> = Omit<
|
export type RequestInput<SelectedLanguageModel extends LanguageModel = LanguageModel> = Omit<
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
export * from "./protocols/index.js"
|
export * from "./protocols/index"
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { Effect, Schema } from "effect"
|
import { Effect, Schema } from "effect"
|
||||||
import { Tool } from "@opencode-ai/schema/tool"
|
import { Tool } from "@opencode-ai/schema/tool"
|
||||||
import { Route } from "../route/client.js"
|
import { Route } from "../route/client"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { Framing } from "../route/framing.js"
|
import { Framing } from "../route/framing"
|
||||||
import { Protocol } from "../route/protocol.js"
|
import { Protocol } from "../route/protocol"
|
||||||
import {
|
import {
|
||||||
AIError,
|
AIError,
|
||||||
LLMEvent,
|
LLMEvent,
|
||||||
@@ -21,13 +21,13 @@ import {
|
|||||||
type ToolCallPart,
|
type ToolCallPart,
|
||||||
type ToolDefinition,
|
type ToolDefinition,
|
||||||
type ToolResultPart,
|
type ToolResultPart,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
import { JsonObject, optionalArray, optionalNull, ProviderShared } from "./shared.js"
|
import { JsonObject, optionalArray, optionalNull, ProviderShared } from "./shared"
|
||||||
import { classifyProviderFailure } from "../provider-error.js"
|
import { classifyProviderFailure } from "../provider-error"
|
||||||
import * as Cache from "./utils/cache.js"
|
import * as Cache from "./utils/cache"
|
||||||
import { Lifecycle } from "./utils/lifecycle.js"
|
import { Lifecycle } from "./utils/lifecycle"
|
||||||
import { ToolSchemaProjection } from "./utils/tool-schema.js"
|
import { ToolSchemaProjection } from "./utils/tool-schema"
|
||||||
import { ToolStream } from "./utils/tool-stream.js"
|
import { ToolStream } from "./utils/tool-stream"
|
||||||
|
|
||||||
const ADAPTER = "anthropic-messages"
|
const ADAPTER = "anthropic-messages"
|
||||||
const MEDIA_MIMES = new Set<string>([...ProviderShared.IMAGE_MIMES, ...ProviderShared.PDF_MIMES])
|
const MEDIA_MIMES = new Set<string>([...ProviderShared.IMAGE_MIMES, ...ProviderShared.PDF_MIMES])
|
||||||
@@ -1029,4 +1029,4 @@ export const route = Route.make({
|
|||||||
headers: () => ({ "anthropic-version": "2023-06-01" }),
|
headers: () => ({ "anthropic-version": "2023-06-01" }),
|
||||||
})
|
})
|
||||||
|
|
||||||
export * as AnthropicMessages from "./anthropic-messages.js"
|
export * as AnthropicMessages from "./anthropic-messages"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Effect, Schema } from "effect"
|
import { Effect, Schema } from "effect"
|
||||||
import { Route } from "../route/client.js"
|
import { Route } from "../route/client"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { Protocol } from "../route/protocol.js"
|
import { Protocol } from "../route/protocol"
|
||||||
import {
|
import {
|
||||||
AIError,
|
AIError,
|
||||||
LLMEvent,
|
LLMEvent,
|
||||||
@@ -17,20 +17,20 @@ import {
|
|||||||
type ToolCallPart,
|
type ToolCallPart,
|
||||||
type ToolDefinition,
|
type ToolDefinition,
|
||||||
type ToolResultPart,
|
type ToolResultPart,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
import { BedrockEventStream } from "./bedrock-event-stream.js"
|
import { BedrockEventStream } from "./bedrock-event-stream"
|
||||||
import { classifyProviderFailure } from "../provider-error.js"
|
import { classifyProviderFailure } from "../provider-error"
|
||||||
import { JsonObject, optionalArray, ProviderShared } from "./shared.js"
|
import { JsonObject, optionalArray, ProviderShared } from "./shared"
|
||||||
import { BedrockAuth } from "./utils/bedrock-auth.js"
|
import { BedrockAuth } from "./utils/bedrock-auth"
|
||||||
import { BedrockCache } from "./utils/bedrock-cache.js"
|
import { BedrockCache } from "./utils/bedrock-cache"
|
||||||
import { BedrockMedia } from "./utils/bedrock-media.js"
|
import { BedrockMedia } from "./utils/bedrock-media"
|
||||||
import { Lifecycle } from "./utils/lifecycle.js"
|
import { Lifecycle } from "./utils/lifecycle"
|
||||||
import { ToolSchemaProjection } from "./utils/tool-schema.js"
|
import { ToolSchemaProjection } from "./utils/tool-schema"
|
||||||
import { ToolStream } from "./utils/tool-stream.js"
|
import { ToolStream } from "./utils/tool-stream"
|
||||||
|
|
||||||
const ADAPTER = "bedrock-converse"
|
const ADAPTER = "bedrock-converse"
|
||||||
|
|
||||||
export type { Credentials as BedrockCredentials } from "./utils/bedrock-auth.js"
|
export type { Credentials as BedrockCredentials } from "./utils/bedrock-auth"
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// Request Body Schema
|
// Request Body Schema
|
||||||
@@ -737,4 +737,4 @@ export const route = Route.make({
|
|||||||
|
|
||||||
export const sigV4Auth = BedrockAuth.sigV4
|
export const sigV4Auth = BedrockAuth.sigV4
|
||||||
|
|
||||||
export * as BedrockConverse from "./bedrock-converse.js"
|
export * as BedrockConverse from "./bedrock-converse"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { EventStreamCodec } from "@smithy/eventstream-codec"
|
import { EventStreamCodec } from "@smithy/eventstream-codec"
|
||||||
import { fromUtf8, toUtf8 } from "@smithy/util-utf8"
|
import { fromUtf8, toUtf8 } from "@smithy/util-utf8"
|
||||||
import { Effect, Stream } from "effect"
|
import { Effect, Stream } from "effect"
|
||||||
import { Framing } from "../route/framing.js"
|
import { Framing } from "../route/framing"
|
||||||
import { ProviderShared } from "./shared.js"
|
import { ProviderShared } from "./shared"
|
||||||
|
|
||||||
// Bedrock streams responses using the AWS event stream binary protocol — each
|
// Bedrock streams responses using the AWS event stream binary protocol — each
|
||||||
// frame is `[length:4][headers-length:4][prelude-crc:4][headers][payload][crc:4]`.
|
// frame is `[length:4][headers-length:4][prelude-crc:4][headers][payload][crc:4]`.
|
||||||
@@ -98,4 +98,4 @@ export const framing = (route: string): Framing.Definition<object> => ({
|
|||||||
frame: (bytes) => bytes.pipe(Stream.mapAccumEffect(() => initialFrameBuffer, consumeFrames(route))),
|
frame: (bytes) => bytes.pipe(Stream.mapAccumEffect(() => initialFrameBuffer, consumeFrames(route))),
|
||||||
})
|
})
|
||||||
|
|
||||||
export * as BedrockEventStream from "./bedrock-event-stream.js"
|
export * as BedrockEventStream from "./bedrock-event-stream"
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { Effect, Schema } from "effect"
|
import { Effect, Schema } from "effect"
|
||||||
import { Tool } from "@opencode-ai/schema/tool"
|
import { Tool } from "@opencode-ai/schema/tool"
|
||||||
import { Route } from "../route/client.js"
|
import { Route } from "../route/client"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { Framing } from "../route/framing.js"
|
import { Framing } from "../route/framing"
|
||||||
import { Protocol } from "../route/protocol.js"
|
import { Protocol } from "../route/protocol"
|
||||||
import {
|
import {
|
||||||
LLMEvent,
|
LLMEvent,
|
||||||
Usage,
|
Usage,
|
||||||
@@ -17,11 +17,11 @@ import {
|
|||||||
type TextPart,
|
type TextPart,
|
||||||
type ToolCallPart,
|
type ToolCallPart,
|
||||||
type ToolDefinition,
|
type ToolDefinition,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
import { JsonObject, optionalArray, ProviderShared } from "./shared.js"
|
import { JsonObject, optionalArray, ProviderShared } from "./shared"
|
||||||
import { GeminiToolSchema } from "./utils/gemini-tool-schema.js"
|
import { GeminiToolSchema } from "./utils/gemini-tool-schema"
|
||||||
import { Lifecycle } from "./utils/lifecycle.js"
|
import { Lifecycle } from "./utils/lifecycle"
|
||||||
import { ToolSchemaProjection } from "./utils/tool-schema.js"
|
import { ToolSchemaProjection } from "./utils/tool-schema"
|
||||||
|
|
||||||
const ADAPTER = "gemini"
|
const ADAPTER = "gemini"
|
||||||
const MEDIA_MIMES = new Set<string>(ProviderShared.MEDIA_MIMES)
|
const MEDIA_MIMES = new Set<string>(ProviderShared.MEDIA_MIMES)
|
||||||
@@ -643,4 +643,4 @@ export const route = Route.make({
|
|||||||
framing: Framing.sse,
|
framing: Framing.sse,
|
||||||
})
|
})
|
||||||
|
|
||||||
export * as Gemini from "./gemini.js"
|
export * as Gemini from "./gemini"
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import {
|
|||||||
type ImageInput,
|
type ImageInput,
|
||||||
type ImageRequestFor,
|
type ImageRequestFor,
|
||||||
type ImageRoute,
|
type ImageRoute,
|
||||||
} from "../image.js"
|
} from "../image"
|
||||||
import { Auth, type Definition as AuthDefinition } from "../route/auth.js"
|
import { Auth, type Definition as AuthDefinition } from "../route/auth"
|
||||||
import {
|
import {
|
||||||
InvalidProviderOutputReason,
|
InvalidProviderOutputReason,
|
||||||
AIError,
|
AIError,
|
||||||
@@ -17,9 +17,9 @@ import {
|
|||||||
mergeJsonRecords,
|
mergeJsonRecords,
|
||||||
type HttpOptions,
|
type HttpOptions,
|
||||||
type ProviderMetadata,
|
type ProviderMetadata,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
import { ProviderShared } from "./shared.js"
|
import { ProviderShared } from "./shared"
|
||||||
import { ImageInputs } from "./utils/image-input.js"
|
import { ImageInputs } from "./utils/image-input"
|
||||||
|
|
||||||
const ADAPTER = "google-images"
|
const ADAPTER = "google-images"
|
||||||
export const DEFAULT_BASE_URL = "https://generativelanguage.googleapis.com/v1beta"
|
export const DEFAULT_BASE_URL = "https://generativelanguage.googleapis.com/v1beta"
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
export * as AnthropicMessages from "./anthropic-messages.js"
|
export * as AnthropicMessages from "./anthropic-messages"
|
||||||
export * as BedrockConverse from "./bedrock-converse.js"
|
export * as BedrockConverse from "./bedrock-converse"
|
||||||
export * as Gemini from "./gemini.js"
|
export * as Gemini from "./gemini"
|
||||||
export * as OpenAIChat from "./openai-chat.js"
|
export * as OpenAIChat from "./openai-chat"
|
||||||
export * as OpenAIImages from "./openai-images.js"
|
export * as OpenAIImages from "./openai-images"
|
||||||
export * as OpenAICompatibleChat from "./openai-compatible-chat.js"
|
export * as OpenAICompatibleChat from "./openai-compatible-chat"
|
||||||
export * as OpenAICompatibleResponses from "./openai-compatible-responses.js"
|
export * as OpenAICompatibleResponses from "./openai-compatible-responses"
|
||||||
export * as OpenAIResponses from "./openai-responses.js"
|
export * as OpenAIResponses from "./openai-responses"
|
||||||
export * as OpenResponses from "./open-responses.js"
|
export * as OpenResponses from "./open-responses"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Effect, Schema } from "effect"
|
import { Effect, Schema } from "effect"
|
||||||
import type { Content } from "@opencode-ai/schema/tool"
|
import type { Content } from "@opencode-ai/schema/tool"
|
||||||
import { HttpTransport } from "../route/transport/index.js"
|
import { HttpTransport } from "../route/transport"
|
||||||
import { Protocol } from "../route/protocol.js"
|
import { Protocol } from "../route/protocol"
|
||||||
import {
|
import {
|
||||||
AIError,
|
AIError,
|
||||||
LLMEvent,
|
LLMEvent,
|
||||||
@@ -16,13 +16,13 @@ import {
|
|||||||
type ToolCallPart,
|
type ToolCallPart,
|
||||||
type ToolDefinition,
|
type ToolDefinition,
|
||||||
type ToolResultPart,
|
type ToolResultPart,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
import { JsonObject, optionalArray, optionalNull, ProviderShared } from "./shared.js"
|
import { JsonObject, optionalArray, optionalNull, ProviderShared } from "./shared"
|
||||||
import { classifyProviderFailure } from "../provider-error.js"
|
import { classifyProviderFailure } from "../provider-error"
|
||||||
import { OpenResponsesOptions } from "./utils/open-responses-options.js"
|
import { OpenResponsesOptions } from "./utils/open-responses-options"
|
||||||
import { Lifecycle } from "./utils/lifecycle.js"
|
import { Lifecycle } from "./utils/lifecycle"
|
||||||
import { ToolSchemaProjection } from "./utils/tool-schema.js"
|
import { ToolSchemaProjection } from "./utils/tool-schema"
|
||||||
import { ToolStream } from "./utils/tool-stream.js"
|
import { ToolStream } from "./utils/tool-stream"
|
||||||
|
|
||||||
const ADAPTER = "open-responses"
|
const ADAPTER = "open-responses"
|
||||||
const NAME = "Open Responses"
|
const NAME = "Open Responses"
|
||||||
@@ -1061,4 +1061,4 @@ export const protocol = Protocol.make({
|
|||||||
|
|
||||||
export const httpTransport = HttpTransport.sseJson.with<OpenResponsesBody>()
|
export const httpTransport = HttpTransport.sseJson.with<OpenResponsesBody>()
|
||||||
|
|
||||||
export * as OpenResponses from "./open-responses.js"
|
export * as OpenResponses from "./open-responses"
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { Effect, Schema } from "effect"
|
import { Effect, Schema } from "effect"
|
||||||
import { Tool } from "@opencode-ai/schema/tool"
|
import { Tool } from "@opencode-ai/schema/tool"
|
||||||
import { Route } from "../route/client.js"
|
import { Route } from "../route/client"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { HttpTransport } from "../route/transport/index.js"
|
import { HttpTransport } from "../route/transport"
|
||||||
import { Protocol } from "../route/protocol.js"
|
import { Protocol } from "../route/protocol"
|
||||||
import {
|
import {
|
||||||
AIError,
|
AIError,
|
||||||
LLMEvent,
|
LLMEvent,
|
||||||
@@ -19,13 +19,13 @@ import {
|
|||||||
type TextPart,
|
type TextPart,
|
||||||
type ToolCallPart,
|
type ToolCallPart,
|
||||||
type ToolDefinition,
|
type ToolDefinition,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
import { classifyProviderFailure } from "../provider-error.js"
|
import { classifyProviderFailure } from "../provider-error"
|
||||||
import { isRecord, JsonObject, optionalArray, optionalNull, ProviderShared } from "./shared.js"
|
import { isRecord, JsonObject, optionalArray, optionalNull, ProviderShared } from "./shared"
|
||||||
import { OpenAIOptions } from "./utils/openai-options.js"
|
import { OpenAIOptions } from "./utils/openai-options"
|
||||||
import { Lifecycle } from "./utils/lifecycle.js"
|
import { Lifecycle } from "./utils/lifecycle"
|
||||||
import { ToolSchemaProjection } from "./utils/tool-schema.js"
|
import { ToolSchemaProjection } from "./utils/tool-schema"
|
||||||
import { ToolStream } from "./utils/tool-stream.js"
|
import { ToolStream } from "./utils/tool-stream"
|
||||||
|
|
||||||
const ADAPTER = "openai-chat"
|
const ADAPTER = "openai-chat"
|
||||||
const IMAGE_MIMES = new Set<string>(ProviderShared.IMAGE_MIMES)
|
const IMAGE_MIMES = new Set<string>(ProviderShared.IMAGE_MIMES)
|
||||||
@@ -884,4 +884,4 @@ export const route = Route.make({
|
|||||||
transport: httpTransport,
|
transport: httpTransport,
|
||||||
})
|
})
|
||||||
|
|
||||||
export * as OpenAIChat from "./openai-chat.js"
|
export * as OpenAIChat from "./openai-chat"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Route, type RouteRoutedLanguageModelInput } from "../route/client.js"
|
import { Route, type RouteRoutedLanguageModelInput } from "../route/client"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { Framing } from "../route/framing.js"
|
import { Framing } from "../route/framing"
|
||||||
import * as OpenAIChat from "./openai-chat.js"
|
import * as OpenAIChat from "./openai-chat"
|
||||||
|
|
||||||
const ADAPTER = "openai-compatible-chat"
|
const ADAPTER = "openai-compatible-chat"
|
||||||
|
|
||||||
@@ -22,4 +22,4 @@ export const route = Route.make({
|
|||||||
framing: Framing.sse,
|
framing: Framing.sse,
|
||||||
})
|
})
|
||||||
|
|
||||||
export * as OpenAICompatibleChat from "./openai-compatible-chat.js"
|
export * as OpenAICompatibleChat from "./openai-compatible-chat"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Route, type RouteRoutedLanguageModelInput } from "../route/client.js"
|
import { Route, type RouteRoutedLanguageModelInput } from "../route/client"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { OpenResponses } from "./open-responses.js"
|
import { OpenResponses } from "./open-responses"
|
||||||
|
|
||||||
const ADAPTER = "openai-compatible-responses"
|
const ADAPTER = "openai-compatible-responses"
|
||||||
|
|
||||||
@@ -19,4 +19,4 @@ export const route = Route.make({
|
|||||||
transport: OpenResponses.httpTransport,
|
transport: OpenResponses.httpTransport,
|
||||||
})
|
})
|
||||||
|
|
||||||
export * as OpenAICompatibleResponses from "./openai-compatible-responses.js"
|
export * as OpenAICompatibleResponses from "./openai-compatible-responses"
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import {
|
|||||||
type ImageInput,
|
type ImageInput,
|
||||||
type ImageRequestFor,
|
type ImageRequestFor,
|
||||||
type ImageRoute,
|
type ImageRoute,
|
||||||
} from "../image.js"
|
} from "../image"
|
||||||
import { Auth, type Definition as AuthDefinition } from "../route/auth.js"
|
import { Auth, type Definition as AuthDefinition } from "../route/auth"
|
||||||
import {
|
import {
|
||||||
InvalidProviderOutputReason,
|
InvalidProviderOutputReason,
|
||||||
AIError,
|
AIError,
|
||||||
@@ -16,10 +16,10 @@ import {
|
|||||||
mergeHttpOptions,
|
mergeHttpOptions,
|
||||||
mergeJsonRecords,
|
mergeJsonRecords,
|
||||||
type HttpOptions,
|
type HttpOptions,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
import { ProviderShared } from "./shared.js"
|
import { ProviderShared } from "./shared"
|
||||||
import { ImageInputs } from "./utils/image-input.js"
|
import { ImageInputs } from "./utils/image-input"
|
||||||
import { OpenAIImage } from "./utils/openai-image.js"
|
import { OpenAIImage } from "./utils/openai-image"
|
||||||
|
|
||||||
const ADAPTER = "openai-images"
|
const ADAPTER = "openai-images"
|
||||||
export const DEFAULT_BASE_URL = "https://api.openai.com/v1"
|
export const DEFAULT_BASE_URL = "https://api.openai.com/v1"
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
import { Effect, Encoding, Schema } from "effect"
|
import { Effect, Encoding, Schema } from "effect"
|
||||||
import { Route } from "../route/client.js"
|
import { Route } from "../route/client"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { Protocol } from "../route/protocol.js"
|
import { Protocol } from "../route/protocol"
|
||||||
import { HttpTransport, WebSocketTransport } from "../route/transport/index.js"
|
import { HttpTransport, WebSocketTransport } from "../route/transport"
|
||||||
import { LLMEvent, LLMRequest, type JsonSchema, type ToolDefinition } from "../schema/index.js"
|
import { LLMEvent, LLMRequest, type JsonSchema, type ToolDefinition } from "../schema"
|
||||||
import { OpenResponses } from "./open-responses.js"
|
import { OpenResponses } from "./open-responses"
|
||||||
import { optionalArray, ProviderShared } from "./shared.js"
|
import { optionalArray, ProviderShared } from "./shared"
|
||||||
import { Lifecycle } from "./utils/lifecycle.js"
|
import { Lifecycle } from "./utils/lifecycle"
|
||||||
import { OpenAIImage } from "./utils/openai-image.js"
|
import { OpenAIImage } from "./utils/openai-image"
|
||||||
import { ToolSchemaProjection } from "./utils/tool-schema.js"
|
import { ToolSchemaProjection } from "./utils/tool-schema"
|
||||||
|
|
||||||
const ADAPTER = "openai-responses"
|
const ADAPTER = "openai-responses"
|
||||||
const NAME = "OpenAI Responses"
|
const NAME = "OpenAI Responses"
|
||||||
@@ -290,4 +290,4 @@ export const webSocketRoute = Route.make({
|
|||||||
defaults: { providerOptions: { openai: { store: false } } },
|
defaults: { providerOptions: { openai: { store: false } } },
|
||||||
})
|
})
|
||||||
|
|
||||||
export * as OpenAIResponses from "./openai-responses.js"
|
export * as OpenAIResponses from "./openai-responses"
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import {
|
|||||||
type MediaPart,
|
type MediaPart,
|
||||||
type TextPart,
|
type TextPart,
|
||||||
type ToolResultPart,
|
type ToolResultPart,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
import { isRecord } from "../utils/record.js"
|
import { isRecord } from "../utils/record"
|
||||||
export { isRecord }
|
export { isRecord }
|
||||||
|
|
||||||
export const Json = Schema.fromJsonString(Schema.Unknown)
|
export const Json = Schema.fromJsonString(Schema.Unknown)
|
||||||
@@ -324,4 +324,4 @@ export const jsonPost = (input: { readonly url: string; readonly body: string; r
|
|||||||
HttpClientRequest.bodyText(input.body, "application/json"),
|
HttpClientRequest.bodyText(input.body, "application/json"),
|
||||||
)
|
)
|
||||||
|
|
||||||
export * as ProviderShared from "./shared.js"
|
export * as ProviderShared from "./shared"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { AwsV4Signer } from "aws4fetch"
|
import { AwsV4Signer } from "aws4fetch"
|
||||||
import { Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
import { Headers } from "effect/unstable/http"
|
import { Headers } from "effect/unstable/http"
|
||||||
import { Auth, type AuthInput } from "../../route/auth.js"
|
import { Auth, type AuthInput } from "../../route/auth"
|
||||||
import { ProviderShared } from "../shared.js"
|
import { ProviderShared } from "../shared"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AWS credentials for SigV4 signing. Bedrock also supports Bearer API key auth,
|
* AWS credentials for SigV4 signing. Bedrock also supports Bearer API key auth,
|
||||||
@@ -74,4 +74,4 @@ export const sigV4 = (
|
|||||||
/** Bedrock route auth defaults to SigV4 and expects credentials from route configuration. */
|
/** Bedrock route auth defaults to SigV4 and expects credentials from route configuration. */
|
||||||
export const auth = sigV4(undefined)
|
export const auth = sigV4(undefined)
|
||||||
|
|
||||||
export * as BedrockAuth from "./bedrock-auth.js"
|
export * as BedrockAuth from "./bedrock-auth"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Schema } from "effect"
|
import { Schema } from "effect"
|
||||||
import type { CacheHint } from "../../schema/index.js"
|
import type { CacheHint } from "../../schema"
|
||||||
import { newBreakpoints, ttlBucket, type Breakpoints } from "./cache.js"
|
import { newBreakpoints, ttlBucket, type Breakpoints } from "./cache"
|
||||||
|
|
||||||
// Bedrock cache markers are positional: emit a `cachePoint` block immediately
|
// Bedrock cache markers are positional: emit a `cachePoint` block immediately
|
||||||
// after the content the caller wants treated as a cacheable prefix. Bedrock
|
// after the content the caller wants treated as a cacheable prefix. Bedrock
|
||||||
@@ -18,7 +18,7 @@ export type CachePointBlock = Schema.Schema.Type<typeof CachePointBlock>
|
|||||||
// budget is respected across `system`, `messages`, and `tools`.
|
// budget is respected across `system`, `messages`, and `tools`.
|
||||||
export const BEDROCK_BREAKPOINT_CAP = 4
|
export const BEDROCK_BREAKPOINT_CAP = 4
|
||||||
|
|
||||||
export type { Breakpoints } from "./cache.js"
|
export type { Breakpoints } from "./cache"
|
||||||
export const breakpoints = () => newBreakpoints(BEDROCK_BREAKPOINT_CAP)
|
export const breakpoints = () => newBreakpoints(BEDROCK_BREAKPOINT_CAP)
|
||||||
|
|
||||||
const DEFAULT_5M: CachePointBlock = { cachePoint: { type: "default" } }
|
const DEFAULT_5M: CachePointBlock = { cachePoint: { type: "default" } }
|
||||||
@@ -34,4 +34,4 @@ export const block = (breakpoints: Breakpoints, cache: CacheHint | undefined): C
|
|||||||
return ttlBucket(cache.ttlSeconds) === "1h" ? DEFAULT_1H : DEFAULT_5M
|
return ttlBucket(cache.ttlSeconds) === "1h" ? DEFAULT_1H : DEFAULT_5M
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as BedrockCache from "./bedrock-cache.js"
|
export * as BedrockCache from "./bedrock-cache"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Effect, Schema } from "effect"
|
import { Effect, Schema } from "effect"
|
||||||
import type { MediaPart } from "../../schema/index.js"
|
import type { MediaPart } from "../../schema"
|
||||||
import { ProviderShared } from "../shared.js"
|
import { ProviderShared } from "../shared"
|
||||||
|
|
||||||
// Bedrock Converse accepts image `format` as the file extension and
|
// Bedrock Converse accepts image `format` as the file extension and
|
||||||
// `source.bytes` as base64 in the JSON wire format.
|
// `source.bytes` as base64 in the JSON wire format.
|
||||||
@@ -89,4 +89,4 @@ export const lower = Effect.fn("BedrockMedia.lower")(function* (part: MediaPart)
|
|||||||
return yield* ProviderShared.invalidRequest(`Bedrock Converse does not support media type ${part.mediaType}`)
|
return yield* ProviderShared.invalidRequest(`Bedrock Converse does not support media type ${part.mediaType}`)
|
||||||
})
|
})
|
||||||
|
|
||||||
export * as BedrockMedia from "./bedrock-media.js"
|
export * as BedrockMedia from "./bedrock-media"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { isRecord } from "../../utils/record.js"
|
import { isRecord } from "../../utils/record"
|
||||||
|
|
||||||
// Gemini accepts a JSON Schema-like dialect for tool parameters, but rejects a
|
// Gemini accepts a JSON Schema-like dialect for tool parameters, but rejects a
|
||||||
// handful of common JSON Schema shapes. Keep this projection isolated so the
|
// handful of common JSON Schema shapes. Keep this projection isolated so the
|
||||||
@@ -116,4 +116,4 @@ const projectNode = (schema: unknown, nested = false): Record<string, unknown> |
|
|||||||
|
|
||||||
export const convert = (schema: unknown) => projectNode(sanitizeNode(schema))
|
export const convert = (schema: unknown) => projectNode(sanitizeNode(schema))
|
||||||
|
|
||||||
export * as GeminiToolSchema from "./gemini-tool-schema.js"
|
export * as GeminiToolSchema from "./gemini-tool-schema"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Effect, Encoding } from "effect"
|
import { Effect, Encoding } from "effect"
|
||||||
import type { ImageInput } from "../../image.js"
|
import type { ImageInput } from "../../image"
|
||||||
import { InvalidRequestReason, AIError } from "../../schema/index.js"
|
import { InvalidRequestReason, AIError } from "../../schema"
|
||||||
|
|
||||||
const invalid = (module: string, message: string) =>
|
const invalid = (module: string, message: string) =>
|
||||||
new AIError({
|
new AIError({
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { LLMEvent, type FinishReasonDetails, type ProviderMetadata, type Usage } from "../../schema/index.js"
|
import { LLMEvent, type FinishReasonDetails, type ProviderMetadata, type Usage } from "../../schema"
|
||||||
|
|
||||||
export interface State {
|
export interface State {
|
||||||
readonly stepStarted: boolean
|
readonly stepStarted: boolean
|
||||||
@@ -102,4 +102,4 @@ export const finish = (
|
|||||||
return { ...stepped, stepStarted: false }
|
return { ...stepped, stepStarted: false }
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as Lifecycle from "./lifecycle.js"
|
export * as Lifecycle from "./lifecycle"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Schema } from "effect"
|
import { Schema } from "effect"
|
||||||
import { TextVerbosity, type LLMRequest } from "../../schema/index.js"
|
import { TextVerbosity, type LLMRequest } from "../../schema"
|
||||||
|
|
||||||
export const ResponseIncludables = [
|
export const ResponseIncludables = [
|
||||||
"file_search_call.results",
|
"file_search_call.results",
|
||||||
@@ -60,4 +60,4 @@ export const resolve = (request: LLMRequest): Resolved => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as OpenResponsesOptions from "./open-responses-options.js"
|
export * as OpenResponsesOptions from "./open-responses-options"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { ReasoningEfforts } from "../../schema/index.js"
|
import { ReasoningEfforts } from "../../schema"
|
||||||
import { OpenResponsesOptions } from "./open-responses-options.js"
|
import { OpenResponsesOptions } from "./open-responses-options"
|
||||||
|
|
||||||
export const OpenAIReasoningEfforts = ReasoningEfforts
|
export const OpenAIReasoningEfforts = ReasoningEfforts
|
||||||
export type OpenAIReasoningEffort = string
|
export type OpenAIReasoningEffort = string
|
||||||
@@ -20,4 +20,4 @@ export const isReasoningEffort = (effort: unknown): effort is OpenAIReasoningEff
|
|||||||
|
|
||||||
export const resolve = OpenResponsesOptions.resolve
|
export const resolve = OpenResponsesOptions.resolve
|
||||||
|
|
||||||
export * as OpenAIOptions from "./openai-options.js"
|
export * as OpenAIOptions from "./openai-options"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { JsonSchema, LanguageModelToolSchemaCompatibility } from "../../schema/index.js"
|
import type { JsonSchema, LanguageModelToolSchemaCompatibility } from "../../schema"
|
||||||
import { isRecord } from "../../utils/record.js"
|
import { isRecord } from "../../utils/record"
|
||||||
import { GeminiToolSchema } from "./gemini-tool-schema.js"
|
import { GeminiToolSchema } from "./gemini-tool-schema"
|
||||||
|
|
||||||
const removeNullSchemas = (value: unknown): unknown => {
|
const removeNullSchemas = (value: unknown): unknown => {
|
||||||
if (Array.isArray(value)) return value.map(removeNullSchemas)
|
if (Array.isArray(value)) return value.map(removeNullSchemas)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
import { AIError, LLMEvent, type ProviderMetadata, type ToolCall, type ToolInputError } from "../../schema/index.js"
|
import { AIError, LLMEvent, type ProviderMetadata, type ToolCall, type ToolInputError } from "../../schema"
|
||||||
import { eventError, parseToolInput, type ToolAccumulator } from "../shared.js"
|
import { eventError, parseToolInput, type ToolAccumulator } from "../shared"
|
||||||
|
|
||||||
type StreamKey = string | number
|
type StreamKey = string | number
|
||||||
|
|
||||||
@@ -223,4 +223,4 @@ export const finishAll = <K extends StreamKey>(route: string, tools: State<K>) =
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
export * as ToolStream from "./tool-stream.js"
|
export * as ToolStream from "./tool-stream"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Effect, Encoding, Schema } from "effect"
|
import { Effect, Encoding, Schema } from "effect"
|
||||||
import { Headers, HttpClientRequest } from "effect/unstable/http"
|
import { Headers, HttpClientRequest } from "effect/unstable/http"
|
||||||
import { GeneratedImage, ImageModel, ImageResponse, type ImageRequestFor, type ImageRoute } from "../image.js"
|
import { GeneratedImage, ImageModel, ImageResponse, type ImageRequestFor, type ImageRoute } from "../image"
|
||||||
import { Auth, type Definition as AuthDefinition } from "../route/auth.js"
|
import { Auth, type Definition as AuthDefinition } from "../route/auth"
|
||||||
import {
|
import {
|
||||||
InvalidProviderOutputReason,
|
InvalidProviderOutputReason,
|
||||||
AIError,
|
AIError,
|
||||||
@@ -9,9 +9,9 @@ import {
|
|||||||
mergeHttpOptions,
|
mergeHttpOptions,
|
||||||
mergeJsonRecords,
|
mergeJsonRecords,
|
||||||
type HttpOptions,
|
type HttpOptions,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
import { ProviderShared, optionalNull } from "./shared.js"
|
import { ProviderShared, optionalNull } from "./shared"
|
||||||
import { ImageInputs } from "./utils/image-input.js"
|
import { ImageInputs } from "./utils/image-input"
|
||||||
|
|
||||||
const ADAPTER = "xai-images"
|
const ADAPTER = "xai-images"
|
||||||
export const DEFAULT_BASE_URL = "https://api.x.ai/v1"
|
export const DEFAULT_BASE_URL = "https://api.x.ai/v1"
|
||||||
|
|||||||
@@ -1,16 +1,10 @@
|
|||||||
import { Effect, Schema } from "effect"
|
import { Effect, Schema } from "effect"
|
||||||
import { Headers, HttpClientRequest } from "effect/unstable/http"
|
import { Headers, HttpClientRequest } from "effect/unstable/http"
|
||||||
import { GeneratedImage, ImageModel, ImageResponse, type ImageRequestFor, type ImageRoute } from "../image.js"
|
import { GeneratedImage, ImageModel, ImageResponse, type ImageRequestFor, type ImageRoute } from "../image"
|
||||||
import { Auth, type Definition as AuthDefinition } from "../route/auth.js"
|
import { Auth, type Definition as AuthDefinition } from "../route/auth"
|
||||||
import {
|
import { InvalidProviderOutputReason, AIError, mergeHttpOptions, mergeJsonRecords, type HttpOptions } from "../schema"
|
||||||
InvalidProviderOutputReason,
|
import { ProviderShared } from "./shared"
|
||||||
AIError,
|
import { ImageInputs } from "./utils/image-input"
|
||||||
mergeHttpOptions,
|
|
||||||
mergeJsonRecords,
|
|
||||||
type HttpOptions,
|
|
||||||
} from "../schema/index.js"
|
|
||||||
import { ProviderShared } from "./shared.js"
|
|
||||||
import { ImageInputs } from "./utils/image-input.js"
|
|
||||||
|
|
||||||
const ADAPTER = "zai-images"
|
const ADAPTER = "zai-images"
|
||||||
export const DEFAULT_BASE_URL = "https://api.z.ai/api/paas/v4"
|
export const DEFAULT_BASE_URL = "https://api.z.ai/api/paas/v4"
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import {
|
|||||||
type HttpContext,
|
type HttpContext,
|
||||||
type HttpRateLimitDetails,
|
type HttpRateLimitDetails,
|
||||||
type ProviderMetadata,
|
type ProviderMetadata,
|
||||||
} from "./schema/index.js"
|
} from "./schema"
|
||||||
|
|
||||||
const patterns = [
|
const patterns = [
|
||||||
/prompt is too long/i,
|
/prompt is too long/i,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { LanguageModel, ProviderOptions } from "./schema/index.js"
|
import type { LanguageModel, ProviderOptions } from "./schema"
|
||||||
|
|
||||||
export interface Settings extends Readonly<Record<string, unknown>> {
|
export interface Settings extends Readonly<Record<string, unknown>> {
|
||||||
readonly baseURL?: string
|
readonly baseURL?: string
|
||||||
@@ -18,4 +18,4 @@ export interface Definition<
|
|||||||
readonly model: (modelID: string, settings: ProviderSettings) => LanguageModel<Options>
|
readonly model: (modelID: string, settings: ProviderSettings) => LanguageModel<Options>
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as ProviderPackage from "./provider-package.js"
|
export * as ProviderPackage from "./provider-package"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { LanguageModel, ModelID, ProviderID } from "./schema/index.js"
|
import type { LanguageModel, ModelID, ProviderID } from "./schema"
|
||||||
|
|
||||||
export type LanguageModelOptions = Pick<LanguageModel.Input, "defaults" | "compatibility">
|
export type LanguageModelOptions = Pick<LanguageModel.Input, "defaults" | "compatibility">
|
||||||
|
|
||||||
@@ -33,4 +33,4 @@ export const make = <DefinitionType extends DefinitionShape>(
|
|||||||
definition: NoExtraFields<DefinitionType, DefinitionShape>,
|
definition: NoExtraFields<DefinitionType, DefinitionShape>,
|
||||||
) => definition
|
) => definition
|
||||||
|
|
||||||
export * as Provider from "./provider.js"
|
export * as Provider from "./provider"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
export * from "./providers/index.js"
|
export * from "./providers/index"
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import type { Route as RouteDef, RouteDefaultsInput } from "../route/client.js"
|
import type { Route as RouteDef, RouteDefaultsInput } from "../route/client"
|
||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { OpenAIChat } from "../protocols/openai-chat.js"
|
import { OpenAIChat } from "../protocols/openai-chat"
|
||||||
import { OpenAIResponses } from "../protocols/openai-responses.js"
|
import { OpenAIResponses } from "../protocols/openai-responses"
|
||||||
import { BedrockAuth, type Credentials } from "../protocols/utils/bedrock-auth.js"
|
import { BedrockAuth, type Credentials } from "../protocols/utils/bedrock-auth"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import { withOpenAIOptions, type OpenAIProviderOptionsInput } from "./openai-options.js"
|
import { withOpenAIOptions, type OpenAIProviderOptionsInput } from "./openai-options"
|
||||||
|
|
||||||
export const id = ProviderID.make("amazon-bedrock")
|
export const id = ProviderID.make("amazon-bedrock")
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import type { RouteDefaultsInput } from "../route/client.js"
|
import type { RouteDefaultsInput } from "../route/client"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import * as BedrockConverse from "../protocols/bedrock-converse.js"
|
import * as BedrockConverse from "../protocols/bedrock-converse"
|
||||||
import type { BedrockCredentials } from "../protocols/bedrock-converse.js"
|
import type { BedrockCredentials } from "../protocols/bedrock-converse"
|
||||||
|
|
||||||
export const id = ProviderID.make("amazon-bedrock")
|
export const id = ProviderID.make("amazon-bedrock")
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { chatModel as model } from "../amazon-bedrock-mantle.js"
|
export { chatModel as model } from "../amazon-bedrock-mantle"
|
||||||
export type { Settings } from "../amazon-bedrock-mantle.js"
|
export type { Settings } from "../amazon-bedrock-mantle"
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { chatModel as model } from "../../amazon-bedrock-mantle.js"
|
export { chatModel as model } from "../../amazon-bedrock-mantle"
|
||||||
export type { Settings } from "../../amazon-bedrock-mantle.js"
|
export type { Settings } from "../../amazon-bedrock-mantle"
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { responsesModel as model } from "../../amazon-bedrock-mantle.js"
|
export { responsesModel as model } from "../../amazon-bedrock-mantle"
|
||||||
export type { Settings } from "../../amazon-bedrock-mantle.js"
|
export type { Settings } from "../../amazon-bedrock-mantle"
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { AnthropicMessages } from "../protocols/anthropic-messages.js"
|
import { AnthropicMessages } from "../protocols/anthropic-messages"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import type { ProviderAuthOption } from "../route/auth-options.js"
|
import type { ProviderAuthOption } from "../route/auth-options"
|
||||||
import type { RouteDefaultsInput } from "../route/client.js"
|
import type { RouteDefaultsInput } from "../route/client"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
|
|
||||||
export type AnthropicOptionsInput = AnthropicMessages.OptionsInput
|
export type AnthropicOptionsInput = AnthropicMessages.OptionsInput
|
||||||
export type AnthropicProviderOptionsInput = AnthropicMessages.ProviderOptionsInput
|
export type AnthropicProviderOptionsInput = AnthropicMessages.ProviderOptionsInput
|
||||||
@@ -74,4 +74,4 @@ export const model: ProviderPackage.Definition<Settings, AnthropicMessages.Provi
|
|||||||
}).model(modelID)
|
}).model(modelID)
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as AnthropicCompatible from "./anthropic-compatible.js"
|
export * as AnthropicCompatible from "./anthropic-compatible"
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import type { RouteDefaultsInput } from "../route/client.js"
|
import type { RouteDefaultsInput } from "../route/client"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import type { ProviderAuthOption } from "../route/auth-options.js"
|
import type { ProviderAuthOption } from "../route/auth-options"
|
||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import { AnthropicMessages } from "../protocols/anthropic-messages.js"
|
import { AnthropicMessages } from "../protocols/anthropic-messages"
|
||||||
import { AnthropicCompatible } from "./anthropic-compatible.js"
|
import { AnthropicCompatible } from "./anthropic-compatible"
|
||||||
|
|
||||||
export type AnthropicOptionsInput = AnthropicMessages.OptionsInput
|
export type AnthropicOptionsInput = AnthropicMessages.OptionsInput
|
||||||
export type AnthropicProviderOptionsInput = AnthropicMessages.ProviderOptionsInput
|
export type AnthropicProviderOptionsInput = AnthropicMessages.ProviderOptionsInput
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import { type AtLeastOne, type ProviderAuthOption } from "../route/auth-options.js"
|
import { type AtLeastOne, type ProviderAuthOption } from "../route/auth-options"
|
||||||
import type { Route as RouteDef, RouteDefaultsInput } from "../route/client.js"
|
import type { Route as RouteDef, RouteDefaultsInput } from "../route/client"
|
||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import * as OpenAIChat from "../protocols/openai-chat.js"
|
import * as OpenAIChat from "../protocols/openai-chat"
|
||||||
import * as OpenAIResponses from "../protocols/openai-responses.js"
|
import * as OpenAIResponses from "../protocols/openai-responses"
|
||||||
import { ProviderShared } from "../protocols/shared.js"
|
import { ProviderShared } from "../protocols/shared"
|
||||||
import { withOpenAIOptions, type OpenAIProviderOptionsInput } from "./openai-options.js"
|
import { withOpenAIOptions, type OpenAIProviderOptionsInput } from "./openai-options"
|
||||||
|
|
||||||
export const id = ProviderID.make("azure")
|
export const id = ProviderID.make("azure")
|
||||||
const routeAuth = Auth.remove("authorization")
|
const routeAuth = Auth.remove("authorization")
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { chatModel as model } from "../azure.js"
|
export { chatModel as model } from "../azure"
|
||||||
export type { Settings } from "../azure.js"
|
export type { Settings } from "../azure"
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { responsesModel as model } from "../azure.js"
|
export { responsesModel as model } from "../azure"
|
||||||
export type { Settings } from "../azure.js"
|
export type { Settings } from "../azure"
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import type { Config, Redacted } from "effect"
|
import type { Config, Redacted } from "effect"
|
||||||
import * as OpenAICompatibleChat from "../protocols/openai-compatible-chat.js"
|
import * as OpenAICompatibleChat from "../protocols/openai-compatible-chat"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import { AuthOptions, type AtLeastOne, type ProviderAuthOption } from "../route/auth-options.js"
|
import { AuthOptions, type AtLeastOne, type ProviderAuthOption } from "../route/auth-options"
|
||||||
import type { RouteDefaultsInput } from "../route/client.js"
|
import type { RouteDefaultsInput } from "../route/client"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import type { OpenAIProviderOptionsInput } from "./openai-options.js"
|
import type { OpenAIProviderOptionsInput } from "./openai-options"
|
||||||
|
|
||||||
export const aiGatewayID = ProviderID.make("cloudflare-ai-gateway")
|
export const aiGatewayID = ProviderID.make("cloudflare-ai-gateway")
|
||||||
export const workersAIID = ProviderID.make("cloudflare-workers-ai")
|
export const workersAIID = ProviderID.make("cloudflare-workers-ai")
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { OpenAICompatibleChat } from "../protocols/openai-compatible-chat.js"
|
import { OpenAICompatibleChat } from "../protocols/openai-compatible-chat"
|
||||||
import type { RouteDefaultsInput } from "../route/client.js"
|
import type { RouteDefaultsInput } from "../route/client"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import { GoogleVertexShared } from "./google-vertex-shared.js"
|
import { GoogleVertexShared } from "./google-vertex-shared"
|
||||||
import type { OpenAIProviderOptionsInput } from "./openai-options.js"
|
import type { OpenAIProviderOptionsInput } from "./openai-options"
|
||||||
|
|
||||||
export const id = ProviderID.make("google-vertex")
|
export const id = ProviderID.make("google-vertex")
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import { Effect, Schema, Struct } from "effect"
|
import { Effect, Schema, Struct } from "effect"
|
||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { AnthropicMessages } from "../protocols/anthropic-messages.js"
|
import { AnthropicMessages } from "../protocols/anthropic-messages"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import { Route, type RouteDefaultsInput } from "../route/client.js"
|
import { Route, type RouteDefaultsInput } from "../route/client"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { Framing } from "../route/framing.js"
|
import { Framing } from "../route/framing"
|
||||||
import { Protocol } from "../route/protocol.js"
|
import { Protocol } from "../route/protocol"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import { GoogleVertexShared } from "./google-vertex-shared.js"
|
import { GoogleVertexShared } from "./google-vertex-shared"
|
||||||
|
|
||||||
export type AnthropicOptionsInput = AnthropicMessages.OptionsInput
|
export type AnthropicOptionsInput = AnthropicMessages.OptionsInput
|
||||||
export type AnthropicProviderOptionsInput = AnthropicMessages.ProviderOptionsInput
|
export type AnthropicProviderOptionsInput = AnthropicMessages.ProviderOptionsInput
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { OpenAICompatibleResponses } from "../protocols/openai-compatible-responses.js"
|
import { OpenAICompatibleResponses } from "../protocols/openai-compatible-responses"
|
||||||
import type { RouteDefaultsInput } from "../route/client.js"
|
import type { RouteDefaultsInput } from "../route/client"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import { GoogleVertexShared } from "./google-vertex-shared.js"
|
import { GoogleVertexShared } from "./google-vertex-shared"
|
||||||
import type { OpenResponsesProviderOptionsInput } from "./open-responses-options.js"
|
import type { OpenResponsesProviderOptionsInput } from "./open-responses-options"
|
||||||
|
|
||||||
export const id = ProviderID.make("google-vertex")
|
export const id = ProviderID.make("google-vertex")
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { AnyAuthClient } from "google-auth-library"
|
import type { AnyAuthClient } from "google-auth-library"
|
||||||
import { Effect, Redacted } from "effect"
|
import { Effect, Redacted } from "effect"
|
||||||
import { Auth, MissingCredentialError } from "../route/auth.js"
|
import { Auth, MissingCredentialError } from "../route/auth"
|
||||||
|
|
||||||
const SCOPE = "https://www.googleapis.com/auth/cloud-platform"
|
const SCOPE = "https://www.googleapis.com/auth/cloud-platform"
|
||||||
|
|
||||||
@@ -74,4 +74,4 @@ export const oauth = (input: OAuthOptions, project?: string) => {
|
|||||||
return adc(project)
|
return adc(project)
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as GoogleVertexShared from "./google-vertex-shared.js"
|
export * as GoogleVertexShared from "./google-vertex-shared"
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { Gemini } from "../protocols/gemini.js"
|
import { Gemini } from "../protocols/gemini"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import { Route, type RouteDefaultsInput } from "../route/client.js"
|
import { Route, type RouteDefaultsInput } from "../route/client"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { Framing } from "../route/framing.js"
|
import { Framing } from "../route/framing"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import { GoogleVertexShared } from "./google-vertex-shared.js"
|
import { GoogleVertexShared } from "./google-vertex-shared"
|
||||||
|
|
||||||
export type GeminiOptionsInput = Gemini.OptionsInput
|
export type GeminiOptionsInput = Gemini.OptionsInput
|
||||||
export type GeminiProviderOptionsInput = Gemini.ProviderOptionsInput
|
export type GeminiProviderOptionsInput = Gemini.ProviderOptionsInput
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { model } from "../google-vertex-chat.js"
|
export { model } from "../google-vertex-chat"
|
||||||
export type { Settings } from "../google-vertex-chat.js"
|
export type { Settings } from "../google-vertex-chat"
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { model } from "../google-vertex.js"
|
export { model } from "../google-vertex"
|
||||||
export type { Settings } from "../google-vertex.js"
|
export type { Settings } from "../google-vertex"
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { model } from "../google-vertex-messages.js"
|
export { model } from "../google-vertex-messages"
|
||||||
export type { Settings } from "../google-vertex-messages.js"
|
export type { Settings } from "../google-vertex-messages"
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { model } from "../google-vertex-responses.js"
|
export { model } from "../google-vertex-responses"
|
||||||
export type { Settings } from "../google-vertex-responses.js"
|
export type { Settings } from "../google-vertex-responses"
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import type { RouteDefaultsInput } from "../route/client.js"
|
import type { RouteDefaultsInput } from "../route/client"
|
||||||
import { Auth } from "../route/auth.js"
|
import { Auth } from "../route/auth"
|
||||||
import type { ProviderAuthOption } from "../route/auth-options.js"
|
import type { ProviderAuthOption } from "../route/auth-options"
|
||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { HttpOptions, ProviderID, mergeHttpOptions, type ModelID } from "../schema/index.js"
|
import { HttpOptions, ProviderID, mergeHttpOptions, type ModelID } from "../schema"
|
||||||
import { Gemini } from "../protocols/gemini.js"
|
import { Gemini } from "../protocols/gemini"
|
||||||
import { GoogleImages } from "../protocols/google-images.js"
|
import { GoogleImages } from "../protocols/google-images"
|
||||||
|
|
||||||
export type { GoogleImageOptions } from "../protocols/google-images.js"
|
export type { GoogleImageOptions } from "../protocols/google-images"
|
||||||
export type GeminiOptionsInput = Gemini.OptionsInput
|
export type GeminiOptionsInput = Gemini.OptionsInput
|
||||||
export type GeminiProviderOptionsInput = Gemini.ProviderOptionsInput
|
export type GeminiProviderOptionsInput = Gemini.ProviderOptionsInput
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
export * as Anthropic from "./anthropic.js"
|
export * as Anthropic from "./anthropic"
|
||||||
export * as AnthropicCompatible from "./anthropic-compatible.js"
|
export * as AnthropicCompatible from "./anthropic-compatible"
|
||||||
export * as AmazonBedrock from "./amazon-bedrock.js"
|
export * as AmazonBedrock from "./amazon-bedrock"
|
||||||
export * as AmazonBedrockMantle from "./amazon-bedrock-mantle.js"
|
export * as AmazonBedrockMantle from "./amazon-bedrock-mantle"
|
||||||
export * as Azure from "./azure.js"
|
export * as Azure from "./azure"
|
||||||
export * as Cloudflare from "./cloudflare.js"
|
export * as Cloudflare from "./cloudflare"
|
||||||
export { CloudflareAIGateway, CloudflareWorkersAI } from "./cloudflare.js"
|
export { CloudflareAIGateway, CloudflareWorkersAI } from "./cloudflare"
|
||||||
export * as Google from "./google.js"
|
export * as Google from "./google"
|
||||||
export * as GoogleVertex from "./google-vertex.js"
|
export * as GoogleVertex from "./google-vertex"
|
||||||
export * as GoogleVertexChat from "./google-vertex-chat.js"
|
export * as GoogleVertexChat from "./google-vertex-chat"
|
||||||
export * as GoogleVertexMessages from "./google-vertex-messages.js"
|
export * as GoogleVertexMessages from "./google-vertex-messages"
|
||||||
export * as GoogleVertexResponses from "./google-vertex-responses.js"
|
export * as GoogleVertexResponses from "./google-vertex-responses"
|
||||||
export * as OpenAI from "./openai.js"
|
export * as OpenAI from "./openai"
|
||||||
export * as OpenAICompatible from "./openai-compatible.js"
|
export * as OpenAICompatible from "./openai-compatible"
|
||||||
export * as OpenAICompatibleResponses from "./openai-compatible-responses.js"
|
export * as OpenAICompatibleResponses from "./openai-compatible-responses"
|
||||||
export * as OpenRouter from "./openrouter.js"
|
export * as OpenRouter from "./openrouter"
|
||||||
export * as XAI from "./xai.js"
|
export * as XAI from "./xai"
|
||||||
export * as ZAI from "./zai.js"
|
export * as ZAI from "./zai"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { ResponseIncludable, ServiceTier } from "../protocols/utils/open-responses-options.js"
|
import type { ResponseIncludable, ServiceTier } from "../protocols/utils/open-responses-options"
|
||||||
import type { ProviderOptions, ReasoningEffort, TextVerbosity } from "../schema/index.js"
|
import type { ProviderOptions, ReasoningEffort, TextVerbosity } from "../schema"
|
||||||
|
|
||||||
export interface OpenResponsesOptionsInput {
|
export interface OpenResponsesOptionsInput {
|
||||||
readonly [key: string]: unknown
|
readonly [key: string]: unknown
|
||||||
@@ -16,4 +16,4 @@ export type OpenResponsesProviderOptionsInput = ProviderOptions & {
|
|||||||
readonly openresponses?: OpenResponsesOptionsInput
|
readonly openresponses?: OpenResponsesOptionsInput
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as OpenResponsesProviderOptions from "./open-responses-options.js"
|
export * as OpenResponsesProviderOptions from "./open-responses-options"
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { OpenAICompatibleResponses } from "../protocols/openai-compatible-responses.js"
|
import { OpenAICompatibleResponses } from "../protocols/openai-compatible-responses"
|
||||||
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options.js"
|
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options"
|
||||||
import type { RouteDefaultsInput } from "../route/client.js"
|
import type { RouteDefaultsInput } from "../route/client"
|
||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import type { OpenResponsesProviderOptionsInput } from "./open-responses-options.js"
|
import type { OpenResponsesProviderOptionsInput } from "./open-responses-options"
|
||||||
|
|
||||||
export type { OpenResponsesOptionsInput, OpenResponsesProviderOptionsInput } from "./open-responses-options.js"
|
export type { OpenResponsesOptionsInput, OpenResponsesProviderOptionsInput } from "./open-responses-options"
|
||||||
|
|
||||||
export const id = ProviderID.make("openai-compatible")
|
export const id = ProviderID.make("openai-compatible")
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { ProviderID, type ModelID } from "../schema/index.js"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
import * as OpenAICompatibleChat from "../protocols/openai-compatible-chat.js"
|
import * as OpenAICompatibleChat from "../protocols/openai-compatible-chat"
|
||||||
import type { RouteDefaultsInput } from "../route/client.js"
|
import type { RouteDefaultsInput } from "../route/client"
|
||||||
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options.js"
|
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options"
|
||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { profiles, type OpenAICompatibleProfile } from "./openai-compatible-profile.js"
|
import { profiles, type OpenAICompatibleProfile } from "./openai-compatible-profile"
|
||||||
import type { OpenAIProviderOptionsInput } from "./openai-options.js"
|
import type { OpenAIProviderOptionsInput } from "./openai-options"
|
||||||
|
|
||||||
export const id = ProviderID.make("openai-compatible")
|
export const id = ProviderID.make("openai-compatible")
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
export * from "../openai-compatible-responses.js"
|
export * from "../openai-compatible-responses"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import type { ProviderOptions } from "../schema/index.js"
|
import type { ProviderOptions } from "../schema"
|
||||||
import { mergeProviderOptions } from "../schema/index.js"
|
import { mergeProviderOptions } from "../schema"
|
||||||
import type { OpenResponsesOptionsInput } from "./open-responses-options.js"
|
import type { OpenResponsesOptionsInput } from "./open-responses-options"
|
||||||
|
|
||||||
export type { OpenAIResponseIncludable, OpenAIServiceTier } from "../protocols/utils/openai-options.js"
|
export type { OpenAIResponseIncludable, OpenAIServiceTier } from "../protocols/utils/openai-options"
|
||||||
|
|
||||||
export type OpenAIOptionsInput = OpenResponsesOptionsInput
|
export type OpenAIOptionsInput = OpenResponsesOptionsInput
|
||||||
|
|
||||||
@@ -67,4 +67,4 @@ export const withOpenAIOptions = <Options extends { readonly providerOptions?: O
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as OpenAIProviderOptions from "./openai-options.js"
|
export * as OpenAIProviderOptions from "./openai-options"
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options.js"
|
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options"
|
||||||
import type { Route, RouteDefaultsInput } from "../route/client.js"
|
import type { Route, RouteDefaultsInput } from "../route/client"
|
||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import { HttpOptions, ProviderID, ToolDefinition, mergeHttpOptions, type ModelID } from "../schema/index.js"
|
import { HttpOptions, ProviderID, ToolDefinition, mergeHttpOptions, type ModelID } from "../schema"
|
||||||
import * as OpenAIChat from "../protocols/openai-chat.js"
|
import * as OpenAIChat from "../protocols/openai-chat"
|
||||||
import * as OpenAIResponses from "../protocols/openai-responses.js"
|
import * as OpenAIResponses from "../protocols/openai-responses"
|
||||||
import { withOpenAIOptions, type OpenAIProviderOptionsInput } from "./openai-options.js"
|
import { withOpenAIOptions, type OpenAIProviderOptionsInput } from "./openai-options"
|
||||||
import { OpenAIImages, type OpenAIImageString } from "../protocols/openai-images.js"
|
import { OpenAIImages, type OpenAIImageString } from "../protocols/openai-images"
|
||||||
|
|
||||||
export type { OpenAIOptionsInput, OpenAIResponseIncludable } from "./openai-options.js"
|
export type { OpenAIOptionsInput, OpenAIResponseIncludable } from "./openai-options"
|
||||||
export type { OpenAIImageOptions } from "../protocols/openai-images.js"
|
export type { OpenAIImageOptions } from "../protocols/openai-images"
|
||||||
|
|
||||||
export const id = ProviderID.make("openai")
|
export const id = ProviderID.make("openai")
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { chatModel as model } from "../openai.js"
|
export { chatModel as model } from "../openai"
|
||||||
export type { Settings } from "../openai.js"
|
export type { Settings } from "../openai"
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export { model } from "../openai.js"
|
export { model } from "../openai"
|
||||||
export type { Settings } from "../openai.js"
|
export type { Settings } from "../openai"
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
import { Effect, Schema } from "effect"
|
import { Effect, Schema } from "effect"
|
||||||
import { Route, type RouteDefaultsInput } from "../route/client.js"
|
import { Route, type RouteDefaultsInput } from "../route/client"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { Framing } from "../route/framing.js"
|
import { Framing } from "../route/framing"
|
||||||
import { Protocol } from "../route/protocol.js"
|
import { Protocol } from "../route/protocol"
|
||||||
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options.js"
|
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options"
|
||||||
import { ProviderID, type CacheHint, type ModelID, type ProviderOptions } from "../schema/index.js"
|
import { ProviderID, type CacheHint, type ModelID, type ProviderOptions } from "../schema"
|
||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
import * as OpenAICompatibleProfiles from "./openai-compatible-profile.js"
|
import * as OpenAICompatibleProfiles from "./openai-compatible-profile"
|
||||||
import * as OpenAIChat from "../protocols/openai-chat.js"
|
import * as OpenAIChat from "../protocols/openai-chat"
|
||||||
import { newBreakpoints, ttlBucket } from "../protocols/utils/cache.js"
|
import { newBreakpoints, ttlBucket } from "../protocols/utils/cache"
|
||||||
import { isRecord } from "../protocols/shared.js"
|
import { isRecord } from "../protocols/shared"
|
||||||
|
|
||||||
export const profile = OpenAICompatibleProfiles.profiles.openrouter
|
export const profile = OpenAICompatibleProfiles.profiles.openrouter
|
||||||
export const id = ProviderID.make(profile.provider)
|
export const id = ProviderID.make(profile.provider)
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options.js"
|
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options"
|
||||||
import { Route, type RouteDefaultsInput } from "../route/client.js"
|
import { Route, type RouteDefaultsInput } from "../route/client"
|
||||||
import { Endpoint } from "../route/endpoint.js"
|
import { Endpoint } from "../route/endpoint"
|
||||||
import { HttpOptions, ProviderID, type ModelID, type ProviderOptions } from "../schema/index.js"
|
import { HttpOptions, ProviderID, type ModelID, type ProviderOptions } from "../schema"
|
||||||
import * as OpenAICompatibleProfiles from "./openai-compatible-profile.js"
|
import * as OpenAICompatibleProfiles from "./openai-compatible-profile"
|
||||||
import * as OpenAICompatibleChat from "../protocols/openai-compatible-chat.js"
|
import * as OpenAICompatibleChat from "../protocols/openai-compatible-chat"
|
||||||
import * as OpenAIChat from "../protocols/openai-chat.js"
|
import * as OpenAIChat from "../protocols/openai-chat"
|
||||||
import * as OpenAIResponses from "../protocols/openai-responses.js"
|
import * as OpenAIResponses from "../protocols/openai-responses"
|
||||||
import { XAIImages } from "../protocols/xai-images.js"
|
import { XAIImages } from "../protocols/xai-images"
|
||||||
import type { OpenAIOptionsInput } from "./openai-options.js"
|
import type { OpenAIOptionsInput } from "./openai-options"
|
||||||
import type { ProviderPackage } from "../provider-package.js"
|
import type { ProviderPackage } from "../provider-package"
|
||||||
|
|
||||||
export const id = ProviderID.make("xai")
|
export const id = ProviderID.make("xai")
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ export interface Settings extends ProviderPackage.Settings {
|
|||||||
readonly providerOptions?: XAIProviderOptionsInput
|
readonly providerOptions?: XAIProviderOptionsInput
|
||||||
}
|
}
|
||||||
|
|
||||||
export type { XAIImageOptions } from "../protocols/xai-images.js"
|
export type { XAIImageOptions } from "../protocols/xai-images"
|
||||||
|
|
||||||
const responsesRoute = Route.make({
|
const responsesRoute = Route.make({
|
||||||
id: "openai-responses",
|
id: "openai-responses",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { ZAIImages } from "../protocols/zai-images.js"
|
import { ZAIImages } from "../protocols/zai-images"
|
||||||
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options.js"
|
import { AuthOptions, type ProviderAuthOption } from "../route/auth-options"
|
||||||
import { HttpOptions, ProviderID, type ModelID } from "../schema/index.js"
|
import { HttpOptions, ProviderID, type ModelID } from "../schema"
|
||||||
|
|
||||||
export const id = ProviderID.make("zai")
|
export const id = ProviderID.make("zai")
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ export type Config = ProviderAuthOption<"optional"> & {
|
|||||||
readonly http?: HttpOptions.Input
|
readonly http?: HttpOptions.Input
|
||||||
}
|
}
|
||||||
|
|
||||||
export type { ZAIImageOptions } from "../protocols/zai-images.js"
|
export type { ZAIImageOptions } from "../protocols/zai-images"
|
||||||
|
|
||||||
const auth = (options: ProviderAuthOption<"optional">) => AuthOptions.bearer(options, "ZAI_API_KEY")
|
const auth = (options: ProviderAuthOption<"optional">) => AuthOptions.bearer(options, "ZAI_API_KEY")
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
export * from "./route/index.js"
|
export * from "./route/index"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { Config, Redacted } from "effect"
|
import type { Config, Redacted } from "effect"
|
||||||
import { Auth } from "./auth.js"
|
import { Auth } from "./auth"
|
||||||
|
|
||||||
export type ApiKeyMode = "optional" | "required"
|
export type ApiKeyMode = "optional" | "required"
|
||||||
|
|
||||||
@@ -61,4 +61,4 @@ export const bearer = (
|
|||||||
.bearer()
|
.bearer()
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as AuthOptions from "./auth-options.js"
|
export * as AuthOptions from "./auth-options"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Config, Effect, Redacted } from "effect"
|
import { Config, Effect, Redacted } from "effect"
|
||||||
import { Headers } from "effect/unstable/http"
|
import { Headers } from "effect/unstable/http"
|
||||||
import { AuthenticationReason, InvalidRequestReason, AIError, type HttpOptions } from "../schema/index.js"
|
import { AuthenticationReason, InvalidRequestReason, AIError, type HttpOptions } from "../schema"
|
||||||
|
|
||||||
export class MissingCredentialError extends Error {
|
export class MissingCredentialError extends Error {
|
||||||
readonly _tag = "MissingCredentialError"
|
readonly _tag = "MissingCredentialError"
|
||||||
@@ -153,4 +153,4 @@ export const toEffect =
|
|||||||
(authInput: AuthInput): Effect.Effect<Headers.Headers, AIError> =>
|
(authInput: AuthInput): Effect.Effect<Headers.Headers, AIError> =>
|
||||||
input.apply(authInput).pipe(Effect.mapError(toAIError))
|
input.apply(authInput).pipe(Effect.mapError(toAIError))
|
||||||
|
|
||||||
export * as Auth from "./auth.js"
|
export * as Auth from "./auth"
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
import { Cause, Context, Effect, Layer, Schema, Stream } from "effect"
|
import { Cause, Context, Effect, Layer, Schema, Stream } from "effect"
|
||||||
import * as Option from "effect/Option"
|
import * as Option from "effect/Option"
|
||||||
import { Auth } from "./auth.js"
|
import { Auth } from "./auth"
|
||||||
import { Endpoint, type EndpointPatch } from "./endpoint.js"
|
import { Endpoint, type EndpointPatch } from "./endpoint"
|
||||||
import { RequestExecutor } from "./executor.js"
|
import { RequestExecutor } from "./executor"
|
||||||
import { Framing } from "./framing.js"
|
import { Framing } from "./framing"
|
||||||
import { HttpTransport } from "./transport/index.js"
|
import { HttpTransport } from "./transport"
|
||||||
import type { HttpMiddleware, Transport, TransportRuntime } from "./transport/index.js"
|
import type { HttpMiddleware, Transport, TransportRuntime } from "./transport"
|
||||||
import { WebSocketExecutor } from "./transport/index.js"
|
import { WebSocketExecutor } from "./transport"
|
||||||
import type { Protocol } from "./protocol.js"
|
import type { Protocol } from "./protocol"
|
||||||
import { applyCachePolicy } from "../cache-policy.js"
|
import { applyCachePolicy } from "../cache-policy"
|
||||||
import * as ProviderShared from "../protocols/shared.js"
|
import * as ProviderShared from "../protocols/shared"
|
||||||
import type { ProtocolID, ProviderOptions } from "../schema/index.js"
|
import type { ProtocolID, ProviderOptions } from "../schema"
|
||||||
import {
|
import {
|
||||||
AIError,
|
AIError,
|
||||||
GenerationOptions,
|
GenerationOptions,
|
||||||
@@ -25,7 +25,7 @@ import {
|
|||||||
mergeGenerationOptions,
|
mergeGenerationOptions,
|
||||||
mergeHttpOptions,
|
mergeHttpOptions,
|
||||||
mergeProviderOptions,
|
mergeProviderOptions,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
|
|
||||||
export interface RouteBody<Body> {
|
export interface RouteBody<Body> {
|
||||||
/** Schema for the validated provider-native body sent as the JSON request. */
|
/** Schema for the validated provider-native body sent as the JSON request. */
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { LLMRequest } from "../schema/index.js"
|
import type { LLMRequest } from "../schema"
|
||||||
import * as ProviderShared from "../protocols/shared.js"
|
import * as ProviderShared from "../protocols/shared"
|
||||||
|
|
||||||
export interface EndpointInput<Body> {
|
export interface EndpointInput<Body> {
|
||||||
readonly request: LLMRequest
|
readonly request: LLMRequest
|
||||||
@@ -53,4 +53,4 @@ export const render = <Body>(endpoint: Definition<Body>, input: EndpointInput<Bo
|
|||||||
return url
|
return url
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as Endpoint from "./endpoint.js"
|
export * as Endpoint from "./endpoint"
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ import {
|
|||||||
HttpResponseDetails,
|
HttpResponseDetails,
|
||||||
AIError,
|
AIError,
|
||||||
TransportReason,
|
TransportReason,
|
||||||
} from "../schema/index.js"
|
} from "../schema"
|
||||||
import { classifyProviderFailure } from "../provider-error.js"
|
import { classifyProviderFailure } from "../provider-error"
|
||||||
|
|
||||||
export interface Interface {
|
export interface Interface {
|
||||||
readonly execute: (
|
readonly execute: (
|
||||||
@@ -362,4 +362,4 @@ export const layer: Layer.Layer<Service, never, HttpClient.HttpClient> = Layer.e
|
|||||||
|
|
||||||
export const fetchLayer = layer.pipe(Layer.provide(FetchHttpClient.layer))
|
export const fetchLayer = layer.pipe(Layer.provide(FetchHttpClient.layer))
|
||||||
|
|
||||||
export * as RequestExecutor from "./executor.js"
|
export * as RequestExecutor from "./executor"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { Stream } from "effect"
|
import type { Stream } from "effect"
|
||||||
import * as ProviderShared from "../protocols/shared.js"
|
import * as ProviderShared from "../protocols/shared"
|
||||||
import type { AIError } from "../schema/index.js"
|
import type { AIError } from "../schema"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decode a streaming HTTP response body into provider-protocol frames.
|
* Decode a streaming HTTP response body into provider-protocol frames.
|
||||||
@@ -24,4 +24,4 @@ export interface Definition<Frame> {
|
|||||||
/** Server-Sent Events framing. Used by every JSON-streaming HTTP provider. */
|
/** Server-Sent Events framing. Used by every JSON-streaming HTTP provider. */
|
||||||
export const sse: Definition<string> = { id: "sse", frame: ProviderShared.sseFraming }
|
export const sse: Definition<string> = { id: "sse", frame: ProviderShared.sseFraming }
|
||||||
|
|
||||||
export * as Framing from "./framing.js"
|
export * as Framing from "./framing"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export { Route, LLMClient } from "./client.js"
|
export { Route, LLMClient } from "./client"
|
||||||
export type {
|
export type {
|
||||||
Route as RouteShape,
|
Route as RouteShape,
|
||||||
RouteLanguageModelInput,
|
RouteLanguageModelInput,
|
||||||
@@ -9,18 +9,18 @@ export type {
|
|||||||
Interface as LLMClientShape,
|
Interface as LLMClientShape,
|
||||||
Service as LLMClientService,
|
Service as LLMClientService,
|
||||||
StreamOptions,
|
StreamOptions,
|
||||||
} from "./client.js"
|
} from "./client"
|
||||||
export * from "./executor.js"
|
export * from "./executor"
|
||||||
export { Auth } from "./auth.js"
|
export { Auth } from "./auth"
|
||||||
export { AuthOptions } from "./auth-options.js"
|
export { AuthOptions } from "./auth-options"
|
||||||
export { Endpoint } from "./endpoint.js"
|
export { Endpoint } from "./endpoint"
|
||||||
export { Framing } from "./framing.js"
|
export { Framing } from "./framing"
|
||||||
export { Protocol } from "./protocol.js"
|
export { Protocol } from "./protocol"
|
||||||
export { HttpTransport, WebSocketExecutor, WebSocketTransport } from "./transport/index.js"
|
export { HttpTransport, WebSocketExecutor, WebSocketTransport } from "./transport"
|
||||||
export * as Transport from "./transport/index.js"
|
export * as Transport from "./transport"
|
||||||
export type { Definition as AuthShape, AuthInput, Credential, CredentialError } from "./auth.js"
|
export type { Definition as AuthShape, AuthInput, Credential, CredentialError } from "./auth"
|
||||||
export type { ApiKeyMode, AuthOverride, ProviderAuthOption } from "./auth-options.js"
|
export type { ApiKeyMode, AuthOverride, ProviderAuthOption } from "./auth-options"
|
||||||
export type { Definition as EndpointFn, EndpointInput } from "./endpoint.js"
|
export type { Definition as EndpointFn, EndpointInput } from "./endpoint"
|
||||||
export type { Definition as FramingDef } from "./framing.js"
|
export type { Definition as FramingDef } from "./framing"
|
||||||
export type { Protocol as ProtocolDef } from "./protocol.js"
|
export type { Protocol as ProtocolDef } from "./protocol"
|
||||||
export type { HttpHandler, HttpMiddleware, Transport as TransportDef, TransportRuntime } from "./transport/index.js"
|
export type { HttpHandler, HttpMiddleware, Transport as TransportDef, TransportRuntime } from "./transport"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Schema, type Effect } from "effect"
|
import { Schema, type Effect } from "effect"
|
||||||
import type { AIError, LLMEvent, LLMRequest, ProtocolID } from "../schema/index.js"
|
import type { AIError, LLMEvent, LLMRequest, ProtocolID } from "../schema"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The semantic API contract of one model server family.
|
* The semantic API contract of one model server family.
|
||||||
@@ -82,4 +82,4 @@ export const make = <Body, Frame, Event, State>(
|
|||||||
|
|
||||||
export const jsonEvent = <const S extends Schema.Top>(schema: S) => Schema.fromJsonString(schema)
|
export const jsonEvent = <const S extends Schema.Top>(schema: S) => Schema.fromJsonString(schema)
|
||||||
|
|
||||||
export * as Protocol from "./protocol.js"
|
export * as Protocol from "./protocol"
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import { Effect, Stream } from "effect"
|
import { Effect, Stream } from "effect"
|
||||||
import { Headers, HttpClientRequest } from "effect/unstable/http"
|
import { Headers, HttpClientRequest } from "effect/unstable/http"
|
||||||
import { Auth } from "../auth.js"
|
import { Auth } from "../auth"
|
||||||
import { render as renderEndpoint } from "../endpoint.js"
|
import { render as renderEndpoint } from "../endpoint"
|
||||||
import { Framing } from "../framing.js"
|
import { Framing } from "../framing"
|
||||||
import type { HttpMiddleware, Transport, TransportPrepareInput } from "./index.js"
|
import type { HttpMiddleware, Transport, TransportPrepareInput } from "./index"
|
||||||
import * as ProviderShared from "../../protocols/shared.js"
|
import * as ProviderShared from "../../protocols/shared"
|
||||||
import { mergeJsonRecords, type LLMRequest } from "../../schema/index.js"
|
import { mergeJsonRecords, type LLMRequest } from "../../schema"
|
||||||
|
|
||||||
export type JsonRequestInput<Body> = TransportPrepareInput<Body>
|
export type JsonRequestInput<Body> = TransportPrepareInput<Body>
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import type { Effect, Stream } from "effect"
|
import type { Effect, Stream } from "effect"
|
||||||
import { Endpoint } from "../endpoint.js"
|
import { Endpoint } from "../endpoint"
|
||||||
import { Auth } from "../auth.js"
|
import { Auth } from "../auth"
|
||||||
import type { HttpMiddleware, Interface as RequestExecutorInterface } from "../executor.js"
|
import type { HttpMiddleware, Interface as RequestExecutorInterface } from "../executor"
|
||||||
import type { Interface as WebSocketExecutorInterface } from "./websocket.js"
|
import type { Interface as WebSocketExecutorInterface } from "./websocket"
|
||||||
import type { AIError, LLMRequest } from "../../schema/index.js"
|
import type { AIError, LLMRequest } from "../../schema"
|
||||||
|
|
||||||
export interface TransportRuntime {
|
export interface TransportRuntime {
|
||||||
readonly http: RequestExecutorInterface
|
readonly http: RequestExecutorInterface
|
||||||
@@ -26,6 +26,6 @@ export interface TransportPrepareInput<Body> {
|
|||||||
readonly middleware?: HttpMiddleware
|
readonly middleware?: HttpMiddleware
|
||||||
}
|
}
|
||||||
|
|
||||||
export * as HttpTransport from "./http.js"
|
export * as HttpTransport from "./http"
|
||||||
export type { HttpHandler, HttpMiddleware } from "../executor.js"
|
export type { HttpHandler, HttpMiddleware } from "../executor"
|
||||||
export { WebSocketExecutor, WebSocketTransport } from "./websocket.js"
|
export { WebSocketExecutor, WebSocketTransport } from "./websocket"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { Cause, Context, Effect, Layer, Queue, Stream } from "effect"
|
import { Cause, Context, Effect, Layer, Queue, Stream } from "effect"
|
||||||
import { Headers } from "effect/unstable/http"
|
import { Headers } from "effect/unstable/http"
|
||||||
import { AIError, TransportReason } from "../../schema/index.js"
|
import { AIError, TransportReason } from "../../schema"
|
||||||
import * as HttpTransport from "./http.js"
|
import * as HttpTransport from "./http"
|
||||||
import type { Transport } from "./index.js"
|
import type { Transport } from "./index"
|
||||||
|
|
||||||
export interface WebSocketRequest {
|
export interface WebSocketRequest {
|
||||||
readonly url: string
|
readonly url: string
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Schema } from "effect"
|
import { Schema } from "effect"
|
||||||
import { Tool } from "@opencode-ai/schema/tool"
|
import { Tool } from "@opencode-ai/schema/tool"
|
||||||
import { ModelID, ProviderID, ProviderMetadata, RouteID } from "./ids.js"
|
import { ModelID, ProviderID, ProviderMetadata, RouteID } from "./ids"
|
||||||
|
|
||||||
export const ProviderFailureClassification = Schema.Literals(["context-overflow", "payload-too-large"])
|
export const ProviderFailureClassification = Schema.Literals(["context-overflow", "payload-too-large"])
|
||||||
export type ProviderFailureClassification = typeof ProviderFailureClassification.Type
|
export type ProviderFailureClassification = typeof ProviderFailureClassification.Type
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Schema } from "effect"
|
import { Schema } from "effect"
|
||||||
import { ContentBlockID, FinishReason, ProviderMetadata, ToolCallID } from "./ids.js"
|
import { ContentBlockID, FinishReason, ProviderMetadata, ToolCallID } from "./ids"
|
||||||
import { Message, ToolCallPart, ToolOutput, ToolResultPart, ToolResultValue, type ContentPart } from "./messages.js"
|
import { Message, ToolCallPart, ToolOutput, ToolResultPart, ToolResultValue, type ContentPart } from "./messages"
|
||||||
import { ProviderFailureClassification } from "./errors.js"
|
import { ProviderFailureClassification } from "./errors"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Token usage reported by an LLM provider.
|
* Token usage reported by an LLM provider.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
export * from "./ids.js"
|
export * from "./ids"
|
||||||
export * from "./options.js"
|
export * from "./options"
|
||||||
export * from "./messages.js"
|
export * from "./messages"
|
||||||
export * from "./events.js"
|
export * from "./events"
|
||||||
export * from "./errors.js"
|
export * from "./errors"
|
||||||
|
|||||||
@@ -1,15 +1,8 @@
|
|||||||
import { Schema } from "effect"
|
import { Schema } from "effect"
|
||||||
import { Tool } from "@opencode-ai/schema/tool"
|
import { Tool } from "@opencode-ai/schema/tool"
|
||||||
import { JsonSchema, MessageRole, ProviderMetadata } from "./ids.js"
|
import { JsonSchema, MessageRole, ProviderMetadata } from "./ids"
|
||||||
import {
|
import { CacheHint, CachePolicy, GenerationOptions, HttpOptions, LanguageModelSchema, ProviderOptions } from "./options"
|
||||||
CacheHint,
|
import { isRecord } from "../utils/record"
|
||||||
CachePolicy,
|
|
||||||
GenerationOptions,
|
|
||||||
HttpOptions,
|
|
||||||
LanguageModelSchema,
|
|
||||||
ProviderOptions,
|
|
||||||
} from "./options.js"
|
|
||||||
import { isRecord } from "../utils/record.js"
|
|
||||||
|
|
||||||
const systemPartSchema = Schema.Struct({
|
const systemPartSchema = Schema.Struct({
|
||||||
type: Schema.Literal("text"),
|
type: Schema.Literal("text"),
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Schema } from "effect"
|
import { Schema } from "effect"
|
||||||
import { JsonSchema, ModelID, ProviderID } from "./ids.js"
|
import { JsonSchema, ModelID, ProviderID } from "./ids"
|
||||||
import type { AnyRoute } from "../route/client.js"
|
import type { AnyRoute } from "../route/client"
|
||||||
import { isRecord } from "../utils/record.js"
|
import { isRecord } from "../utils/record"
|
||||||
|
|
||||||
export const mergeJsonRecords = (
|
export const mergeJsonRecords = (
|
||||||
...items: ReadonlyArray<Record<string, unknown> | undefined>
|
...items: ReadonlyArray<Record<string, unknown> | undefined>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
export * as TestLLM from "./testing.js"
|
export * as TestLLM from "./testing"
|
||||||
|
|
||||||
import { LLMClient, type Interface as LLMClientShape } from "./route/client.js"
|
import { LLMClient, type Interface as LLMClientShape } from "./route/client"
|
||||||
import {
|
import {
|
||||||
LLMEvent,
|
LLMEvent,
|
||||||
LLMResponse,
|
LLMResponse,
|
||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
type AIError,
|
type AIError,
|
||||||
type LLMRequest,
|
type LLMRequest,
|
||||||
type UsageInput,
|
type UsageInput,
|
||||||
} from "./schema/index.js"
|
} from "./schema"
|
||||||
import { Context, Deferred, Effect, Latch, Layer, Queue, Scope, Stream } from "effect"
|
import { Context, Deferred, Effect, Latch, Layer, Queue, Scope, Stream } from "effect"
|
||||||
|
|
||||||
export type Response = readonly LLMEvent[] | Stream.Stream<LLMEvent, AIError>
|
export type Response = readonly LLMEvent[] | Stream.Stream<LLMEvent, AIError>
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import {
|
|||||||
ToolResultValue,
|
ToolResultValue,
|
||||||
type ToolOutput as ToolOutputType,
|
type ToolOutput as ToolOutputType,
|
||||||
type ToolResultValue as ToolResultValueType,
|
type ToolResultValue as ToolResultValueType,
|
||||||
} from "./schema/index.js"
|
} from "./schema"
|
||||||
import { type AnyTool, type Tools } from "./tool.js"
|
import { type AnyTool, type Tools } from "./tool"
|
||||||
|
|
||||||
export interface ToolSettlement {
|
export interface ToolSettlement {
|
||||||
readonly result: ToolResultValueType
|
readonly result: ToolResultValueType
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
import { Effect, JsonSchema, Schema } from "effect"
|
import { Effect, JsonSchema, Schema } from "effect"
|
||||||
import { Tool } from "@opencode-ai/schema/tool"
|
import { Tool } from "@opencode-ai/schema/tool"
|
||||||
import type {
|
import type { ToolCallPart, ToolDefinition as ToolDefinitionClass, ToolOutput as ToolOutputType } from "./schema"
|
||||||
ToolCallPart,
|
import { ToolDefinition, ToolFailure, ToolOutput } from "./schema"
|
||||||
ToolDefinition as ToolDefinitionClass,
|
|
||||||
ToolOutput as ToolOutputType,
|
|
||||||
} from "./schema/index.js"
|
|
||||||
import { ToolDefinition, ToolFailure, ToolOutput } from "./schema/index.js"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Schema constraint for tool parameters / success values: no decoding or
|
* Schema constraint for tool parameters / success values: no decoding or
|
||||||
@@ -249,4 +245,4 @@ const project = (
|
|||||||
|
|
||||||
export { ToolFailure }
|
export { ToolFailure }
|
||||||
|
|
||||||
export * as Tool from "./tool.js"
|
export * as Tool from "./tool"
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import { describe, expect } from "bun:test"
|
import { describe, expect } from "bun:test"
|
||||||
import { Effect, Schema, Stream } from "effect"
|
import { Effect, Schema, Stream } from "effect"
|
||||||
import { LLM, LLMRequest, LLMResponse } from "../src/index.js"
|
import { LLM, LLMRequest, LLMResponse } from "../src"
|
||||||
import { Route, Endpoint, LLMClient, Protocol, type FramingDef } from "../src/route.js"
|
import { Route, Endpoint, LLMClient, Protocol, type FramingDef } from "../src/route"
|
||||||
import { compileRequest } from "../src/route/client.js"
|
import { compileRequest } from "../src/route/client"
|
||||||
import { LanguageModel } from "../src/schema/index.js"
|
import { LanguageModel } from "../src/schema"
|
||||||
import { testEffect } from "./lib/effect.js"
|
import { testEffect } from "./lib/effect"
|
||||||
import { dynamicResponse } from "./lib/http.js"
|
import { dynamicResponse } from "./lib/http"
|
||||||
|
|
||||||
const updateModel = (model: LanguageModel, patch: Partial<LanguageModel.Input>) => LanguageModel.update(model, patch)
|
const updateModel = (model: LanguageModel, patch: Partial<LanguageModel.Input>) => LanguageModel.update(model, patch)
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
import { Config } from "effect"
|
import { Config } from "effect"
|
||||||
import { Auth } from "../src/route.js"
|
import { Auth } from "../src/route"
|
||||||
import type { LanguageModelFactory } from "../src/route/auth-options.js"
|
import type { LanguageModelFactory } from "../src/route/auth-options"
|
||||||
import * as OpenAIChat from "../src/protocols/openai-chat.js"
|
import * as OpenAIChat from "../src/protocols/openai-chat"
|
||||||
import * as AmazonBedrock from "../src/providers/amazon-bedrock.js"
|
import * as AmazonBedrock from "../src/providers/amazon-bedrock"
|
||||||
import * as Anthropic from "../src/providers/anthropic.js"
|
import * as Anthropic from "../src/providers/anthropic"
|
||||||
import * as AnthropicCompatible from "../src/providers/anthropic-compatible.js"
|
import * as AnthropicCompatible from "../src/providers/anthropic-compatible"
|
||||||
import * as Azure from "../src/providers/azure.js"
|
import * as Azure from "../src/providers/azure"
|
||||||
import * as Cloudflare from "../src/providers/cloudflare.js"
|
import * as Cloudflare from "../src/providers/cloudflare"
|
||||||
import * as Google from "../src/providers/google.js"
|
import * as Google from "../src/providers/google"
|
||||||
import * as GoogleVertex from "../src/providers/google-vertex.js"
|
import * as GoogleVertex from "../src/providers/google-vertex"
|
||||||
import * as GoogleVertexChat from "../src/providers/google-vertex-chat.js"
|
import * as GoogleVertexChat from "../src/providers/google-vertex-chat"
|
||||||
import * as GoogleVertexMessages from "../src/providers/google-vertex-messages.js"
|
import * as GoogleVertexMessages from "../src/providers/google-vertex-messages"
|
||||||
import * as GoogleVertexResponses from "../src/providers/google-vertex-responses.js"
|
import * as GoogleVertexResponses from "../src/providers/google-vertex-responses"
|
||||||
import * as OpenAI from "../src/providers/openai.js"
|
import * as OpenAI from "../src/providers/openai"
|
||||||
import * as OpenAICompatible from "../src/providers/openai-compatible.js"
|
import * as OpenAICompatible from "../src/providers/openai-compatible"
|
||||||
import * as OpenRouter from "../src/providers/openrouter.js"
|
import * as OpenRouter from "../src/providers/openrouter"
|
||||||
import * as XAI from "../src/providers/xai.js"
|
import * as XAI from "../src/providers/xai"
|
||||||
|
|
||||||
type BaseOptions = {
|
type BaseOptions = {
|
||||||
readonly baseURL?: string
|
readonly baseURL?: string
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import { describe, expect } from "bun:test"
|
import { describe, expect } from "bun:test"
|
||||||
import { ConfigProvider, Effect } from "effect"
|
import { ConfigProvider, Effect } from "effect"
|
||||||
import { Headers } from "effect/unstable/http"
|
import { Headers } from "effect/unstable/http"
|
||||||
import { LLM } from "../src/index.js"
|
import { LLM } from "../src"
|
||||||
import { Auth } from "../src/route/auth.js"
|
import { Auth } from "../src/route/auth"
|
||||||
import * as OpenAIChat from "../src/protocols/openai-chat.js"
|
import * as OpenAIChat from "../src/protocols/openai-chat"
|
||||||
import { LanguageModel } from "../src/schema/index.js"
|
import { LanguageModel } from "../src/schema"
|
||||||
import { it } from "./lib/effect.js"
|
import { it } from "./lib/effect"
|
||||||
|
|
||||||
const request = LLM.request({
|
const request = LLM.request({
|
||||||
id: "req_auth",
|
id: "req_auth",
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { describe, expect, test } from "bun:test"
|
import { describe, expect, test } from "bun:test"
|
||||||
import { Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
import { CacheHint, LLM, Message } from "../src/index.js"
|
import { CacheHint, LLM, Message } from "../src"
|
||||||
import { Auth } from "../src/route.js"
|
import { Auth } from "../src/route"
|
||||||
import { compileRequest } from "../src/route/client.js"
|
import { compileRequest } from "../src/route/client"
|
||||||
import { AmazonBedrock } from "../src/providers.js"
|
import { AmazonBedrock } from "../src/providers"
|
||||||
import * as AnthropicMessages from "../src/protocols/anthropic-messages.js"
|
import * as AnthropicMessages from "../src/protocols/anthropic-messages"
|
||||||
import * as Gemini from "../src/protocols/gemini.js"
|
import * as Gemini from "../src/protocols/gemini"
|
||||||
import * as OpenAIChat from "../src/protocols/openai-chat.js"
|
import * as OpenAIChat from "../src/protocols/openai-chat"
|
||||||
import { applyCachePolicy } from "../src/cache-policy.js"
|
import { applyCachePolicy } from "../src/cache-policy"
|
||||||
import { it } from "./lib/effect.js"
|
import { it } from "./lib/effect"
|
||||||
|
|
||||||
const anthropicModel = AnthropicMessages.route
|
const anthropicModel = AnthropicMessages.route
|
||||||
.with({ endpoint: { baseURL: "https://api.anthropic.test/v1/" }, auth: Auth.header("x-api-key", "test") })
|
.with({ endpoint: { baseURL: "https://api.anthropic.test/v1/" }, auth: Auth.header("x-api-key", "test") })
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { describe, expect, test } from "bun:test"
|
import { describe, expect, test } from "bun:test"
|
||||||
import { Effect, Ref, Schema } from "effect"
|
import { Effect, Ref, Schema } from "effect"
|
||||||
import { HttpClientRequest, HttpClientResponse } from "effect/unstable/http"
|
import { HttpClientRequest, HttpClientResponse } from "effect/unstable/http"
|
||||||
import { LLM, mergeProviderOptions } from "../src/index.js"
|
import { LLM, mergeProviderOptions } from "../src"
|
||||||
import { AnthropicMessages, OpenAIChat } from "../src/protocols.js"
|
import { AnthropicMessages, OpenAIChat } from "../src/protocols"
|
||||||
import { Auth, LLMClient } from "../src/route.js"
|
import { Auth, LLMClient } from "../src/route"
|
||||||
import { compileRequest } from "../src/route/client.js"
|
import { compileRequest } from "../src/route/client"
|
||||||
import { it } from "./lib/effect.js"
|
import { it } from "./lib/effect"
|
||||||
import { dynamicResponse } from "./lib/http.js"
|
import { dynamicResponse } from "./lib/http"
|
||||||
import { deltaChunk } from "./lib/openai-chunks.js"
|
import { deltaChunk } from "./lib/openai-chunks"
|
||||||
import { sseEvents } from "./lib/sse.js"
|
import { sseEvents } from "./lib/sse"
|
||||||
|
|
||||||
const TargetJson = Schema.fromJsonString(Schema.Unknown)
|
const TargetJson = Schema.fromJsonString(Schema.Unknown)
|
||||||
const decodeJson = Schema.decodeUnknownSync(TargetJson)
|
const decodeJson = Schema.decodeUnknownSync(TargetJson)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user