Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions test/src/ai.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
use worker::{
models::llama_4_scout_17b_16e_instruct::Llama4Scout17b16eInstruct,
worker_sys::AiTextGenerationInput, Env, Request, Response, Result,
};

use crate::SomeSharedData;

const AI_TEST: &str = "AI_TEST";

#[worker::send]
pub async fn simple_ai_text_generation(
_: Request,
env: Env,
_data: SomeSharedData,
) -> Result<Response> {
let ai = env
.ai(AI_TEST)?
.run::<Llama4Scout17b16eInstruct>(
AiTextGenerationInput::new()
.set_prompt("What is the answer to life the universe and everything?"),
)
.await?;
Response::ok(ai.get_response().unwrap_or_default())
}

#[worker::send]
pub async fn streaming_ai_text_generation(
_: Request,
env: Env,
_data: SomeSharedData,
) -> Result<Response> {
let stream = env
.ai(AI_TEST)?
.run_streaming::<Llama4Scout17b16eInstruct>(
AiTextGenerationInput::new()
.set_prompt("What is the answer to life the universe and everything?"),
)
.await?;

Response::from_stream(stream)
}
1 change: 1 addition & 0 deletions test/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use worker::{console_log, event, js_sys, wasm_bindgen, Env, Result};
#[cfg(not(feature = "http"))]
use worker::{Request, Response};

mod ai;
mod alarm;
mod analytics_engine;
mod assets;
Expand Down
8 changes: 5 additions & 3 deletions test/src/router.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::{
alarm, analytics_engine, assets, auto_response, cache, container, counter, d1, durable, fetch,
form, js_snippets, kv, put_raw, queue, r2, request, secret_store, service, socket, sql_counter,
sql_iterator, user, ws, SomeSharedData, GLOBAL_STATE,
ai, alarm, analytics_engine, assets, auto_response, cache, container, counter, d1, durable,
fetch, form, js_snippets, kv, put_raw, queue, r2, request, secret_store, service, socket,
sql_counter, sql_iterator, user, ws, SomeSharedData, GLOBAL_STATE,
};
#[cfg(feature = "http")]
use std::convert::TryInto;
Expand Down Expand Up @@ -112,6 +112,8 @@ macro_rules! add_route (

macro_rules! add_routes (
($obj:ident) => {
add_route!($obj, get, "/ai", ai::simple_ai_text_generation);
add_route!($obj, get, "/ai/streaming", ai::streaming_ai_text_generation);
add_route!($obj, get, sync, "/request", request::handle_a_request);
add_route!($obj, get, "/analytics-engine", analytics_engine::handle_analytics_event);
add_route!($obj, get, "/async-request", request::handle_async_request);
Expand Down
11 changes: 11 additions & 0 deletions test/tests/ai.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { describe, expect, test } from "vitest";
import { mf, mfUrl } from "./mf";

async function runTest() {
let normal_response = await mf.dispatchFetch(`${mfUrl}ai`);
expect(normal_response.status).toBe(200);

let streaming_response = await mf.dispatchFetch(`${mfUrl}ai/streaming`);
expect(streaming_response.status).toBe(200);
}
describe("ai", runTest);
25 changes: 14 additions & 11 deletions test/wrangler.toml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
name = "testing-rust-worker"
workers_dev = true
compatibility_date = "2025-09-23" # required
compatibility_date = "2025-09-23" # required
main = "build/worker/shim.mjs"

kv_namespaces = [
{ binding = "SOME_NAMESPACE", id = "SOME_NAMESPACE", preview_id = "SOME_NAMESPACE" },
{ binding = "FILE_SIZES", id = "FILE_SIZES", preview_id = "FILE_SIZES" },
{ binding = "SOME_NAMESPACE", id = "SOME_NAMESPACE", preview_id = "SOME_NAMESPACE" },
{ binding = "FILE_SIZES", id = "FILE_SIZES", preview_id = "FILE_SIZES" },
]

[vars]
Expand All @@ -22,14 +22,14 @@ service = "remote-service"

[durable_objects]
bindings = [
{ name = "COUNTER", class_name = "Counter" },
{ name = "ALARM", class_name = "AlarmObject" },
{ name = "PUT_RAW_TEST_OBJECT", class_name = "PutRawTestObject" },
{ name = "AUTO", class_name = "AutoResponseObject" },
{ name = "SQL_COUNTER", class_name = "SqlCounter" },
{ name = "SQL_ITERATOR", class_name = "SqlIterator" },
{ name = "MY_CLASS", class_name = "MyClass" },
{ name = "ECHO_CONTAINER", class_name = "EchoContainer" },
{ name = "COUNTER", class_name = "Counter" },
{ name = "ALARM", class_name = "AlarmObject" },
{ name = "PUT_RAW_TEST_OBJECT", class_name = "PutRawTestObject" },
{ name = "AUTO", class_name = "AutoResponseObject" },
{ name = "SQL_COUNTER", class_name = "SqlCounter" },
{ name = "SQL_ITERATOR", class_name = "SqlIterator" },
{ name = "MY_CLASS", class_name = "MyClass" },
{ name = "ECHO_CONTAINER", class_name = "EchoContainer" },
]

[[analytics_engine_datasets]]
Expand Down Expand Up @@ -84,3 +84,6 @@ secret_name = "secret-name"
class_name = "EchoContainer"
image = "./container-echo/Dockerfile"
max_instances = 1

[ai]
binding = "AI_TEST"
47 changes: 24 additions & 23 deletions worker-sys/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,34 +10,35 @@ description = "Low-level extern definitions / FFI bindings to the Cloudflare Wor
[dependencies]
js-sys.workspace = true
wasm-bindgen.workspace = true

cfg-if = "1.0.1"

[dependencies.web-sys]
version = "0.3.70"
features = [
"ReadableStream",
"WritableStream",
"RequestRedirect",
"RequestInit",
"FormData",
"Blob",
"BinaryType",
"ErrorEvent",
"MessageEvent",
"CloseEvent",
"ProgressEvent",
"WebSocket",
"TransformStream",
"AbortController",
"console",
"ResponseInit",
"Cache",
"CacheStorage",
"CacheQueryOptions",
"AbortSignal",
"Headers",
"Request",
"Response",
"ReadableStream",
"WritableStream",
"RequestRedirect",
"RequestInit",
"FormData",
"Blob",
"BinaryType",
"ErrorEvent",
"MessageEvent",
"CloseEvent",
"ProgressEvent",
"WebSocket",
"TransformStream",
"AbortController",
"console",
"ResponseInit",
"Cache",
"CacheStorage",
"CacheQueryOptions",
"AbortSignal",
"Headers",
"Request",
"Response",
]

[features]
Expand Down
1 change: 1 addition & 0 deletions worker-sys/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,4 @@ pub use tls_client_auth::*;
pub use version::*;
pub use websocket_pair::*;
pub use websocket_request_response_pair::*;
pub mod utils;
Loading