commit 87ea717c5557137118ca21936f51ba2a4335d9ce from: mtmn date: Sun Jul 26 20:07:01 2026 UTC rename cogni to alpaca commit - 4a8a5e56a9baa6631fdb1cc3d3d6afc73d8f1596 commit + 87ea717c5557137118ca21936f51ba2a4335d9ce blob - 16a1c72b20bb79ebf413b707d0a2e0d956255bfe blob + c02e98ea7b07a46bf8ba63b280dbc65b3df52f21 --- Cargo.lock +++ Cargo.lock @@ -12,6 +12,27 @@ dependencies = [ ] [[package]] +name = "alpaca" +version = "0.2.1" +dependencies = [ + "anyhow", + "assert_cmd", + "assert_fs", + "chrono", + "clap", + "derive_builder", + "env_logger", + "log", + "mockito", + "predicates", + "reqwest", + "serde", + "serde_json", + "thiserror", + "tokio", +] + +[[package]] name = "android_system_properties" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -228,27 +249,6 @@ source = "registry+https://github.com/rust-lang/crates checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] -name = "cogni" -version = "0.2.1" -dependencies = [ - "anyhow", - "assert_cmd", - "assert_fs", - "chrono", - "clap", - "derive_builder", - "env_logger", - "log", - "mockito", - "predicates", - "reqwest", - "serde", - "serde_json", - "thiserror", - "tokio", -] - -[[package]] name = "colorchoice" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" blob - 75904f22dbbe66c78bfa441847e162e74555543b blob + 49047ee3e7411913dd12cb077150b068a110877d --- Cargo.toml +++ Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "cogni" +name = "alpaca" authors = ["leoshimo"] version = "0.2.1" edition = "2024" blob - 44bad23e5815399eef88ca35390aadfa6c6d51a7 blob + c0959e18ee10a3297a3bbfba87961ff6ad3f7a7b --- README.md +++ README.md @@ -1,4 +1,4 @@ -# cogni +# alpaca [![Rust](https://github.com/leoshimo/cogni/actions/workflows/rust.yml/badge.svg)](https://github.com/leoshimo/cogni/actions/workflows/rust.yml) @@ -6,14 +6,14 @@ Unix native interface for interacting with LLMs. ## Focus -`cogni` brings language model scripting (prompting) into familiar Unix +`alpaca` brings language model scripting (prompting) into familiar Unix environment by focusing on: - Ergonomics and accessibility in Unix shell -- Composability and interop with other programs - including `cogni` itself +- Composability and interop with other programs - including `alpaca` itself - Ease of language model programming in both ad-hoc and repeatable manner -For example, designing for IO redirection (`stdin`, `stdout`) allows `cogni` to +For example, designing for IO redirection (`stdin`, `stdout`) allows `alpaca` to work with files, editor buffers, clipboards, syslogs, sockets, and many external tools without bespoke integrations. @@ -27,13 +27,13 @@ tools without bespoke integrations. ## Non-Features -- Interactive use - instead, invoke `cogni` from within interactive environments (REPLs, emacs, etc) +- Interactive use - instead, invoke `alpaca` from within interactive environments (REPLs, emacs, etc) ## Installation ```sh # Install from crates.io -$ cargo install cogni +$ cargo install alpaca # From source $ cargo install --path . @@ -41,7 +41,7 @@ $ cargo install --path . ## Setup -`cogni` talks to the [Ollama Cloud API](https://docs.ollama.com/cloud). It +`alpaca` talks to the [Ollama Cloud API](https://docs.ollama.com/cloud). It expects an Ollama API Key (create one at ) supplied via the `--apikey` option or more conveniently the `OLLAMA_API_KEY` environment variable: @@ -65,27 +65,27 @@ Pick a model with `-m/--model` (default `gpt-oss:120b` ## Basic Usage -See `cogni --help` for documentation +See `alpaca --help` for documentation ```sh # Via stdin -$ echo "What is 50 + 50?" | cogni +$ echo "What is 50 + 50?" | alpaca 50 + 50 equals 100. # Via file $ echo "What is 50 + 50?" > input.txt -$ cogni input.txt +$ alpaca input.txt 50 + 50 equals 100. # Via flags # -s, --system Sets system prompt (Always first) # -a, --assistant Appends assistant message # -u, --user Appends user message -$ cogni --system "Solve the following math problem" --user "50 + 50" +$ alpaca --system "Solve the following math problem" --user "50 + 50" 50 + 50 equals 100. # Via repetitions of same flags. Useful for few-shot prompting -$ cogni --system "Solve the following math problem" \ +$ alpaca --system "Solve the following math problem" \ -u "1 + 1" \ -a "2" \ -u "22 + 20" \ @@ -94,7 +94,7 @@ $ cogni --system "Solve the following math problem" \ 100 # Via both flags and stdin. Flag messages come before stdin / file -$ echo "50 + 50" | cogni --system "Solve the following math problem" \ +$ echo "50 + 50" | alpaca --system "Solve the following math problem" \ -u "1 + 1" \ -a "2" \ -u "22 + 20" \ @@ -104,85 +104,85 @@ $ echo "50 + 50" | cogni --system "Solve the following --- -## Tour of cogni +## Tour of alpaca An gallery of examples to get the inspiration flowing -> :warning: `cogni` uses the [Ollama Cloud API](https://docs.ollama.com/cloud), thus *any data fed into program will be sent to Ollama* (unless you point `OLLAMA_API_ENDPOINT` at a local server). +> :warning: `alpaca` uses the [Ollama Cloud API](https://docs.ollama.com/cloud), thus *any data fed into program will be sent to Ollama* (unless you point `OLLAMA_API_ENDPOINT` at a local server). ### In the Shell ```sh # Creating Summary of Meeting Transcripts $ cat meeting_saved_chat.txt \ - | cogni -s "Extract the links mentioned in this transcript, and provide a high level summary of the discussion points" + | alpaca -s "Extract the links mentioned in this transcript, and provide a high level summary of the discussion points" # Narrate Weather Summary $ curl -s "wttr.in/?1" \ - | cogni -s "Summarize today's weather using the output. Respond in 1 short sentence." \ + | alpaca -s "Summarize today's weather using the output. Respond in 1 short sentence." \ | say # Create a ffmpeg cheatsheet from man page $ man ffmpeg \ - | cogni -T 300 -s "Create a cheatsheet given a man page. Output should be in Markdown, and should be a set of example usages under headings." \ + | alpaca -T 300 -s "Create a cheatsheet given a man page. Output should be in Markdown, and should be a set of example usages under headings." \ > cheatsheet.md # Create a commit message for staged changes $ git diff --staged \ - | cogni -s "Create a commit message for the given staged changes. Use conventional commit format. Answer in a single-line raw plaintext. Don't use markdown." \ + | alpaca -s "Create a commit message for the given staged changes. Use conventional commit format. Answer in a single-line raw plaintext. Don't use markdown." \ | git commit -F - ``` -### `cogni_shell` - Example Interactive Shell as a Shell Script +### `alpaca_shell` - Example Interactive Shell as a Shell Script -As an example scripting with `cogni` a "chat" interface is provided at `bin/cogni_shell`. +As an example scripting with `alpaca` a "chat" interface is provided at `bin/alpaca_shell`. It is a simple (~90 LOC) but a fun and illustrative toy: ```sh -$ ./bin/cogni_shell +$ ./bin/alpaca_shell -cogni> what markdown files here? +alpaca> what markdown files here? + ls *.md README.md -cogni> open it in text edit +alpaca> open it in text edit + open -a TextEdit README.md -cogni> find all rust files in this directory. Open in text edit +alpaca> find all rust files in this directory. Open in text edit + open -a TextEdit $(find . -type f -iname '*.rs') -cogni> pause music +alpaca> pause music + osascript -e 'tell application "Music" to pause' -cogni> in 3 secs, show a notif saying "Hey". Also say it +alpaca> in 3 secs, show a notif saying "Hey". Also say it + sleep 3 && osascript -e 'display notification "Hey"' && say "Hey" -cogni> what safari tabs are open +alpaca> what safari tabs are open + osascript -e 'tell application "Safari" to get the name of every tab of every window & the URL of every tab of every window' leoshimo/cogni: Unix native interface to LLMs, https://github.com/leoshimo/cogni -cogni> look at readme, say a quick summary of it +alpaca> look at readme, say a quick summary of it + cat README.md [.. snip ..] -The README.md file is for a project named 'cogni', which is a Unix native interface for interacting with large language models (LLMs)... [.. snip ..] +The README.md file is for a project named 'alpaca', which is a Unix native interface for interacting with large language models (LLMs)... [.. snip ..] ``` ### In Emacs -Emacs can use `shell-command-on-region` to pipe buffer regions to `cogni`. +Emacs can use `shell-command-on-region` to pipe buffer regions to `alpaca`. -For example, the following defines a command that plumbs region to `cogni`, optionally replacing original contents: +For example, the following defines a command that plumbs region to `alpaca`, optionally replacing original contents: ```emacs-lisp -(defun leoshimo/cogni-on-region (start end prompt replace) - "Run cogni on region. Prefix arg means replace region, instead of separate output buffer" +(defun leoshimo/alpaca-on-region (start end prompt replace) + "Run alpaca on region. Prefix arg means replace region, instead of separate output buffer" (interactive "r\nsPrompt: \nP") (shell-command-on-region start end - (format "cogni -s \"%s\"" prompt) + (format "alpaca -s \"%s\"" prompt) nil replace)) -(global-set-key (kbd "M-c") #'leoshimo/cogni-on-region) +(global-set-key (kbd "M-c") #'leoshimo/alpaca-on-region) ``` This binding is useful across a wide range of tasks, for example: @@ -199,4 +199,4 @@ power similar workflows possible from Emacs. See `h :! For example, given a bulleted list of fruits, it an be sorted by color by: 1. Selecting the list of fruits in visual mode -2. Type `:!cogni -s "Sort this list by color"` +2. Type `:!alpaca -s "Sort this list by color"` blob - ed7f2612799aeca24c3a629dd377668e8d8bfaaa (mode 755) blob + /dev/null --- bin/cogni_shell +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env bash -# cogni_shell - lightweight interactive shell on top of cogni -# - -set -euo pipefail -trap 'printf "\n"; exit 130' INT - -messages=( - "--system" "You help convert natural language into safe macOS shell commands. Reply with exactly one directive per turn. Emit shell commands without any prefix. Narrate or ask questions using '!print ' lines only; never send plain text without '!print'. Do not ask the user to provide commands—propose the next step yourself. Only ask clarifying questions when essential, prefacing them with '!print ?'. When the task is complete, reply with '!stop'. After every command I run, I send you another user message that begins with 'Command output:'. Use that context before choosing the next step." - "--user" "show the current working directory" - "--assistant" "pwd" - "--user" 'Command output:\n/Users/example' - "--assistant" "!stop" - "--user" "print hello world to the terminal" - "--assistant" 'echo "Hello, world!"' - "--user" 'Command output:\nHello, world!' - "--assistant" "!stop" -) - -while true; do - if ! read -erp 'cogni> ' request; then - printf "\n" - break - fi - [[ "$request" =~ ^[[:space:]]*$ ]] && continue - [[ "$request" == ":quit" || "$request" == ":exit" ]] && break - - messages+=(--user "$request") - - while true; do - response=$(cogni "${messages[@]}") - response=${response//$'\r'/} - directive=${response%%$'\n'*} - - if [[ -z "$directive" ]]; then - printf 'No response from model.\n' >&2 - break - fi - - messages+=(--assistant "$directive") - - if [[ "$directive" == "!stop" ]]; then - break - fi - - if [[ "$directive" == "!print"* ]]; then - text=${directive#!print} - text=${text# } - [[ -n "$text" ]] && printf '%s\n' "$text" - messages+=(--user "Narration displayed.") - continue - fi - - if [[ "$directive" == \!* ]]; then - printf '%s\n' "${directive:1}" - messages+=(--user "Message shown to user.") - continue - fi - - treat_as_command=0 - if [[ "$directive" =~ ^[^[:space:]]+= ]]; then - treat_as_command=1 - else - first_word=${directive%%[[:space:]]*} - if [[ -z "$first_word" ]]; then - treat_as_command=0 - elif command -v "$first_word" >/dev/null 2>&1; then - treat_as_command=1 - else - treat_as_command=0 - fi - fi - - if [[ $treat_as_command -eq 0 ]]; then - printf '%s\n' "$directive" - messages+=(--user "Narration displayed.") - continue - fi - - printf '+ %s\n' "$directive" - if output=$(bash -lc "$directive" 2>&1); then - [[ -n "$output" ]] && printf '%s\n' "$output" - if [[ -n "$output" ]]; then - messages+=("--user" $'Command output:\n'"$output") - else - messages+=("--user" "Command output: (no output)") - fi - else - exit_status=$? - [[ -n "$output" ]] && printf '%s\n' "$output" - printf 'Command failed (exit %d)\n' "$exit_status" >&2 - if [[ -n "$output" ]]; then - printf -v failure_output 'Command output (exit %d):\n%s' "$exit_status" "$output" - else - printf -v failure_output 'Command output (exit %d): (no output)' "$exit_status" - fi - messages+=("--user" "$failure_output") - fi - done -done blob - /dev/null blob + 19b526d58a07f3bf3e83fa5e27abd80228d1087e (mode 755) --- /dev/null +++ bin/alpaca_shell @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +# alpaca_shell - lightweight interactive shell on top of alpaca +# + +set -euo pipefail +trap 'printf "\n"; exit 130' INT + +messages=( + "--system" "You help convert natural language into safe macOS shell commands. Reply with exactly one directive per turn. Emit shell commands without any prefix. Narrate or ask questions using '!print ' lines only; never send plain text without '!print'. Do not ask the user to provide commands—propose the next step yourself. Only ask clarifying questions when essential, prefacing them with '!print ?'. When the task is complete, reply with '!stop'. After every command I run, I send you another user message that begins with 'Command output:'. Use that context before choosing the next step." + "--user" "show the current working directory" + "--assistant" "pwd" + "--user" 'Command output:\n/Users/example' + "--assistant" "!stop" + "--user" "print hello world to the terminal" + "--assistant" 'echo "Hello, world!"' + "--user" 'Command output:\nHello, world!' + "--assistant" "!stop" +) + +while true; do + if ! read -erp 'alpaca> ' request; then + printf "\n" + break + fi + [[ "$request" =~ ^[[:space:]]*$ ]] && continue + [[ "$request" == ":quit" || "$request" == ":exit" ]] && break + + messages+=(--user "$request") + + while true; do + response=$(alpaca "${messages[@]}") + response=${response//$'\r'/} + directive=${response%%$'\n'*} + + if [[ -z "$directive" ]]; then + printf 'No response from model.\n' >&2 + break + fi + + messages+=(--assistant "$directive") + + if [[ "$directive" == "!stop" ]]; then + break + fi + + if [[ "$directive" == "!print"* ]]; then + text=${directive#!print} + text=${text# } + [[ -n "$text" ]] && printf '%s\n' "$text" + messages+=(--user "Narration displayed.") + continue + fi + + if [[ "$directive" == \!* ]]; then + printf '%s\n' "${directive:1}" + messages+=(--user "Message shown to user.") + continue + fi + + treat_as_command=0 + if [[ "$directive" =~ ^[^[:space:]]+= ]]; then + treat_as_command=1 + else + first_word=${directive%%[[:space:]]*} + if [[ -z "$first_word" ]]; then + treat_as_command=0 + elif command -v "$first_word" >/dev/null 2>&1; then + treat_as_command=1 + else + treat_as_command=0 + fi + fi + + if [[ $treat_as_command -eq 0 ]]; then + printf '%s\n' "$directive" + messages+=(--user "Narration displayed.") + continue + fi + + printf '+ %s\n' "$directive" + if output=$(bash -lc "$directive" 2>&1); then + [[ -n "$output" ]] && printf '%s\n' "$output" + if [[ -n "$output" ]]; then + messages+=("--user" $'Command output:\n'"$output") + else + messages+=("--user" "Command output: (no output)") + fi + else + exit_status=$? + [[ -n "$output" ]] && printf '%s\n' "$output" + printf 'Command failed (exit %d)\n' "$exit_status" >&2 + if [[ -n "$output" ]]; then + printf -v failure_output 'Command output (exit %d):\n%s' "$exit_status" "$output" + else + printf -v failure_output 'Command output (exit %d): (no output)' "$exit_status" + fi + messages+=("--user" "$failure_output") + fi + done +done blob - d7c93c9a6478d7169d61b65240b746386c0b72f7 blob + c29d145b266716d2a177b22df6f2f9f7b0b3a236 --- src/cli.rs +++ src/cli.rs @@ -1,4 +1,4 @@ -//! Command line interface for cogni +//! Command line interface for alpaca use std::time::Duration; @@ -199,7 +199,7 @@ mod test { #[test] fn chat_one_msgs() -> Result<()> { let args = cli() - .try_get_matches_from(vec!["cogni", "-u", "USER"]) + .try_get_matches_from(vec!["alpaca", "-u", "USER"]) .map(Invocation::from)?; assert_eq!(args.messages, vec![Message::user("USER")]); @@ -209,7 +209,7 @@ mod test { #[test] fn chat_many_msgs() -> Result<()> { let args = cli() - .try_get_matches_from(vec!["cogni", "-u", "USER1", "-a", "ROBOT", "-u", "USER2"]) + .try_get_matches_from(vec!["alpaca", "-u", "USER1", "-a", "ROBOT", "-u", "USER2"]) .map(Invocation::from)?; assert_eq!( @@ -227,7 +227,7 @@ mod test { #[test] fn chat_reasoning_effort_flag() -> Result<()> { let args = cli() - .try_get_matches_from(vec!["cogni", "-u", "USER", "--reasoning-effort", "high"]) + .try_get_matches_from(vec!["alpaca", "-u", "USER", "--reasoning-effort", "high"]) .map(Invocation::from)?; assert_eq!(args.reasoning_effort, Some(ReasoningEffort::High)); @@ -238,7 +238,7 @@ mod test { fn chat_many_msgs_with_system_prompt() -> Result<()> { let args = cli() .try_get_matches_from(vec![ - "cogni", "-s", "SYSTEM", "-u", "USER1", "-a", "ROBOT", "-u", "USER2", + "alpaca", "-s", "SYSTEM", "-u", "USER1", "-a", "ROBOT", "-u", "USER2", ]) .map(Invocation::from)?; @@ -259,7 +259,7 @@ mod test { fn chat_many_msgs_with_system_prompt_last() -> Result<()> { let args = cli() .try_get_matches_from(vec![ - "cogni", "-s", "SYSTEM", "-u", "USER1", "-a", "ROBOT", "-u", "USER2", + "alpaca", "-s", "SYSTEM", "-u", "USER1", "-a", "ROBOT", "-u", "USER2", ]) .map(Invocation::from)?; @@ -280,7 +280,7 @@ mod test { #[test] fn chat_output_format_default() -> Result<()> { let args = cli() - .try_get_matches_from(vec!["cogni", "-u", "ABC"]) + .try_get_matches_from(vec!["alpaca", "-u", "ABC"]) .map(Invocation::from)?; assert_eq!( @@ -294,7 +294,7 @@ mod test { #[test] fn chat_output_format_explicit_json() -> Result<()> { let args = cli() - .try_get_matches_from(vec!["cogni", "-u", "ABC", "--output_format", "json"]) + .try_get_matches_from(vec!["alpaca", "-u", "ABC", "--output_format", "json"]) .map(Invocation::from)?; assert_eq!(args.output_format, OutputFormat::JSON); @@ -304,7 +304,7 @@ mod test { #[test] fn chat_output_format_shorthand_json() -> Result<()> { let args = cli() - .try_get_matches_from(vec!["cogni", "-u", "ABC", "--json"]) + .try_get_matches_from(vec!["alpaca", "-u", "ABC", "--json"]) .map(Invocation::from)?; assert_eq!(args.output_format, OutputFormat::JSON); @@ -314,7 +314,7 @@ mod test { #[test] fn chat_output_format_shorthand_jsonp() -> Result<()> { let args = cli() - .try_get_matches_from(vec!["cogni", "-u", "ABC", "--jsonp"]) + .try_get_matches_from(vec!["alpaca", "-u", "ABC", "--jsonp"]) .map(Invocation::from)?; assert_eq!(args.output_format, OutputFormat::JSONPretty); @@ -324,7 +324,7 @@ mod test { #[test] fn chat_file_default() -> Result<()> { let args = cli() - .try_get_matches_from(vec!["cogni"]) + .try_get_matches_from(vec!["alpaca"]) .map(Invocation::from)?; assert_eq!(args.file, "-"); @@ -334,7 +334,7 @@ mod test { #[test] fn chat_file_positional() -> Result<()> { let args = cli() - .try_get_matches_from(vec!["cogni", "dialog_log"]) + .try_get_matches_from(vec!["alpaca", "dialog_log"]) .map(Invocation::from)?; assert_eq!(args.file, "dialog_log"); blob - fe04925caff5a9b4c8a99ebb9fd3565fab66dde4 blob + 0ce669871f6ed18118041e575e2365acbe166cf8 --- src/error.rs +++ src/error.rs @@ -1,4 +1,4 @@ -//! Errors for cogni library crate +//! Errors for alpaca library crate #[derive(Debug, thiserror::Error)] pub enum Error { blob - 63e9b602a43e20ee1171a85bbf9c662276f68f37 blob + 75c8c33d2564802d1ec057ab8464e7b6204cd5dc --- src/exec/mod.rs +++ src/exec/mod.rs @@ -1,4 +1,4 @@ -//! Executor for cogni +//! Executor for alpaca pub mod chat; use crate::cli::Invocation; blob - cafb1f37f994b9d1f390e835d7d792488f2cd9f1 blob + 4b335579d5dc99821cf86a5083e5c54530f1dbbc --- src/main.rs +++ src/main.rs @@ -1,9 +1,9 @@ use anyhow::Result; -use cogni::cli; +use alpaca::cli; #[tokio::main] async fn main() -> Result<()> { let invocation = cli::parse(); - cogni::exec(invocation).await?; + alpaca::exec(invocation).await?; Ok(()) } blob - 9b6cb148b3c092cbec1b6e0fa7e9c3e20c0fed29 blob + 2b8ca1f8eb055057810e29221fac12fb38bc6237 --- tests/chat.rs +++ tests/chat.rs @@ -23,7 +23,7 @@ fn ok_body() -> &'static str { #[test] fn chat_no_message() { - Command::cargo_bin("cogni") + Command::cargo_bin("alpaca") .unwrap() .assert() .failure() @@ -32,7 +32,7 @@ fn chat_no_message() { #[test] fn chat_no_file() { - Command::cargo_bin("cogni") + Command::cargo_bin("alpaca") .unwrap() .args(["file_does_not_exist"]) .assert() @@ -61,7 +61,7 @@ fn chat_user_message_from_flag() { .with_body(ok_body()) .create(); - let cmd = Command::cargo_bin("cogni") + let cmd = Command::cargo_bin("alpaca") .unwrap() .args(["-u", "Hello"]) .env("OLLAMA_API_ENDPOINT", server.url()) @@ -93,7 +93,7 @@ fn chat_user_message_from_stdin() { .with_body(ok_body()) .create(); - let cmd = Command::cargo_bin("cogni") + let cmd = Command::cargo_bin("alpaca") .unwrap() .write_stdin("Hello") .env("OLLAMA_API_ENDPOINT", server.url()) @@ -125,7 +125,7 @@ fn chat_with_reasoning_effort() { .with_body(ok_body()) .create(); - let cmd = Command::cargo_bin("cogni") + let cmd = Command::cargo_bin("alpaca") .unwrap() .args(["-u", "Hello", "--reasoning-effort", "medium"]) .env("OLLAMA_API_ENDPOINT", server.url()) @@ -176,7 +176,7 @@ fn chat_multiple_messages() { .with_body(ok_body()) .create(); - let cmd = Command::cargo_bin("cogni") + let cmd = Command::cargo_bin("alpaca") .unwrap() .args([ "-s", "SYSTEM", "-u", "USER_1", "-a", "ASSI_1", "-u", "USER_2", "-a", "ASSI_2", @@ -215,7 +215,7 @@ fn chat_api_error() { .with_body(r#"{ "error": "invalid options: temperature out of range" }"#) .create(); - let cmd = Command::cargo_bin("cogni") + let cmd = Command::cargo_bin("alpaca") .unwrap() .args(["-u", "USER", "-t", "1000"]) .write_stdin("USER_STDIN") @@ -252,7 +252,7 @@ fn chat_user_message_from_file() { .with_body(ok_body()) .create(); - let cmd = Command::cargo_bin("cogni") + let cmd = Command::cargo_bin("alpaca") .unwrap() .args([infile.path().to_str().unwrap()]) .env("OLLAMA_API_ENDPOINT", server.url())