From 2108e254e0373d6114de2b479e2f2a5b9818dcff Mon Sep 17 00:00:00 2001 From: BENKAY Date: Tue, 1 Jul 2025 15:18:43 +0100 Subject: [PATCH 1/4] chore: change ollama model versions in CI --- .github/workflows/ci.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5d664e72..b3344846 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -115,13 +115,13 @@ jobs: set -e docker run -d --name ollama -p 11434:11434 ollama/ollama:latest timeout 60 bash -c 'until curl -f http://localhost:11434/api/version; do sleep 2; done' - echo "Pulling Qwen2.5:1.5b" - docker exec ollama ollama pull qwen2.5:1.5b - echo "Pulling Gemma2:2b" - docker exec ollama ollama pull gemma2:2b + echo "Pulling Qwen3:1.7b" + docker exec ollama ollama pull qwen3:1.7b + echo "Pulling Gemma3:4b" + docker exec ollama ollama pull gemma3:4b echo "Verifying models are available" - docker exec ollama ollama list | grep -q "qwen2.5:1.5b" || exit 1 - docker exec ollama ollama list | grep -q "gemma2:2b" || exit 1 + docker exec ollama ollama list | grep -q "qwen3:1.7b" || exit 1 + docker exec ollama ollama list | grep -q "gemma3:4b" || exit 1 echo "Ollama setup completed." - name: Install and Run latest Golem Server run: | From 9ea3c52149e2cf1f266b6d07b58fcf5d788a81cd Mon Sep 17 00:00:00 2001 From: Benjamin Chibuzor-Orie Date: Tue, 1 Jul 2025 21:53:43 +0100 Subject: [PATCH 2/4] chore: add error grep check to ollama integration suite --- .github/workflows/ci.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b3344846..fd8ae1f8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -142,13 +142,13 @@ jobs: golem-cli app build -b ollama-debug golem-cli app deploy -b ollama-debug golem-cli worker new -e GOLEM_OLLAMA_BASE_URL=http://localhost:11434 test:llm/ollama-1 - golem-cli worker invoke test:llm/ollama-1 test1 - golem-cli worker invoke test:llm/ollama-1 test2 - golem-cli worker invoke test:llm/ollama-1 test3 - golem-cli worker invoke test:llm/ollama-1 test4 - golem-cli worker invoke test:llm/ollama-1 test5 - golem-cli worker invoke test:llm/ollama-1 test6 - golem-cli worker invoke test:llm/ollama-1 test7 + golem-cli worker invoke test:llm/ollama-1 test1 | grep -v "ERROR: " + golem-cli worker invoke test:llm/ollama-1 test2 | grep -v "ERROR: " + golem-cli worker invoke test:llm/ollama-1 test3 | grep -v "ERROR: " + golem-cli worker invoke test:llm/ollama-1 test4 | grep -v "ERROR: " + golem-cli worker invoke test:llm/ollama-1 test5 | grep -v "ERROR: " + golem-cli worker invoke test:llm/ollama-1 test6 | grep -v "ERROR: " + golem-cli worker invoke test:llm/ollama-1 test7 | grep -v "ERROR: " publish-all: needs: - tests From d916c6981dde80e378a12a8ecbd2a683053046f2 Mon Sep 17 00:00:00 2001 From: Benjamin Chibuzor-Orie Date: Tue, 1 Jul 2025 21:54:28 +0100 Subject: [PATCH 3/4] chore: apply clippy recommendations --- .github/workflows/ci.yaml | 14 +++++++------- llm/anthropic/src/conversions.rs | 2 +- llm/grok/src/conversions.rs | 2 +- llm/llm/src/event_source/ndjson_stream.rs | 2 +- llm/llm/src/event_source/stream.rs | 6 +++--- llm/ollama/src/client.rs | 2 +- llm/ollama/src/conversions.rs | 2 +- llm/openai/src/conversions.rs | 2 +- llm/openrouter/src/conversions.rs | 2 +- test/components-rust/test-llm/Cargo.toml | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fd8ae1f8..d33ef0ab 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -142,13 +142,13 @@ jobs: golem-cli app build -b ollama-debug golem-cli app deploy -b ollama-debug golem-cli worker new -e GOLEM_OLLAMA_BASE_URL=http://localhost:11434 test:llm/ollama-1 - golem-cli worker invoke test:llm/ollama-1 test1 | grep -v "ERROR: " - golem-cli worker invoke test:llm/ollama-1 test2 | grep -v "ERROR: " - golem-cli worker invoke test:llm/ollama-1 test3 | grep -v "ERROR: " - golem-cli worker invoke test:llm/ollama-1 test4 | grep -v "ERROR: " - golem-cli worker invoke test:llm/ollama-1 test5 | grep -v "ERROR: " - golem-cli worker invoke test:llm/ollama-1 test6 | grep -v "ERROR: " - golem-cli worker invoke test:llm/ollama-1 test7 | grep -v "ERROR: " + golem-cli worker invoke test:llm/ollama-1 test1 | grep -v "ERROR: " || exit 1 + golem-cli worker invoke test:llm/ollama-1 test2 | grep -v "ERROR: " || exit 1 + golem-cli worker invoke test:llm/ollama-1 test3 | grep -v "ERROR: " || exit 1 + golem-cli worker invoke test:llm/ollama-1 test4 | grep -v "ERROR: " || exit 1 + golem-cli worker invoke test:llm/ollama-1 test5 | grep -v "ERROR: " || exit 1 + golem-cli worker invoke test:llm/ollama-1 test6 | grep -v "ERROR: " || exit 1 + golem-cli worker invoke test:llm/ollama-1 test7 | grep -v "ERROR: " || exit 1 publish-all: needs: - tests diff --git a/llm/anthropic/src/conversions.rs b/llm/anthropic/src/conversions.rs index e332f139..e7d3175a 100644 --- a/llm/anthropic/src/conversions.rs +++ b/llm/anthropic/src/conversions.rs @@ -130,7 +130,7 @@ pub fn process_response(response: MessagesResponse) -> ChatEvent { Err(e) => { return ChatEvent::Error(Error { code: ErrorCode::InvalidRequest, - message: format!("Failed to decode base64 image data: {}", e), + message: format!("Failed to decode base64 image data: {e}"), provider_error_json: None, }); } diff --git a/llm/grok/src/conversions.rs b/llm/grok/src/conversions.rs index 68a5d570..129c128a 100644 --- a/llm/grok/src/conversions.rs +++ b/llm/grok/src/conversions.rs @@ -183,7 +183,7 @@ fn convert_content_parts(contents: Vec) -> crate::client::Content { let media_type = &image_source.mime_type; // This is already a string result.push(crate::client::ContentPart::ImageInput { image_url: crate::client::ImageUrl { - url: format!("data:{};base64,{}", media_type, base64_data), + url: format!("data:{media_type};base64,{base64_data}"), detail: image_source.detail.map(|d| d.into()), }, }); diff --git a/llm/llm/src/event_source/ndjson_stream.rs b/llm/llm/src/event_source/ndjson_stream.rs index e2f4cc1b..1b8ef377 100644 --- a/llm/llm/src/event_source/ndjson_stream.rs +++ b/llm/llm/src/event_source/ndjson_stream.rs @@ -126,7 +126,7 @@ fn try_parse_line( return Ok(None); } - trace!("Parsed NDJSON line: {}", line); + trace!("Parsed NDJSON line: {line}"); // Create a MessageEvent with the JSON line as data let event = MessageEvent { diff --git a/llm/llm/src/event_source/stream.rs b/llm/llm/src/event_source/stream.rs index 8f293367..13a5eeb5 100644 --- a/llm/llm/src/event_source/stream.rs +++ b/llm/llm/src/event_source/stream.rs @@ -56,9 +56,9 @@ where { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { - Self::Utf8(err) => f.write_fmt(format_args!("UTF8 error: {}", err)), - Self::Parser(err) => f.write_fmt(format_args!("Parse error: {}", err)), - Self::Transport(err) => f.write_fmt(format_args!("Transport error: {}", err)), + Self::Utf8(err) => f.write_fmt(format_args!("UTF8 error: {err}")), + Self::Parser(err) => f.write_fmt(format_args!("Parse error: {err}")), + Self::Transport(err) => f.write_fmt(format_args!("Transport error: {err}")), } } } diff --git a/llm/ollama/src/client.rs b/llm/ollama/src/client.rs index e9514a8d..e2901e70 100644 --- a/llm/ollama/src/client.rs +++ b/llm/ollama/src/client.rs @@ -335,7 +335,7 @@ pub fn image_to_base64(source: &str) -> Result Error { Error { code: ErrorCode::InternalError, - message: format!("{}: {}", context, err), + message: format!("{context}: {err}"), provider_error_json: None, } } diff --git a/llm/ollama/src/conversions.rs b/llm/ollama/src/conversions.rs index b1db65c6..8d64e954 100644 --- a/llm/ollama/src/conversions.rs +++ b/llm/ollama/src/conversions.rs @@ -214,7 +214,7 @@ pub fn process_response(response: CompletionsResponse) -> ChatEvent { }; ChatEvent::Message(CompleteResponse { - id: format!("ollama-{}", timestamp), + id: format!("ollama-{timestamp}"), content, tool_calls, metadata, diff --git a/llm/openai/src/conversions.rs b/llm/openai/src/conversions.rs index 43694c0f..a4989b0c 100644 --- a/llm/openai/src/conversions.rs +++ b/llm/openai/src/conversions.rs @@ -138,7 +138,7 @@ pub fn content_part_to_inner_input_item(content_part: ContentPart) -> InnerInput ImageReference::Inline(image_source) => { let base64_data = general_purpose::STANDARD.encode(&image_source.data); let mime_type = &image_source.mime_type; // This is already a string - let data_url = format!("data:{};base64,{}", mime_type, base64_data); + let data_url = format!("data:{mime_type};base64,{base64_data}"); InnerInputItem::ImageInput { image_url: data_url, diff --git a/llm/openrouter/src/conversions.rs b/llm/openrouter/src/conversions.rs index d4db2d34..61b5f973 100644 --- a/llm/openrouter/src/conversions.rs +++ b/llm/openrouter/src/conversions.rs @@ -184,7 +184,7 @@ fn convert_content_parts(contents: Vec) -> crate::client::Content { let media_type = &image_source.mime_type; // This is already a string result.push(crate::client::ContentPart::ImageInput { image_url: crate::client::ImageUrl { - url: format!("data:{};base64,{}", media_type, base64_data), + url: format!("data:{media_type};base64,{base64_data}"), detail: image_source.detail.map(|d| d.into()), }, }); diff --git a/test/components-rust/test-llm/Cargo.toml b/test/components-rust/test-llm/Cargo.toml index 7f624287..ca8b9eb7 100644 --- a/test/components-rust/test-llm/Cargo.toml +++ b/test/components-rust/test-llm/Cargo.toml @@ -37,8 +37,8 @@ path = "wit-generated" [package.metadata.component.target.dependencies] "golem:llm" = { path = "wit-generated/deps/golem-llm" } -"wasi:clocks" = { path = "wit-generated/deps/clocks" } "wasi:io" = { path = "wit-generated/deps/io" } +"wasi:clocks" = { path = "wit-generated/deps/clocks" } "golem:rpc" = { path = "wit-generated/deps/golem-rpc" } "test:helper-client" = { path = "wit-generated/deps/test_helper-client" } "test:llm-exports" = { path = "wit-generated/deps/test_llm-exports" } From 727d811185ffedd15e43d163054d349b5c5c3422 Mon Sep 17 00:00:00 2001 From: Benjamin Chibuzor-Orie Date: Fri, 4 Jul 2025 21:58:16 +0100 Subject: [PATCH 4/4] chore: use only golem binary in ci.yaml --- .github/workflows/ci.yaml | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d33ef0ab..903fa685 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -108,7 +108,6 @@ jobs: run: | set -e cargo binstall --force --locked cargo-component@0.21.1 - cargo binstall golem-cli@1.2.3 --locked --force --no-confirm cargo binstall wac-cli --locked --force --no-confirm - name: Start Ollama in Docker run: | @@ -139,16 +138,16 @@ jobs: set -e cargo make --cwd llm build-ollama cd test - golem-cli app build -b ollama-debug - golem-cli app deploy -b ollama-debug - golem-cli worker new -e GOLEM_OLLAMA_BASE_URL=http://localhost:11434 test:llm/ollama-1 - golem-cli worker invoke test:llm/ollama-1 test1 | grep -v "ERROR: " || exit 1 - golem-cli worker invoke test:llm/ollama-1 test2 | grep -v "ERROR: " || exit 1 - golem-cli worker invoke test:llm/ollama-1 test3 | grep -v "ERROR: " || exit 1 - golem-cli worker invoke test:llm/ollama-1 test4 | grep -v "ERROR: " || exit 1 - golem-cli worker invoke test:llm/ollama-1 test5 | grep -v "ERROR: " || exit 1 - golem-cli worker invoke test:llm/ollama-1 test6 | grep -v "ERROR: " || exit 1 - golem-cli worker invoke test:llm/ollama-1 test7 | grep -v "ERROR: " || exit 1 + golem app build -b ollama-debug + golem app deploy -b ollama-debug + golem worker new -e GOLEM_OLLAMA_BASE_URL=http://localhost:11434 test:llm/ollama-1 + golem worker invoke test:llm/ollama-1 test1 | grep -v "ERROR: " || exit 1 + golem worker invoke test:llm/ollama-1 test2 | grep -v "ERROR: " || exit 1 + golem worker invoke test:llm/ollama-1 test3 | grep -v "ERROR: " || exit 1 + golem worker invoke test:llm/ollama-1 test4 | grep -v "ERROR: " || exit 1 + golem worker invoke test:llm/ollama-1 test5 | grep -v "ERROR: " || exit 1 + golem worker invoke test:llm/ollama-1 test6 | grep -v "ERROR: " || exit 1 + golem worker invoke test:llm/ollama-1 test7 | grep -v "ERROR: " || exit 1 publish-all: needs: - tests