Single-commit clean baseline after security scrub of niche-tells, project codenames, internal jargon, and contributor-email leaks. Contents: - 100 Rust crates (_primitives/_rust/) - 37 agent manifests (_manifests/) + generated specs (_generated/) - 67 user-invocable skills (skills/) - 33 hooks (hooks/) - Composition blocks (_blocks/) - Documentation (docs/, README.md) - TS adapter packages (_ts_packages/) - Assembler (_assembler/) - Roles (_roles/) - Templates (_templates/) - Forgejo CI (.forgejo/) Author: Denis Parfionovich <info@greendragon.info> License: see LICENSE.
38 lines
1.1 KiB
Rust
38 lines
1.1 KiB
Rust
//! Non-streaming `/api/generate` against wiremock.
|
|
|
|
use kei_llm_ollama::{Client, GenerateReq};
|
|
use wiremock::matchers::{method, path};
|
|
use wiremock::{Mock, MockServer, ResponseTemplate};
|
|
|
|
fn fixture() -> serde_json::Value {
|
|
serde_json::json!({
|
|
"model": "qwen3:4b",
|
|
"created_at": "2025-04-01T00:00:00Z",
|
|
"response": "Hello!",
|
|
"done": true,
|
|
"eval_count": 5,
|
|
"eval_duration": 9999
|
|
})
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn generate_decodes_response() {
|
|
let server = MockServer::start().await;
|
|
Mock::given(method("POST"))
|
|
.and(path("/api/generate"))
|
|
.respond_with(ResponseTemplate::new(200).set_body_json(fixture()))
|
|
.mount(&server)
|
|
.await;
|
|
|
|
let client = Client::new(server.uri());
|
|
let req = GenerateReq {
|
|
model: "qwen3:4b".into(),
|
|
prompt: "hi".into(),
|
|
stream: false,
|
|
options: None,
|
|
};
|
|
let resp = client.generate(&req).await.expect("generate ok");
|
|
assert!(resp.done);
|
|
assert_eq!(resp.response, "Hello!");
|
|
assert_eq!(resp.eval_count, Some(5));
|
|
}
|