Skip to content

Commit 6236dc4

Browse files
committed
feat: integrated aws bedrock in golem-llm
1 parent e81cb2a commit 6236dc4

File tree

16 files changed

+2497
-2
lines changed

16 files changed

+2497
-2
lines changed

Cargo.lock

Lines changed: 826 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ resolver = "2"
44
members = [
55
"llm",
66
"llm-anthropic",
7+
"llm-bedrock",
78
"llm-grok",
89
"llm-ollama",
910
"llm-openai",

Makefile.toml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ args = ["clean"]
1010
command = "cargo"
1111
args = ["test"]
1212

13+
[tasks.build-bedrock]
14+
install_crate = { crate_name = "cargo-component", version = "0.20.0" }
15+
command = "cargo-component"
16+
args = ["build", "-p", "golem-llm-bedrock"]
17+
18+
19+
[tasks.build-bedrock-portable]
20+
install_crate = { crate_name = "cargo-component", version = "0.20.0" }
21+
command = "cargo-component"
22+
args = ["build", "-p", "golem-llm-bedrock", "--no-default-features"]
23+
1324
[tasks.build-ollama]
1425
install_crate = { crate_name = "cargo-component", version = "0.20.0" }
1526
command = "cargo-component"
@@ -69,6 +80,7 @@ dependencies = [
6980
"build-openai",
7081
"build-openrouter",
7182
"build-ollama",
83+
"build-bedrock",
7284
]
7385

7486
[tasks.build-portable]
@@ -78,6 +90,7 @@ dependencies = [
7890
"build-openai-portable",
7991
"build-openrouter-portable",
8092
"build-ollama-portable",
93+
"build-bedrock-portable",
8194
]
8295

8396
[tasks.build-all]
@@ -93,6 +106,7 @@ cp target/wasm32-wasip1/debug/golem_llm_grok.wasm components/debug/golem_llm_gro
93106
cp target/wasm32-wasip1/debug/golem_llm_openai.wasm components/debug/golem_llm_openai.wasm
94107
cp target/wasm32-wasip1/debug/golem_llm_openrouter.wasm components/debug/golem_llm_openrouter.wasm
95108
cp target/wasm32-wasip1/debug/golem_llm_ollama.wasm components/debug/golem_llm_ollama.wasm
109+
cp target/wasm32-wasip1/debug/golem_llm_bedrock.wasm components/debug/golem_llm_bedrock.wasm
96110
97111
cm_run_task clean
98112
cm_run_task build-portable
@@ -102,8 +116,25 @@ cp target/wasm32-wasip1/debug/golem_llm_grok.wasm components/debug/golem_llm_gro
102116
cp target/wasm32-wasip1/debug/golem_llm_openai.wasm components/debug/golem_llm_openai-portable.wasm
103117
cp target/wasm32-wasip1/debug/golem_llm_openrouter.wasm components/debug/golem_llm_openrouter-portable.wasm
104118
cp target/wasm32-wasip1/debug/golem_llm_ollama.wasm components/debug/golem_llm_ollama-portable.wasm
119+
cp target/wasm32-wasip1/debug/golem_llm_bedrock.wasm components/debug/golem_llm_bedrock-portable.wasm
105120
'''
106121

122+
[tasks.release-build-bedrock]
123+
install_crate = { crate_name = "cargo-component", version = "0.20.0" }
124+
command = "cargo-component"
125+
args = ["build", "-p", "golem-llm-bedrock", "--release"]
126+
127+
[tasks.release-build-bedrock-portable]
128+
install_crate = { crate_name = "cargo-component", version = "0.20.0" }
129+
command = "cargo-component"
130+
args = [
131+
"build",
132+
"-p",
133+
"golem-llm-bedrock",
134+
"--release",
135+
"--no-default-features",
136+
]
137+
107138
[tasks.release-build-ollama]
108139
install_crate = { crate_name = "cargo-component", version = "0.20.0" }
109140
command = "cargo-component"
@@ -174,6 +205,7 @@ dependencies = [
174205
"release-build-openai",
175206
"release-build-openrouter",
176207
"release-build-ollama",
208+
"release-build-bedrock",
177209
]
178210

179211
[tasks.release-build-portable]
@@ -183,6 +215,7 @@ dependencies = [
183215
"release-build-openai-portable",
184216
"release-build-openrouter-portable",
185217
"release-build-ollama-portable",
218+
"release-build-bedrock-portable",
186219
]
187220

188221
[tasks.release-build-all]
@@ -200,6 +233,7 @@ cp target/wasm32-wasip1/release/golem_llm_grok.wasm components/release/golem_llm
200233
cp target/wasm32-wasip1/release/golem_llm_openai.wasm components/release/golem_llm_openai.wasm
201234
cp target/wasm32-wasip1/release/golem_llm_openrouter.wasm components/release/golem_llm_openrouter.wasm
202235
cp target/wasm32-wasip1/release/golem_llm_ollama.wasm components/release/golem_llm_ollama.wasm
236+
cp target/wasm32-wasip1/release/golem_llm_bedrock.wasm components/release/golem_llm_bedrock.wasm
203237
204238
cm_run_task clean
205239
cm_run_task release-build-portable
@@ -209,6 +243,7 @@ cp target/wasm32-wasip1/release/golem_llm_grok.wasm components/release/golem_llm
209243
cp target/wasm32-wasip1/release/golem_llm_openai.wasm components/release/golem_llm_openai-portable.wasm
210244
cp target/wasm32-wasip1/release/golem_llm_openrouter.wasm components/release/golem_llm_openrouter-portable.wasm
211245
cp target/wasm32-wasip1/release/golem_llm_ollama.wasm components/release/golem_llm_ollama-portable.wasm
246+
cp target/wasm32-wasip1/release/golem_llm_bedrock.wasm components/release/golem_llm_bedrock-portable.wasm
212247
'''
213248

214249
[tasks.wit-update]
@@ -256,6 +291,10 @@ rm -r llm-ollama/wit/deps
256291
mkdir llm-ollama/wit/deps/golem-llm
257292
cp wit/golem-llm.wit llm-ollama/wit/deps/golem-llm/golem-llm.wit
258293
cp wit/deps/wasi:io llm-ollama/wit/deps
294+
rm -r llm-bedrock/wit/deps
295+
mkdir llm-bedrock/wit/deps/golem-llm
296+
cp wit/golem-llm.wit llm-bedrock/wit/deps/golem-llm/golem-llm.wit
297+
cp wit/deps/wasi:io llm-bedrock/wit/deps
259298
260299
261300
rm -r test/wit
@@ -327,6 +366,8 @@ golem-cli app clean
327366
golem-cli app build -b openrouter-debug
328367
golem-cli app clean
329368
golem-cli app build -b ollama-debug
369+
golem-cli app clean
370+
golem-cli app build -b bedrock-debug
330371
'''
331372

332373

llm-bedrock/Cargo.toml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
[package]
2+
name = "golem-llm-bedrock"
3+
version = "0.0.0"
4+
edition = "2021"
5+
license = "Apache-2.0"
6+
homepage = "https://golem.cloud"
7+
repository = "https://github.com/golemcloud/golem-llm"
8+
description = "WebAssembly component for working with Amazon Bedrock APIs, with special support for Golem Cloud"
9+
10+
[dependencies]
11+
golem-llm = { path = "../llm", version = "0.0.0", default-features = false }
12+
13+
# AWS SDK crates
14+
aws-config = { version = "1.5.19", default-features = false, features = [
15+
"behavior-version-latest",
16+
] }
17+
aws-types = { version = "1.3.4", default-features = false }
18+
aws-smithy-wasm = { version = "0.1.4", default-features = false }
19+
aws-sdk-bedrockruntime = { version = "1.56.0", default-features = false }
20+
aws-smithy-types = { version = "1.3.1" }
21+
22+
tokio = { version = "1.43.0", features = ["rt", "sync", "time"] }
23+
24+
# To infer mime types of downloaded images before passing to bedrock
25+
infer = { version = "0.19.0", default-features = false }
26+
27+
golem-rust = { workspace = true }
28+
log = { workspace = true }
29+
reqwest = { workspace = true }
30+
serde = { workspace = true }
31+
serde_json = { workspace = true }
32+
wit-bindgen-rt = { workspace = true }
33+
base64 = { workspace = true }
34+
35+
[lib]
36+
crate-type = ["cdylib"]
37+
path = "src/lib.rs"
38+
39+
[features]
40+
default = ["durability"]
41+
durability = ["golem-rust/durability", "golem-llm/durability"]
42+
43+
[package.metadata.component]
44+
package = "golem:llm-bedrock"
45+
46+
[package.metadata.component.bindings]
47+
generate_unused_types = true
48+
49+
[package.metadata.component.bindings.with]
50+
"golem:llm/llm@1.0.0" = "golem_llm::golem::llm::llm"
51+
52+
[package.metadata.component.target]
53+
path = "wit"
54+
55+
[package.metadata.component.target.dependencies]
56+
"golem:llm" = { path = "wit/deps/golem-llm" }
57+
"wasi:io" = { path = "wit/deps/wasi:io" }

llm-bedrock/src/bindings.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Generated by `wit-bindgen` 0.36.0. DO NOT EDIT!
2+
// Options used:
3+
// * runtime_path: "wit_bindgen_rt"
4+
// * with "golem:llm/llm@1.0.0" = "golem_llm::golem::llm::llm"
5+
// * generate_unused_types
6+
use golem_llm::golem::llm::llm as __with_name0;
7+
#[cfg(target_arch = "wasm32")]
8+
#[link_section = "component-type:wit-bindgen:0.36.0:golem:llm-bedrock@1.0.0:llm-library:encoded world"]
9+
#[doc(hidden)]
10+
pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 1760] = *b"\
11+
\0asm\x0d\0\x01\0\0\x19\x16wit-component-encoding\x04\0\x07\xde\x0c\x01A\x02\x01\
12+
A\x02\x01BO\x01m\x04\x04user\x09assistant\x06system\x04tool\x04\0\x04role\x03\0\0\
13+
\x01m\x06\x0finvalid-request\x15authentication-failed\x13rate-limit-exceeded\x0e\
14+
internal-error\x0bunsupported\x07unknown\x04\0\x0aerror-code\x03\0\x02\x01m\x06\x04\
15+
stop\x06length\x0atool-calls\x0econtent-filter\x05error\x05other\x04\0\x0dfinish\
16+
-reason\x03\0\x04\x01m\x03\x03low\x04high\x04auto\x04\0\x0cimage-detail\x03\0\x06\
17+
\x01k\x07\x01r\x02\x03urls\x06detail\x08\x04\0\x09image-url\x03\0\x09\x01p}\x01r\
18+
\x03\x04data\x0b\x09mime-types\x06detail\x08\x04\0\x0cimage-source\x03\0\x0c\x01\
19+
q\x02\x03url\x01\x0a\0\x06inline\x01\x0d\0\x04\0\x0fimage-reference\x03\0\x0e\x01\
20+
q\x02\x04text\x01s\0\x05image\x01\x0f\0\x04\0\x0ccontent-part\x03\0\x10\x01ks\x01\
21+
p\x11\x01r\x03\x04role\x01\x04name\x12\x07content\x13\x04\0\x07message\x03\0\x14\
22+
\x01r\x03\x04names\x0bdescription\x12\x11parameters-schemas\x04\0\x0ftool-defini\
23+
tion\x03\0\x16\x01r\x03\x02ids\x04names\x0earguments-jsons\x04\0\x09tool-call\x03\
24+
\0\x18\x01ky\x01r\x04\x02ids\x04names\x0bresult-jsons\x11execution-time-ms\x1a\x04\
25+
\0\x0ctool-success\x03\0\x1b\x01r\x04\x02ids\x04names\x0derror-messages\x0aerror\
26+
-code\x12\x04\0\x0ctool-failure\x03\0\x1d\x01q\x02\x07success\x01\x1c\0\x05error\
27+
\x01\x1e\0\x04\0\x0btool-result\x03\0\x1f\x01r\x02\x03keys\x05values\x04\0\x02kv\
28+
\x03\0!\x01kv\x01ps\x01k$\x01p\x17\x01p\"\x01r\x07\x05models\x0btemperature#\x0a\
29+
max-tokens\x1a\x0estop-sequences%\x05tools&\x0btool-choice\x12\x10provider-optio\
30+
ns'\x04\0\x06config\x03\0(\x01r\x03\x0cinput-tokens\x1a\x0doutput-tokens\x1a\x0c\
31+
total-tokens\x1a\x04\0\x05usage\x03\0*\x01k\x05\x01k+\x01r\x05\x0dfinish-reason,\
32+
\x05usage-\x0bprovider-id\x12\x09timestamp\x12\x16provider-metadata-json\x12\x04\
33+
\0\x11response-metadata\x03\0.\x01p\x19\x01r\x04\x02ids\x07content\x13\x0atool-c\
34+
alls0\x08metadata/\x04\0\x11complete-response\x03\01\x01r\x03\x04code\x03\x07mes\
35+
sages\x13provider-error-json\x12\x04\0\x05error\x03\03\x01q\x03\x07message\x012\0\
36+
\x0ctool-request\x010\0\x05error\x014\0\x04\0\x0achat-event\x03\05\x01k\x13\x01k\
37+
0\x01r\x02\x07content7\x0atool-calls8\x04\0\x0cstream-delta\x03\09\x01q\x03\x05d\
38+
elta\x01:\0\x06finish\x01/\0\x05error\x014\0\x04\0\x0cstream-event\x03\0;\x04\0\x0b\
39+
chat-stream\x03\x01\x01h=\x01p<\x01k?\x01@\x01\x04self>\0\xc0\0\x04\0\x1c[method\
40+
]chat-stream.get-next\x01A\x01@\x01\x04self>\0?\x04\0%[method]chat-stream.blocki\
41+
ng-get-next\x01B\x01p\x15\x01@\x02\x08messages\xc3\0\x06config)\06\x04\0\x04send\
42+
\x01D\x01o\x02\x19\x20\x01p\xc5\0\x01@\x03\x08messages\xc3\0\x0ctool-results\xc6\
43+
\0\x06config)\06\x04\0\x08continue\x01G\x01i=\x01@\x02\x08messages\xc3\0\x06conf\
44+
ig)\0\xc8\0\x04\0\x06stream\x01I\x04\0\x13golem:llm/llm@1.0.0\x05\0\x04\0#golem:\
45+
llm-bedrock/llm-library@1.0.0\x04\0\x0b\x11\x01\0\x0bllm-library\x03\0\0\0G\x09p\
46+
roducers\x01\x0cprocessed-by\x02\x0dwit-component\x070.220.0\x10wit-bindgen-rust\
47+
\x060.36.0";
48+
#[inline(never)]
49+
#[doc(hidden)]
50+
pub fn __link_custom_section_describing_imports() {
51+
wit_bindgen_rt::maybe_link_cabi_realloc();
52+
}

0 commit comments

Comments
 (0)