diff --git a/Taskfile.yml b/Taskfile.yml index 828a29952..3357da221 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -9,7 +9,7 @@ vars: GOIMPORTS_VERSION: v0.42.0 DPRINT_VERSION: 0.48.0 EXAMPLE_VERSION: "0.8.1" - RUNNER_VERSION: "0.8.0" + RUNNER_VERSION: "0.9.0rc3" VERSION: # if version is not passed we hack the semver by encoding the commit as pre-release sh: echo "${VERSION:-0.0.0-$(git rev-parse --short HEAD)}" @@ -130,17 +130,17 @@ tasks: desc: "Clones the examples repo directly into the debian structure" cmds: - | - set -e - echo "Runner version set as: {{ .EXAMPLE_VERSION }}" - TMP_PATH="$(mktemp -d)" - DEST_PATH="debian/arduino-app-cli/var/lib/arduino-app-cli/" - echo "Cloning arduino/app-bricks-examples into temporary directory ${TMP_PATH}..." - git clone --depth 1 --branch "{{ .EXAMPLE_VERSION }}" https://github.com/arduino/app-bricks-examples "${TMP_PATH}" - rm -rf "${DEST_PATH}/examples" - mkdir -p "${DEST_PATH}" - mv "${TMP_PATH}/examples" "${DEST_PATH}" - rm -rf "${TMP_PATH}/examples" - echo "Examples successfully cloned." + set -e + echo "Runner version set as: {{ .EXAMPLE_VERSION }}" + TMP_PATH="$(mktemp -d)" + DEST_PATH="debian/arduino-app-cli/var/lib/arduino-app-cli/" + echo "Cloning arduino/app-bricks-examples into temporary directory ${TMP_PATH}..." + git clone --depth 1 --branch "{{ .EXAMPLE_VERSION }}" https://github.com/arduino/app-bricks-examples "${TMP_PATH}" + rm -rf "${DEST_PATH}/examples" + mkdir -p "${DEST_PATH}" + mv "${TMP_PATH}/examples" "${DEST_PATH}" + rm -rf "${TMP_PATH}/examples" + echo "Examples successfully cloned." silent: false build: @@ -158,10 +158,10 @@ tasks: desc: Create a tag on the current commit and push it to the remote to create the release cmds: - | - if [ -z "{{.CLI_ARGS}}" ]; then - echo "Error: Version argument is required. Usage: task orchestrator:trigger:release -- " - exit 1 - fi + if [ -z "{{.CLI_ARGS}}" ]; then + echo "Error: Version argument is required. Usage: task orchestrator:trigger:release -- " + exit 1 + fi - git tag -a "{{.CLI_ARGS}}" -m "Release {{.CLI_ARGS}}" - git push origin "{{.CLI_ARGS}}" @@ -201,25 +201,25 @@ tasks: desc: Download and locally install the official examples cmds: - | - set -e - DEST_PATH=$(case "$(uname)" in - Darwin) echo "$HOME/Library/Application Support/arduino-app-cli/" ;; - Linux) echo "$HOME/.config/arduino-app-cli/" ;; - *) echo "$AppData/arduino-app-cli/" ;; - esac) - TMP_PATH="$(mktemp -d)" + set -e + DEST_PATH=$(case "$(uname)" in + Darwin) echo "$HOME/Library/Application Support/arduino-app-cli/" ;; + Linux) echo "$HOME/.config/arduino-app-cli/" ;; + *) echo "$AppData/arduino-app-cli/" ;; + esac) + TMP_PATH="$(mktemp -d)" - echo "Cloning examples into temporary directory ${TMP_PATH}..." - git clone --depth 1 https://github.com/arduino/app-bricks-examples.git "${TMP_PATH}" + echo "Cloning examples into temporary directory ${TMP_PATH}..." + git clone --depth 1 https://github.com/arduino/app-bricks-examples.git "${TMP_PATH}" - echo "Installing examples to ${DEST_PATH}examples" - rm -rf "${DEST_PATH}examples" - mkdir -p "${DEST_PATH}" + echo "Installing examples to ${DEST_PATH}examples" + rm -rf "${DEST_PATH}examples" + mkdir -p "${DEST_PATH}" - mv "${TMP_PATH}/examples" "${DEST_PATH}" + mv "${TMP_PATH}/examples" "${DEST_PATH}" - rm -rf "${TMP_PATH}" - echo "Examples installed successfully." + rm -rf "${TMP_PATH}" + echo "Examples installed successfully." generate:assets: desc: This generates the models and bricks index. Also updates the corresponding testdata. @@ -235,15 +235,15 @@ tasks: msg: "Both assets folder are already at version '{{.RUNNER_VERSION}}'. Nothing to do." cmds: - | - # Get the corresponding models and bricks release, and unzip it. - gh release download -R arduino/app-bricks-py "release/{{.SEMVER_TAG}}" -p '*.whl' -D "{{.TMPDIR}}" --clobber - unzip -o "{{.TMPDIR}}/arduino_app_bricks-{{.SEMVER_TAG}}-py3-none-any.whl" -d "{{.OUTPUT_DIR}}" + # Get the corresponding models and bricks release, and unzip it. + gh release download -R arduino/app-bricks-py "release/{{.SEMVER_TAG}}" -p '*.whl' -D "{{.TMPDIR}}" --clobber + unzip -o "{{.TMPDIR}}/arduino_app_bricks-{{.SEMVER_TAG}}-py3-none-any.whl" -d "{{.OUTPUT_DIR}}" - | - # Copy the assets to the assets dir and testdata dir, replacing the previous version. - rm -rf "{{.ASSETS_DIR}}" && mkdir -p "{{.ASSETS_DIR}}" - cp -r "{{.OUTPUT_DIR}}/arduino/app_bricks/static" "{{.ASSETS_DIR}}/{{.SEMVER_TAG}}" - rm -rf "{{.TESTDATA_DIR}}" && mkdir -p "{{.TESTDATA_DIR}}" - cp -r "{{.OUTPUT_DIR}}/arduino/app_bricks/static" "{{.TESTDATA_DIR}}/{{.SEMVER_TAG}}" + # Copy the assets to the assets dir and testdata dir, replacing the previous version. + rm -rf "{{.ASSETS_DIR}}" && mkdir -p "{{.ASSETS_DIR}}" + cp -r "{{.OUTPUT_DIR}}/arduino/app_bricks/static" "{{.ASSETS_DIR}}/{{.SEMVER_TAG}}" + rm -rf "{{.TESTDATA_DIR}}" && mkdir -p "{{.TESTDATA_DIR}}" + cp -r "{{.OUTPUT_DIR}}/arduino/app_bricks/static" "{{.TESTDATA_DIR}}/{{.SEMVER_TAG}}" - cmd: rm -rf {{.TMPDIR}} - cmd: echo "Updating the runnerVersion in config.go to '{{.RUNNER_VERSION}}'" - cmd: sed -i "{{.sed_replacement}}" internal/orchestrator/config/config.go @@ -258,19 +258,19 @@ tasks: - task: general:prepare-deps cmds: - | - if - ! which licensed \ - &>/dev/null - then - if [[ {{OS}} == "windows" ]]; then - echo "Licensed does not have Windows support." - echo "Please use Linux/macOS or download the dependencies cache from the GitHub Actions workflow artifact." - else - echo "licensed not found or not in PATH." - echo "Please install: https://github.com/licensee/licensed#installation" - fi - exit 1 + if + ! which licensed \ + &>/dev/null + then + if [[ {{OS}} == "windows" ]]; then + echo "Licensed does not have Windows support." + echo "Please use Linux/macOS or download the dependencies cache from the GitHub Actions workflow artifact." + else + echo "licensed not found or not in PATH." + echo "Please install: https://github.com/licensee/licensed#installation" fi + exit 1 + fi - licensed cache - licensed notices @@ -281,26 +281,26 @@ tasks: - task: general:cache-dep-licenses cmds: - | - MATCHES="$( - find \ - .licenses \ - -regex '.+\.yml' \ - -type f \ - -print0 \ - | \ - xargs \ - --null \ - go tool \ - github.com/mikefarah/yq/v4 \ - 'select(.license == "other") | filename' - )" - if [[ "$MATCHES" != "" ]]; then - printf "%s" "$MATCHES" - echo - echo "The license cache files above have the license set to 'other'. Please manually define the license type and retry." - echo "See: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/check-go-dependencies-task.md#unrecognized-licenses" - exit 1 - fi + MATCHES="$( + find \ + .licenses \ + -regex '.+\.yml' \ + -type f \ + -print0 \ + | \ + xargs \ + --null \ + go tool \ + github.com/mikefarah/yq/v4 \ + 'select(.license == "other") | filename' + )" + if [[ "$MATCHES" != "" ]]; then + printf "%s" "$MATCHES" + echo + echo "The license cache files above have the license set to 'other'. Please manually define the license type and retry." + echo "See: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/check-go-dependencies-task.md#unrecognized-licenses" + exit 1 + fi - licensed status # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-go-dependencies-task/Taskfile.yml @@ -312,14 +312,14 @@ tasks: desc: "Generate Go client for Edge Impulse API using oapi-codegen and filtering by used paths" cmds: - | - curl -fsSL https://studio.edgeimpulse.com/openapi.yml | yq '.paths = { - "/api/{projectId}/deployment": .paths."/api/{projectId}/deployment", - "/api/{projectId}/deployment/download": .paths."/api/{projectId}/deployment/download", - "/api/{projectId}/jobs/build-ondevice-model": .paths."/api/{projectId}/jobs/build-ondevice-model", - "/api/{projectId}/jobs/{jobId}/status": .paths."/api/{projectId}/jobs/{jobId}/status", - "/api/{projectId}": .paths."/api/{projectId}", - "/api/{projectId}/jobs/{jobId}/stdout": .paths."/api/{projectId}/jobs/{jobId}/stdout", - "/api/{projectId}/deployment/last": .paths."/api/{projectId}/deployment/last" - }' > openapi-filtered.yml + curl -fsSL https://studio.edgeimpulse.com/openapi.yml | yq '.paths = { + "/api/{projectId}/deployment": .paths."/api/{projectId}/deployment", + "/api/{projectId}/deployment/download": .paths."/api/{projectId}/deployment/download", + "/api/{projectId}/jobs/build-ondevice-model": .paths."/api/{projectId}/jobs/build-ondevice-model", + "/api/{projectId}/jobs/{jobId}/status": .paths."/api/{projectId}/jobs/{jobId}/status", + "/api/{projectId}": .paths."/api/{projectId}", + "/api/{projectId}/jobs/{jobId}/stdout": .paths."/api/{projectId}/jobs/{jobId}/stdout", + "/api/{projectId}/deployment/last": .paths."/api/{projectId}/deployment/last" + }' > openapi-filtered.yml - oapi-codegen --package=edgeimpulse --generate types,client --response-type-suffix=HTTPResponse openapi-filtered.yml > internal/api/edgeimpulse/client.gen.go - rm openapi-filtered.yml diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/air_quality_monitoring/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/air_quality_monitoring/API.md similarity index 98% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/air_quality_monitoring/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/air_quality_monitoring/API.md index 2264acdcc..5f9cb44bd 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/air_quality_monitoring/API.md +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/air_quality_monitoring/API.md @@ -46,9 +46,11 @@ Data class to represent air quality data. - **dominantpol** (*str*): Dominant pollutant in the air. - **iaqi** (*dict*): Individual AQI values for various pollutants. -### Methods +### Properties + +#### `pandas_dict: dict` -#### `pandas_dict()` +Access: read-only Return the data as a dictionary suitable for pandas DataFrame. diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/arduino_cloud/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/arduino_cloud/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/arduino_cloud/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/arduino_cloud/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/asr/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/asr/API.md new file mode 100644 index 000000000..a09c0c77d --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/asr/API.md @@ -0,0 +1,66 @@ +# asr API Reference + +## Index + +- Class `AutomaticSpeechRecognition` +- Class `ASREvent` +- Class `TranscriptionStream` + +--- + +## `AutomaticSpeechRecognition` class + +```python +class AutomaticSpeechRecognition(language: str) +``` + +### Parameters + +- **language**: The language code for the ASR model (e.g., "en" for English). + +### Methods + +#### `start()` + +Prepare the ASR for transcription. + +#### `stop()` + +Stop the ASR and clean up resources. + +#### `transcribe_mic(mic: BaseMicrophone, duration: int)` + +Transcribe audio data from the microphone and return the transcribed text. + +#### `transcribe_mic_stream(mic: BaseMicrophone, duration: int)` + +Transcribe audio data from the microphone and stream the results as soon as they are available. + +#### `transcribe_wav(wav_data: np.ndarray | bytes)` + +Transcribe audio from WAV data and return the transcribed text. + +#### `transcribe_wav_stream(wav_data: np.ndarray | bytes)` + +Transcribe audio from WAV data and stream the results. + + +--- + +## `ASREvent` class + +```python +class ASREvent() +``` + + +--- + +## `TranscriptionStream` class + +```python +class TranscriptionStream(generator: Generator[T, None, None]) +``` + +Iterator wrapper that guarantees proper teardown on context exit. + diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/audio_classification/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/audio_classification/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/audio_classification/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/audio_classification/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/camera_code_detection/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/camera_code_detection/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/camera_code_detection/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/camera_code_detection/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/cloud_asr/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/cloud_asr/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/cloud_asr/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/cloud_asr/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/cloud_llm/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/cloud_llm/API.md similarity index 93% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/cloud_llm/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/cloud_llm/API.md index 3eb7426c4..c50b8db3a 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/cloud_llm/API.md +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/cloud_llm/API.md @@ -64,6 +64,17 @@ Defaults to 10. - (*CloudLLM*): The current instance, allowing for method chaining. +#### `get_client()` + +Returns the underlying LangChain model instance. + +This allows for advanced users to access the full capabilities of the model +directly, such as calling `generate()` or `stream()` with custom message formats. + +##### Returns + +- (*BaseChatModel*): The LangChain chat model instance used internally. + #### `chat(message: str, images: List[str | bytes])` Sends a message to the AI and blocks until the complete response is received. diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/dbstorage_sqlstore/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/dbstorage_sqlstore/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/dbstorage_sqlstore/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/dbstorage_sqlstore/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/dbstorage_tsstore/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/dbstorage_tsstore/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/dbstorage_tsstore/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/dbstorage_tsstore/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/gesture_recognition/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/gesture_recognition/API.md new file mode 100644 index 000000000..19d9bca92 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/gesture_recognition/API.md @@ -0,0 +1,69 @@ +# gesture_recognition API Reference + +## Index + +- Class `GestureRecognition` + +--- + +## `GestureRecognition` class + +```python +class GestureRecognition(camera: BaseCamera | None) +``` + +### Methods + +#### `start()` + +Start the capture thread and asyncio event loop. + +#### `stop()` + +Stop all tracking and close connections. + +#### `on_gesture(gesture: str, callback: Callable[[dict], None], hand: Literal['left', 'right', 'both'])` + +Register or unregister a gesture callback. + +##### Parameters + +- **gesture** (*str*): The gesture name to detect +- **callback** (*Callable[[dict], None]*): Function to call when gesture is detected. None to unregister. +The callback receives a metadata dictionary with details about the detection, including: +- "hand": Which hand performed the gesture ("left" or "right") +- "gesture": Name of the detected gesture +- "confidence": Confidence score of the detection (0.0 to 1.0) +- "landmarks": List of key points of the detected hand (in (x, y, z) format where + x and y are pixel coordinates and z is normalized depth) +- "bounding_box_xyxy": [x_min, y_min, x_max, y_max] of the detected hand bounding box +- **hand** (*Literal["left", "right", "both"]*): Which hand(s) to track + +##### Raises + +- **ValueError**: If 'hand' argument is not valid + +#### `on_enter(callback: Callable[[], None])` + +Register a callback for when hands become visible. + +##### Parameters + +- **callback** (*Callable[[], None]*): Function to call when at least one hand is detected + +#### `on_exit(callback: Callable[[], None])` + +Register a callback for when hands are no longer visible. + +##### Parameters + +- **callback** (*Callable[[], None]*): Function to call when no hands are detected anymore + +#### `on_frame(callback: Callable[[np.ndarray], None])` + +Register a callback that receives each camera frame. + +##### Parameters + +- **callback** (*Callable[[np.ndarray], None]*): Function to call with camera frame data. None to unregister. + diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/image_classification/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/image_classification/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/image_classification/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/image_classification/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/keyword_spotting/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/keyword_spotting/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/keyword_spotting/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/keyword_spotting/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/llm/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/llm/API.md new file mode 100644 index 000000000..843cd65a3 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/llm/API.md @@ -0,0 +1,137 @@ +# llm API Reference + +## Index + +- Class `LargeLanguageModel` + +--- + +## `LargeLanguageModel` class + +```python +class LargeLanguageModel(api_key: str, system_prompt: str, temperature: Optional[float], max_tokens: int, timeout: int, tools: List[Callable[..., Any]], model: str) +``` + +A Brick for interacting with locally-based Large Language Models (LLMs). + +This class wraps LangChain functionality to provide a simplified, unified interface +for chatting with models like Qwenm, LLama, Gemma. It supports both synchronous +'one-shot' responses and streaming output, with optional conversational memory. + +### Parameters + +- **api_key** (*str*): The API access key for the target LLM service. Defaults to the +'LOCAL_LLM_API_KEY' environment variable. +- **model** (*str*): The specific model name or identifier to use (e.g., "genie:qwen3-4b"). +If not provided, model will be determined from app configuration or default brick configuration. +- **system_prompt** (*str*): A system-level instruction that defines the AI's persona +and constraints (e.g., "You are a helpful assistant"). Defaults to empty. +- **temperature** (*Optional[float]*): The sampling temperature between 0.0 and 1.0. +Higher values make output more random/creative; lower values make it more +deterministic. Defaults to 0.7. +- **max_tokens** (*int*): The maximum number of tokens to generate in the response. +Defaults to 512. +- **timeout** (*int*): The maximum duration in seconds to wait for a response before +timing out. Defaults to 30. +- **tools** (*List[Callable[..., Any]]*), default=None: A list of callable tool functions to register. Defaults to None. +- ****kwargs**: Additional arguments passed to the model constructor + +### Raises + +- **ValueError**: If `api_key` is not provided (empty string). + +### Methods + +#### `list_models()` + +Returns a list of supported local model identifiers. + +Note: LargeLanguageModel supports OpenAI-compatible API. This method uses the OpenAI client to query available models from the local server. +LangChain's OpenAI wrapper does not provide a direct method to list models, so we need to use the underlying OpenAI client directly. + +##### Returns + +- (*List[str]*): A list of supported model names (e.g., ["qwen2.5-7b"]). + +#### `with_memory(max_messages: int)` + +Enables conversational memory for this instance. + +Configures the Brick to retain a window of previous messages, allowing the +AI to maintain context across multiple interactions. + +##### Parameters + +- **max_messages** (*int*): The maximum number of messages (user + AI) to keep +in history. Older messages are discarded. Set to 0 to disable memory. +Defaults to 10. + +##### Returns + +- (*LargeLanguageModel*): The current instance, allowing for method chaining. + +#### `get_client()` + +Returns the underlying LangChain model instance. + +This allows for advanced users to access the full capabilities of the model +directly, such as calling `generate()` or `stream()` with custom message formats. + +##### Returns + +- (*BaseChatModel*): The LangChain chat model instance used internally. + +#### `chat(message: str, images: List[str | bytes])` + +Sends a message to the AI and blocks until the complete response is received. + +This method automatically manages conversation history if memory is enabled. + +##### Parameters + +- **message** (*str*): The input text prompt from the user. +- **images** (*List[str | bytes]*): Optional list of image file paths or raw bytes to include in the prompt. + +##### Returns + +- (*str*): The complete text response generated by the AI. + +##### Raises + +- **RuntimeError**: If the internal chain is not initialized or if the API request fails. + +#### `chat_stream(message: str, images: List[str | bytes])` + +Sends a message to the AI and yields response tokens as they are generated. + +This allows for processing or displaying the response in real-time (streaming). +The generation can be interrupted by calling `stop_stream()`. + +##### Parameters + +- **message** (*str*): The input text prompt from the user. +- **images** (*List[str | bytes]*): Optional list of image file paths or raw bytes to include in the prompt. + +##### Returns + +- (*str*): Chunks of text (tokens) from the AI response. + +##### Raises + +- **RuntimeError**: If the internal chain is not initialized or if the API request fails. +- **AlreadyGenerating**: If a streaming session is already active. + +#### `stop_stream()` + +Signals the active streaming generation to stop. + +This sets an internal flag that causes the `chat_stream` iterator to break +early. It has no effect if no stream is currently running. + +#### `clear_memory()` + +Clears the conversational memory history. + +Resets the stored context. This is useful for starting a new conversation +topic without previous context interfering. Only applies if memory is enabled. + diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/mood_detector/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/mood_detector/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/mood_detector/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/mood_detector/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/motion_detection/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/motion_detection/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/motion_detection/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/motion_detection/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/mqtt/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/mqtt/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/mqtt/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/mqtt/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/object_detection/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/object_detection/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/object_detection/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/object_detection/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/sound_generator/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/sound_generator/API.md similarity index 95% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/sound_generator/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/sound_generator/API.md index 11f0e66d9..0144a8e3d 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/sound_generator/API.md +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/sound_generator/API.md @@ -189,6 +189,8 @@ class SoundGenerator(output_device: Speaker, bpm: int, time_signature: tuple, oc ### Parameters - **output_device** (*Speaker*) (optional): The output device to play sound through. +When omitted, SoundGenerator creates an internal shared speaker so +multiple instances can overlap playback on the same device. - **bpm** (*int*): The tempo in beats per minute for note duration calculations. - **time_signature** (*tuple*): The time signature as (numerator, denominator). - **octaves** (*int*): Number of octaves to generate notes for (starting from octave @@ -240,7 +242,7 @@ Duration is in notes fractions (e.g., 1/4 for quarter note). - **volume** (*float*) (optional): Volume level (0.0 to 1.0). If None, uses master volume. - **block** (*bool*): If True, block until the entire sequence has been played. -#### `play_composition(composition: 'MusicComposition', block: bool)` +#### `play_composition(composition: 'MusicComposition', block: bool | None, loop: bool, play_for: float | None)` Play a MusicComposition object. @@ -253,7 +255,21 @@ is a list of (note, duration) tuples to play simultaneously. ##### Parameters - **composition** (*MusicComposition*): The composition to play. -- **block** (*bool*): If True, block until the entire composition has been played. +- **block** (*bool | None*): Controls whether this call waits for playback. +- True: wait until the current playback session ends. When + ``loop=True`` and ``play_for`` is not set, this may block + indefinitely until ``stop_sequence()`` or ``stop()`` is called + from another thread. +- False: start playback and return immediately. +- None: choose automatically based on the playback mode. Finite + playback blocks, infinite looping returns immediately, and + timed looping (``loop=True`` with ``play_for`` set) blocks + until the timed stop completes. This is the recommended + default for most scripts and examples. +- **loop** (*bool*): If True, loop the composition until ``stop_sequence()`` +is called or until ``play_for`` expires. +- **play_for** (*float | None*): When looping, stop automatically after the +given number of seconds. Requires ``loop=True``. #### `play_chord(notes: list[str], note_duration: float | str, volume: float, block: bool)` diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/streamlit_ui/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/streamlit_ui/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/streamlit_ui/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/streamlit_ui/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/telegram_bot/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/telegram_bot/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/telegram_bot/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/telegram_bot/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/tts/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/tts/API.md new file mode 100644 index 000000000..3169b8b3c --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/tts/API.md @@ -0,0 +1,70 @@ +# tts API Reference + +## Index + +- Class `TextToSpeech` + +--- + +## `TextToSpeech` class + +```python +class TextToSpeech() +``` + +Text-to-Speech brick for offline speech synthesis using local TTS service. + +### Methods + +#### `speak(text: str, language: Literal['en', 'es', 'zh'], speaker: BaseSpeaker | None)` + +Synthesize speech from text and play it through the provided speaker. + +##### Parameters + +- **text** (*str*): The text to be synthesized into speech. +- **language** (*Literal["en", "es", "zh"]*): The language of the text. +- **speaker** (*BaseSpeaker*): The speaker instance to play the synthesized audio. +If None, a default Speaker will be used. + +##### Raises + +- **ValueError**: If the specified language is not supported. +- **RuntimeError**: If the synthesis fails or maximum concurrency is reached. + +#### `synthesize_wav(text: str, language: Literal['en', 'es', 'zh'])` + +Synthesize speech from text and return the audio in WAV format. + +##### Parameters + +- **text** (*str*): The text to be synthesized into speech. +- **language** (*Literal["en", "es", "zh"]*): The language of the text. + +##### Returns + +- (*bytes*): The synthesized audio in WAV format. + +##### Raises + +- **ValueError**: If the specified language is not supported. +- **RuntimeError**: If the synthesis fails or maximum concurrency is reached. + +#### `synthesize_pcm(text: str, language: Literal['en', 'es', 'zh'])` + +Synthesize speech from text and return the audio in PCM format (mono, 16-bit, 44.1kHz). + +##### Parameters + +- **text** (*str*): The text to be synthesized into speech. +- **language** (*Literal["en", "es", "zh"]*): The language of the text. + +##### Returns + +- (*bytes*): The synthesized audio in PCM format. + +##### Raises + +- **ValueError**: If the specified language is not supported. +- **RuntimeError**: If the synthesis fails or maximum concurrency is reached. + diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/vibration_anomaly_detection/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/vibration_anomaly_detection/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/vibration_anomaly_detection/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/vibration_anomaly_detection/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/video_image_classification/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/video_image_classification/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/video_image_classification/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/video_image_classification/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/video_object_detection/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/video_object_detection/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/video_object_detection/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/video_object_detection/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/visual_anomaly_detection/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/visual_anomaly_detection/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/visual_anomaly_detection/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/visual_anomaly_detection/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/vlm/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/vlm/API.md new file mode 100644 index 000000000..ac23765d0 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/vlm/API.md @@ -0,0 +1,126 @@ +# vlm API Reference + +## Index + +- Class `VisionLanguageModel` + +--- + +## `VisionLanguageModel` class + +```python +class VisionLanguageModel(api_key: str, system_prompt: str, temperature: Optional[float], max_tokens: int, timeout: int, tools: List[Callable[..., Any]], model: str) +``` + +A Brick for interacting with locally-based Vision Language Models (VLMs). + +This class wraps LangChain functionality to provide a simplified, unified interface +for chatting with models like Qwenm, LLama, Gemma. It supports both synchronous +'one-shot' responses and streaming output, with optional conversational memory. + +### Parameters + +- **api_key** (*str*): The API access key for the target VLM service. Defaults to the +'LOCAL_LLM_API_KEY' environment variable. +- **model** (*str*): The specific model name or identifier to use (e.g., "genie:qwen3-4b"). +If not provided, model will be determined from app configuration or default brick configuration. +- **system_prompt** (*str*): A system-level instruction that defines the AI's persona +and constraints (e.g., "You are a helpful assistant"). Defaults to empty. +- **temperature** (*Optional[float]*): The sampling temperature between 0.0 and 1.0. +Higher values make output more random/creative; lower values make it more +deterministic. Defaults to 0.7. +- **max_tokens** (*int*): The maximum number of tokens to generate in the response. +Defaults to 256. +- **timeout** (*int*): The maximum duration in seconds to wait for a response before +timing out. Defaults to 30. +- **tools** (*List[Callable[..., Any]]*), default=None: A list of callable tool functions to register. Defaults to None. +- ****kwargs**: Additional arguments passed to the model constructor + +### Raises + +- **ValueError**: If `api_key` is not provided (empty string). + +### Methods + +#### `get_client()` + +Returns the underlying LangChain model instance. + +This allows for advanced users to access the full capabilities of the model +directly, such as calling `generate()` or `stream()` with custom message formats. + +##### Returns + +- (*BaseChatModel*): The LangChain chat model instance used internally. + +#### `chat(message: str, images: List[str | bytes])` + +Sends a message to the AI and blocks until the complete response is received. + +This method automatically manages conversation history if memory is enabled. + +##### Parameters + +- **message** (*str*): The input text prompt from the user. +- **images** (*List[str | bytes]*): Optional list of image file paths or raw bytes to include in the prompt. + +##### Returns + +- (*str*): The complete text response generated by the AI. + +##### Raises + +- **RuntimeError**: If the internal chain is not initialized or if the API request fails. + +#### `chat_stream(message: str, images: List[str | bytes])` + +Sends a message to the AI and yields response tokens as they are generated. + +This allows for processing or displaying the response in real-time (streaming). +The generation can be interrupted by calling `stop_stream()`. + +##### Parameters + +- **message** (*str*): The input text prompt from the user. +- **images** (*List[str | bytes]*): Optional list of image file paths or raw bytes to include in the prompt. + +##### Returns + +- (*str*): Chunks of text (tokens) from the AI response. + +##### Raises + +- **RuntimeError**: If the internal chain is not initialized or if the API request fails. +- **AlreadyGenerating**: If a streaming session is already active. + +#### `stop_stream()` + +Signals the active streaming generation to stop. + +This sets an internal flag that causes the `chat_stream` iterator to break +early. It has no effect if no stream is currently running. + +#### `clear_memory()` + +Clears the conversational memory history. + +Resets the stored context. This is useful for starting a new conversation +topic without previous context interfering. Only applies if memory is enabled. + +#### `with_memory(max_messages: int)` + +Enables conversational memory for this instance. + +Configures the Brick to retain a window of previous messages, allowing the +AI to maintain context across multiple interactions. + +##### Parameters + +- **max_messages** (*int*): The maximum number of messages (user + AI) to keep +in history. Older messages are discarded. Set to 0 to disable memory. +Defaults to 0. + +##### Returns + +- (*VisionLanguageModel*): The current instance, allowing for method chaining. + diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/wave_generator/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/wave_generator/API.md similarity index 88% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/wave_generator/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/wave_generator/API.md index 944e202b5..85d363ce0 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/wave_generator/API.md +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/wave_generator/API.md @@ -21,9 +21,11 @@ between frequency and amplitude changes using configurable envelope parameters. The generator runs continuously in a background thread, producing audio blocks with minimal latency. -### Methods +### Properties + +#### `wave_type: WaveType` -#### `wave_type()` +Access: read/write Get or set the current waveform type. @@ -35,7 +37,9 @@ Get or set the current waveform type. - (*WaveType*): Current waveform type ("sine", "square", "sawtooth", "triangle"). -#### `sample_rate()` +#### `sample_rate: int` + +Access: read-only Get the audio sample rate in Hz. @@ -47,7 +51,9 @@ Get the audio sample rate in Hz. - **RuntimeError**: If no speaker is configured. -#### `block_duration()` +#### `block_duration: float` + +Access: read-only Get the duration of each audio block in seconds. @@ -55,7 +61,9 @@ Get the duration of each audio block in seconds. - (*float*): Block duration in seconds. -#### `frequency()` +#### `frequency: float` + +Access: read/write Get or set the current output frequency in Hz. @@ -74,7 +82,9 @@ configured glide time. - **ValueError**: If the frequency is negative. -#### `amplitude()` +#### `amplitude: float` + +Access: read/write Get or set the current output amplitude. @@ -93,7 +103,9 @@ configured attack/release time. - **ValueError**: If the amplitude is not in range [0.0, 1.0]. -#### `attack()` +#### `attack: float` + +Access: read/write Get or set the current attack time in seconds. @@ -111,7 +123,9 @@ Attack time controls how quickly the amplitude rises to the target value. - **ValueError**: If the attack time is negative. -#### `release()` +#### `release: float` + +Access: read/write Get or set the current release time in seconds. @@ -129,7 +143,9 @@ Release time controls how quickly the amplitude falls to the target value. - **ValueError**: If the release time is negative. -#### `glide()` +#### `glide: float` + +Access: read/write Get the current frequency glide time in seconds (portamento). @@ -147,7 +163,9 @@ Glide time controls how quickly the frequency transitions to the target value. - **ValueError**: If the glide time is negative. -#### `volume()` +#### `volume: int | None` + +Access: read/write Get or set the wave generator volume level. @@ -163,7 +181,9 @@ Get or set the wave generator volume level. - **ValueError**: If the volume is not in range [0, 100]. -#### `state()` +#### `state: dict` + +Access: read-only Get current generator state. @@ -171,6 +191,8 @@ Get current generator state. - (*dict*): Dictionary containing current frequency, amplitude, wave type, etc. +### Methods + #### `start()` Start the wave generator and audio output. diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/weather_forecast/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/weather_forecast/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/weather_forecast/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/weather_forecast/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/web_ui/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/web_ui/API.md similarity index 93% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/web_ui/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/web_ui/API.md index ec08afdb2..773d0b3d4 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/web_ui/API.md +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_bricks/web_ui/API.md @@ -9,7 +9,7 @@ ## `WebUI` class ```python -class WebUI(addr: str, port: int, ui_path_prefix: str, api_path_prefix: str, assets_dir_path: str, certs_dir_path: str, use_tls: bool, use_ssl: bool | None) +class WebUI(addr: str, port: int, ui_path_prefix: str, api_path_prefix: str, assets_dir_path: str, certs_dir_path: str, use_tls: bool, use_ssl: bool | None, cors_origins: str) ``` Module for deploying a web server that can host a web application and expose APIs to its clients. @@ -27,10 +27,14 @@ and support real-time communication between the client and the server. - **certs_dir_path** (*str*) (optional), default="/app/certs": Path to TLS certificates directory. Defaults to "/app/certs". - **use_tls** (*bool*) (optional), default=False: Enable TLS/HTTPS. Defaults to False. - **use_ssl** (*bool*) (optional), default=None: Deprecated. Use use_tls instead. Defaults to None. +- **cors_origins** (*str*) (optional): CORS allowed origins. Can be "*" for all origins, a +comma-separated list of origins, or an empty string to disable CORS. Defaults to "*". -### Methods +### Properties + +#### `local_url: str` -#### `local_url()` +Access: read-only Get the locally addressable URL of the web server. @@ -38,7 +42,9 @@ Get the locally addressable URL of the web server. - (*str*): The server's URL (including protocol, address, and port). -#### `url()` +#### `url: str` + +Access: read-only Get the externally addressable URL of the web server. @@ -46,6 +52,8 @@ Get the externally addressable URL of the web server. - (*str*): The server's URL (including protocol, address, and port). +### Methods + #### `start()` Start the web server asynchronously. diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/camera/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/camera/API.md similarity index 97% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/camera/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/camera/API.md index 307eab7e8..34352b850 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/camera/API.md +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/camera/API.md @@ -56,12 +56,16 @@ providing a unified API regardless of the underlying camera protocol or type. a numpy array and returns a numpy array. Default: None - **auto_reconnect** (*bool*) (optional): Enable automatic reconnection on failure. Default: True. -### Methods +### Properties + +#### `status: Literal['disconnected', 'connected', 'streaming', 'paused']` -#### `status()` +Access: read-only Read-only property for camera status. +### Methods + #### `start()` Start the camera capture with retries, if enabled. @@ -279,13 +283,17 @@ accept self-signed certificates or when supplying your own certificates. - **adjustments** (*Callable[[np.ndarray], np.ndarray] | None*): Function to adjust frames - **auto_reconnect** (*bool*): Enable automatic reconnection on failure -### Methods +### Properties + +#### `url: str` -#### `url()` +Access: read-only Return the WebSocket server address. -#### `security_mode()` +#### `security_mode: str` + +Access: read-only Return current security mode for logging/debugging. diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/microphone/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/microphone/API.md similarity index 97% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/microphone/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/microphone/API.md index 6c5bda82f..901038e5a 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/microphone/API.md +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/microphone/API.md @@ -130,9 +130,11 @@ The output is always a NumPy array with the ALSA PCM format. - **buffer_size** (*int*): Size of the audio buffer. - **auto_reconnect** (*bool*) (optional): Enable automatic reconnection on failure. Default: True. -### Methods +### Properties + +#### `volume: int` -#### `volume()` +Access: read/write Get or set the microphone volume level. @@ -150,10 +152,14 @@ This controls the software volume of the microphone device. - **ValueError**: If the volume is not valid. -#### `status()` +#### `status: Literal['disconnected', 'connected', 'streaming', 'paused']` + +Access: read-only Read-only property for camera status. +### Methods + #### `start()` Start the microphone capture. @@ -304,16 +310,22 @@ ALSA limitations (~2000). - **MicrophoneConfigError**: If the format is not supported. -### Methods +### Properties + +#### `alsa_format_idx: int` -#### `alsa_format_idx()` +Access: read-only Get the ALSA format index corresponding to the current numpy dtype format. -#### `alsa_format_name()` +#### `alsa_format_name: str` + +Access: read-only Get the ALSA format string corresponding to the current numpy dtype format. +### Methods + #### `list_devices()` Return a list of available ALSA microphones (plughw only). @@ -382,13 +394,17 @@ it's sent to clients to suggest an optimal buffer size but clients may ignore it Default: Microphone.BUFFER_SIZE_BALANCED - 1024. - **auto_reconnect** (*bool*): Enable automatic reconnection on failure. -### Methods +### Properties + +#### `url: str` -#### `url()` +Access: read-only Return the WebSocket server address. -#### `security_mode()` +#### `security_mode: str` + +Access: read-only Return current security mode for logging/debugging. diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/speaker/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/speaker/API.md similarity index 96% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/speaker/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/speaker/API.md index d855ccf6d..c7f9a6ca5 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/speaker/API.md +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/speaker/API.md @@ -115,9 +115,11 @@ The input is always a NumPy array with the PCM format. - **SpeakerConfigError**: If the provided configuration is not valid. -### Methods +### Properties + +#### `volume: int` -#### `volume()` +Access: read/write Get or set the speaker volume level. @@ -135,10 +137,14 @@ This controls the software volume of the speaker device. - **ValueError**: If the volume is not valid. -#### `status()` +#### `status: Literal['disconnected', 'connected']` + +Access: read-only Read-only property for camera status. +### Methods + #### `start()` Start the speaker capture. @@ -264,23 +270,29 @@ parameter. Low values increase CPU usage but reduce latency. Default: 1024. Default: True. - **auto_reconnect** (*bool*): Enable automatic reconnection on failure. Default: True. -- **Note**: When shared=True, only higher buffer size values are supported due to -ALSA limitations (~2000). +- **Note**: When shared=True, buffer size is auto-negotiated due to +ALSA limitations to reach 125ms of latency. ### Raises - **SpeakerConfigError**: If the format is not supported. -### Methods +### Properties + +#### `alsa_format_idx: int` -#### `alsa_format_idx()` +Access: read-only Get the ALSA format index corresponding to the current numpy dtype format. -#### `alsa_format_name()` +#### `alsa_format_name: str` + +Access: read-only Get the ALSA format string corresponding to the current numpy dtype format. +### Methods + #### `list_devices()` Return a list of available ALSA speakers (plughw only). diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/usb_camera/API.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/usb_camera/API.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/usb_camera/API.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/api-docs/arduino/app_peripherals/usb_camera/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/bricks-list.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/bricks-list.yaml similarity index 87% rename from internal/e2e/daemon/testdata/assets/0.8.0/bricks-list.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/bricks-list.yaml index 298671215..f044412ea 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/bricks-list.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/bricks-list.yaml @@ -1,24 +1,19 @@ bricks: -- id: arduino:motion_detection - name: Motion detection - description: 'This Brick is designed for motion detection and recognition, leveraging - pre-trained models. - - It takes input from accelerometer sensors to identify various motion patterns. - - You can use it with pre-trained models provided by the framework or with your - custom motion classification models trained on the Edge Impulse platform. - - ' +- id: arduino:visual_anomaly_detection + name: Visual Anomaly Detection + description: "Brick for visual anomaly detection using a pre-trained model. It processes\ + \ images to identify unusual patterns and returns detected anomalies with bounding\ + \ boxes. \nSupports pre-trained models provided by the framework or custom anomaly\ + \ detection models trained on the Edge Impulse platform. \n" require_container: true require_model: true mount_devices_into_container: false ports: [] - category: null - model_name: updown-wave-motion-detection + category: image + model_name: concrete-crack-anomaly-detection variables: - - name: EI_MOTION_DETECTION_MODEL - default_value: /models/ootb/ei/updown-wave-motion-detection.eim + - name: EI_V_ANOMALY_DETECTION_MODEL + default_value: /models/ootb/ei/concrete-crack-anomaly-detection.eim description: Path to the model file hidden: true - name: CUSTOM_MODEL_PATH @@ -29,26 +24,27 @@ bricks: default_value: 127.0.0.1 description: Bind address hidden: true -- id: arduino:keyword_spotting - name: Keyword Spotting - description: 'Brick for keyword spotting using a pre-trained model. It processes - audio input to detect specific keywords or phrases. +- id: arduino:vibration_anomaly_detection + name: Vibration Anomaly detection + description: 'This Brick is designed for vibration anomaly detection and recognition, + leveraging pre-trained models. - Brick is designed to work with pre-trained models provided by framework or with - custom audio classification models trained on Edge Impulse platform. + It takes input from sensors (accelerometer) to identify possible anomalies based + on vibration patterns. + + You can use it with pre-trained models provided by the framework or with your + own custom anomaly detections models trained on the Edge Impulse platform. ' require_container: true require_model: true mount_devices_into_container: false ports: [] - category: audio - model_name: keyword-spotting-hey-arduino - required_devices: - - microphone + category: null + model_name: fan-anomaly-detection variables: - - name: EI_KEYWORD_SPOTTING_MODEL - default_value: /models/ootb/ei/keyword-spotting-hey-arduino.eim + - name: EI_VIBRATION_ANOMALY_DETECTION_MODEL + default_value: /models/ootb/ei/fan-anomaly-detection.eim description: Path to the model file hidden: true - name: CUSTOM_MODEL_PATH @@ -59,6 +55,25 @@ bricks: default_value: 127.0.0.1 description: Bind address hidden: true +- id: arduino:streamlit_ui + name: WebUI - Streamlit + description: A simplified user interface based on Streamlit and Python. + require_container: false + require_model: false + mount_devices_into_container: false + ports: + - 7000 + category: ui + requires_display: webview +- id: arduino:weather_forecast + name: Weather Forecast + description: Online weather forecast module for Arduino using open-meteo.com geolocation + and weather APIs. Requires an internet connection. + require_container: false + require_model: false + mount_devices_into_container: false + ports: [] + category: miscellaneous - id: arduino:wave_generator name: Wave Generator description: Continuous wave generator for audio synthesis. Generates sine, square, @@ -70,56 +85,6 @@ bricks: category: audio required_devices: - speaker -- id: arduino:image_classification - name: Image Classification - description: "Brick for image classification using a pre-trained model. It processes\ - \ images and returns the predicted class label and confidence score.\nBrick is\ - \ designed to work with pre-trained models provided by framework or with custom\ - \ image classification models trained on Edge Impulse platform. \n" - require_container: true - require_model: true - mount_devices_into_container: false - ports: [] - category: video - model_name: mobilenet-image-classification - variables: - - name: EI_CLASSIFICATION_MODEL - default_value: /models/ootb/ei/mobilenet-v2-224px.eim - description: Path to the model file - hidden: true - - name: CUSTOM_MODEL_PATH - default_value: /home/arduino/.arduino-bricks/ei-models - description: Path to the custom model directory - hidden: true - - name: BIND_ADDRESS - default_value: 127.0.0.1 - description: Bind address - hidden: true -- id: arduino:visual_anomaly_detection - name: Visual Anomaly Detection - description: "Brick for visual anomaly detection using a pre-trained model. It processes\ - \ images to identify unusual patterns and returns detected anomalies with bounding\ - \ boxes. \nSupports pre-trained models provided by the framework or custom anomaly\ - \ detection models trained on the Edge Impulse platform. \n" - require_container: true - require_model: true - mount_devices_into_container: false - ports: [] - category: image - model_name: concrete-crack-anomaly-detection - variables: - - name: EI_V_ANOMALY_DETECTION_MODEL - default_value: /models/ootb/ei/concrete-crack-anomaly-detection.eim - description: Path to the model file - hidden: true - - name: CUSTOM_MODEL_PATH - default_value: /home/arduino/.arduino-bricks/ei-models - description: Path to the custom model directory - hidden: true - - name: BIND_ADDRESS - default_value: 127.0.0.1 - description: Bind address - hidden: true - id: arduino:cloud_llm name: Cloud LLM description: Cloud LLM Brick enables seamless integration with cloud-based Large @@ -133,56 +98,24 @@ bricks: - name: API_KEY description: API Key for the cloud-based LLM service secret: true -- id: arduino:weather_forecast - name: Weather Forecast - description: Online weather forecast module for Arduino using open-meteo.com geolocation - and weather APIs. Requires an internet connection. - require_container: false - require_model: false - mount_devices_into_container: false - ports: [] - category: miscellaneous -- id: arduino:arduino_cloud - name: Arduino Cloud - description: Connects to Arduino Cloud - require_container: false - require_model: false - mount_devices_into_container: false - ports: [] - category: null - variables: - - name: ARDUINO_DEVICE_ID - description: Arduino Cloud Device ID - secret: true - - name: ARDUINO_SECRET - description: Arduino Cloud Secret - secret: true -- id: arduino:video_object_detection - name: Video Object Detection - description: 'This object detection brick utilizes a pre-trained model to analyze - video streams from a camera. - - It identifies objects, returning their predicted class labels, bounding boxes, - and confidence scores. - - The output is a video stream featuring bounding boxes around detected objects, - with the added capability to trigger actions based on these detections. +- id: arduino:audio_classification + name: Audio Classification + description: 'Brick for audio classification using a pre-trained model. It processes + audio input to classify different sounds. - It supports pre-trained models provided by the framework and custom object detection - models trained on the Edge Impulse platform. + Brick is designed to work with pre-trained models provided by framework or with + custom audio classification models trained on Edge Impulse platform. ' require_container: true require_model: true - mount_devices_into_container: true + mount_devices_into_container: false ports: [] - category: video - model_name: yolox-object-detection - required_devices: - - camera + category: audio + model_name: glass-breaking variables: - - name: EI_V_OBJ_DETECTION_MODEL - default_value: /models/ootb/ei/yolo-x-nano.eim + - name: EI_AUDIO_CLASSIFICATION_MODEL + default_value: /models/ootb/ei/glass-breaking.eim description: Path to the model file hidden: true - name: CUSTOM_MODEL_PATH @@ -190,23 +123,38 @@ bricks: description: Path to the custom model directory hidden: true - name: BIND_ADDRESS - default_value: 0.0.0.0 + default_value: 127.0.0.1 description: Bind address hidden: true - - name: VIDEO_DEVICE - default_value: /dev/video1 - description: Video device path - hidden: true -- id: arduino:vibration_anomaly_detection - name: Vibration Anomaly detection - description: 'This Brick is designed for vibration anomaly detection and recognition, - leveraging pre-trained models. +- id: arduino:dbstorage_sqlstore + name: Database - SQL + description: Simplified database storage layer for Arduino sensor data using SQLite + local database. + require_container: false + require_model: false + mount_devices_into_container: false + ports: [] + category: storage +- id: arduino:web_ui + name: WebUI - HTML + description: A user interface based on HTML and JavaScript that can rely on additional + APIs and a WebSocket exposed by a web server. + require_container: false + require_model: false + mount_devices_into_container: false + ports: + - 7000 + category: ui + requires_display: webview +- id: arduino:motion_detection + name: Motion detection + description: 'This Brick is designed for motion detection and recognition, leveraging + pre-trained models. - It takes input from sensors (accelerometer) to identify possible anomalies based - on vibration patterns. + It takes input from accelerometer sensors to identify various motion patterns. You can use it with pre-trained models provided by the framework or with your - own custom anomaly detections models trained on the Edge Impulse platform. + custom motion classification models trained on the Edge Impulse platform. ' require_container: true @@ -214,10 +162,10 @@ bricks: mount_devices_into_container: false ports: [] category: null - model_name: fan-anomaly-detection + model_name: updown-wave-motion-detection variables: - - name: EI_VIBRATION_ANOMALY_DETECTION_MODEL - default_value: /models/ootb/ei/fan-anomaly-detection.eim + - name: EI_MOTION_DETECTION_MODEL + default_value: /models/ootb/ei/updown-wave-motion-detection.eim description: Path to the model file hidden: true - name: CUSTOM_MODEL_PATH @@ -228,27 +176,54 @@ bricks: default_value: 127.0.0.1 description: Bind address hidden: true -- id: arduino:web_ui - name: WebUI - HTML - description: A user interface based on HTML and JavaScript that can rely on additional - APIs and a WebSocket exposed by a web server. +- id: arduino:mood_detector + name: Mood Detection + description: 'This brick analyzes text sentiment to detect the mood expressed. + + It classifies text as positive, negative, or neutral. + + ' require_container: false require_model: false mount_devices_into_container: false - ports: - - 7000 - category: ui - requires_display: webview -- id: arduino:sound_generator - name: Sound Generator - description: Generate sounds like notes, tones, or melodies using waveforms. + ports: [] + category: text +- id: arduino:arduino_cloud + name: Arduino Cloud + description: Connects to Arduino Cloud require_container: false require_model: false mount_devices_into_container: false ports: [] + category: null + variables: + - name: ARDUINO_DEVICE_ID + description: Arduino Cloud Device ID + secret: true + - name: ARDUINO_SECRET + description: Arduino Cloud Secret + secret: true +- id: arduino:cloud_asr + name: Cloud ASR + description: 'Cloud ASR Brick provides a unified and flexible way to connect cloud-based + Automatic Speech Recognition (ASR) services and transform spoken audio into text. + + It enables real-time, streaming transcription from a connected microphone, leveraging + leading cloud providers to deliver low-latency speech-to-text processing. + + ' + require_container: false + require_model: false + mount_devices_into_container: true + ports: [] category: audio required_devices: - - speaker + - microphone + variables: + - name: API_KEY + description: API Key for the cloud-based Speech to Text service + - name: LANGUAGE + description: 'Language code for transcription (e.g., en, it). Default: en' - id: arduino:telegram_bot name: Telegram Bot description: A brick to interact with Telegram Bot API @@ -261,25 +236,25 @@ bricks: - name: TELEGRAM_BOT_TOKEN description: Telegram Bot Token secret: true -- id: arduino:camera_code_detection - name: Camera Code Detection - description: Scans a camera for barcodes and QR codes +- id: arduino:llm + name: Large Language Model (LLM) + description: Large Language Model (LLM) Brick enables seamless integration with + locally hosted LLMs for advanced AI capabilities in your Arduino projects. require_container: false - require_model: false - mount_devices_into_container: false - ports: [] - category: video - required_devices: - - camera -- id: arduino:dbstorage_sqlstore - name: Database - SQL - description: Simplified database storage layer for Arduino sensor data using SQLite - local database. - require_container: false - require_model: false + require_model: true mount_devices_into_container: false ports: [] - category: storage + category: null + model_name: genie:qwen3-4b + supported_boards: + - ventunoq + requires_services: + - arduino:genie + variables: + - name: LOCAL_LLM_API_KEY + default_value: api_key + description: API Key for the local LLM service + secret: true - id: arduino:video_image_classification name: Video Image Classification description: 'This image classification brick utilizes a pre-trained model to analyze @@ -319,27 +294,75 @@ bricks: default_value: /dev/video1 description: Video device path hidden: true -- id: arduino:cloud_asr - name: Cloud ASR - description: 'Cloud ASR Brick provides a unified and flexible way to connect cloud-based - Automatic Speech Recognition (ASR) services and transform spoken audio into text. +- id: arduino:asr + name: Automatic Speech Recognition (ASR) + description: Automatic Speech Recognition brick for offline speech-to-text processing + require_container: false + require_model: true + mount_devices_into_container: false + ports: [] + category: audio + model_name: whisper-small + supported_boards: + - ventunoq + requires_services: + - arduino:genie_audio + variables: + - name: VAD_LEN_HANGOVER + default_value: 70 + description: Length of hangover for Voice Activity Detection (in number of frames + of 10ms duration) + hidden: true +- id: arduino:video_object_detection + name: Video Object Detection + description: 'This object detection brick utilizes a pre-trained model to analyze + video streams from a camera. - It enables real-time, streaming transcription from a connected microphone, leveraging - leading cloud providers to deliver low-latency speech-to-text processing. + It identifies objects, returning their predicted class labels, bounding boxes, + and confidence scores. + + The output is a video stream featuring bounding boxes around detected objects, + with the added capability to trigger actions based on these detections. + + It supports pre-trained models provided by the framework and custom object detection + models trained on the Edge Impulse platform. ' - require_container: false - require_model: false + require_container: true + require_model: true mount_devices_into_container: true ports: [] - category: audio + category: video + model_name: yolox-object-detection required_devices: - - microphone + - camera variables: - - name: API_KEY - description: API Key for the cloud-based Speech to Text service - - name: LANGUAGE - description: 'Language code for transcription (e.g., en, it). Default: en' + - name: EI_V_OBJ_DETECTION_MODEL + default_value: /models/ootb/ei/yolo-x-nano.eim + description: Path to the model file + hidden: true + - name: CUSTOM_MODEL_PATH + default_value: /home/arduino/.arduino-bricks/ei-models + description: Path to the custom model directory + hidden: true + - name: BIND_ADDRESS + default_value: 0.0.0.0 + description: Bind address + hidden: true + - name: VIDEO_DEVICE + default_value: /dev/video1 + description: Video device path + hidden: true +- id: arduino:camera_code_detection + name: Camera Code Detection + description: Scans a camera for barcodes and QR codes + require_container: false + require_model: false + mount_devices_into_container: false + ports: [] + category: video + required_devices: + - camera - id: arduino:dbstorage_tsstore name: Database - Time Series description: Simplified time series database storage layer for Arduino sensor samples @@ -366,28 +389,16 @@ bricks: default_value: 127.0.0.1 description: External container address hidden: true -- id: arduino:mood_detector - name: Mood Detection - description: 'This brick analyzes text sentiment to detect the mood expressed. - - It classifies text as positive, negative, or neutral. - - ' +- id: arduino:sound_generator + name: Sound Generator + description: Generate sounds like notes, tones, or melodies using waveforms. require_container: false require_model: false mount_devices_into_container: false ports: [] - category: text -- id: arduino:streamlit_ui - name: WebUI - Streamlit - description: A simplified user interface based on Streamlit and Python. - require_container: false - require_model: false - mount_devices_into_container: false - ports: - - 7000 - category: ui - requires_display: webview + category: audio + required_devices: + - speaker - id: arduino:object_detection name: Object Detection description: "Brick for object detection using a pre-trained model. It processes\ @@ -413,10 +424,69 @@ bricks: default_value: 127.0.0.1 description: Bind address hidden: true -- id: arduino:audio_classification - name: Audio Classification - description: 'Brick for audio classification using a pre-trained model. It processes - audio input to classify different sounds. +- id: arduino:gesture_recognition + name: Gesture Recognition + description: 'This gesture recognition brick utilizes a pre-trained model to analyze + video streams from a camera. + + The output is a video stream featuring gesture recognition as overlay, with the + added capability to + + trigger actions based on these detections. + + ' + require_container: true + require_model: false + mount_devices_into_container: false + ports: [] + category: video + required_devices: + - camera + supported_boards: + - ventunoq +- id: arduino:image_classification + name: Image Classification + description: "Brick for image classification using a pre-trained model. It processes\ + \ images and returns the predicted class label and confidence score.\nBrick is\ + \ designed to work with pre-trained models provided by framework or with custom\ + \ image classification models trained on Edge Impulse platform. \n" + require_container: true + require_model: true + mount_devices_into_container: false + ports: [] + category: video + model_name: mobilenet-image-classification + variables: + - name: EI_CLASSIFICATION_MODEL + default_value: /models/ootb/ei/mobilenet-v2-224px.eim + description: Path to the model file + hidden: true + - name: CUSTOM_MODEL_PATH + default_value: /home/arduino/.arduino-bricks/ei-models + description: Path to the custom model directory + hidden: true + - name: BIND_ADDRESS + default_value: 127.0.0.1 + description: Bind address + hidden: true +- id: arduino:vlm + name: Visual Language Model (VLM) + description: Visual Language Model (VLM) Brick enables seamless integration with + locally hosted VLMs for advanced AI capabilities in your Arduino projects. + require_container: false + require_model: true + mount_devices_into_container: false + ports: [] + category: null + model_name: genie:qwen3-vl-4b + supported_boards: + - ventunoq + requires_services: + - arduino:genie +- id: arduino:keyword_spotting + name: Keyword Spotting + description: 'Brick for keyword spotting using a pre-trained model. It processes + audio input to detect specific keywords or phrases. Brick is designed to work with pre-trained models provided by framework or with custom audio classification models trained on Edge Impulse platform. @@ -427,10 +497,12 @@ bricks: mount_devices_into_container: false ports: [] category: audio - model_name: glass-breaking + model_name: keyword-spotting-hey-arduino + required_devices: + - microphone variables: - - name: EI_AUDIO_CLASSIFICATION_MODEL - default_value: /models/ootb/ei/glass-breaking.eim + - name: EI_KEYWORD_SPOTTING_MODEL + default_value: /models/ootb/ei/keyword-spotting-hey-arduino.eim description: Path to the model file hidden: true - name: CUSTOM_MODEL_PATH diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/audio_classification/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/audio_classification/brick_compose.yaml similarity index 91% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/audio_classification/brick_compose.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/audio_classification/brick_compose.yaml index 8887b1c18..86d6ef972 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/audio_classification/brick_compose.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/audio_classification/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-audio-classifier-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1339:1337 volumes: diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/dbstorage_tsstore/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/dbstorage_tsstore/brick_compose.yaml similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/dbstorage_tsstore/brick_compose.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/dbstorage_tsstore/brick_compose.yaml diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/gesture_recognition/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/gesture_recognition/brick_compose.yaml new file mode 100644 index 000000000..6ea5c2079 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/gesture_recognition/brick_compose.yaml @@ -0,0 +1,19 @@ +services: + gesture_recognition: + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/gesture-recognition:dev-next + logging: + driver: "json-file" + options: + max-size: "5m" + max-file: "2" + ports: + - ${BIND_ADDRESS:-0.0.0.0}:5002:5002 + devices: + - /dev/dma_heap/system + - /dev/dma_heap/qcom,system + - /dev/fastrpc-cdsp + healthcheck: + test: [ "CMD-SHELL", "nc -zv gesture_recognition 5002 || exit 1" ] + interval: 1s + timeout: 2s + retries: 30 \ No newline at end of file diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/image_classification/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/image_classification/brick_compose.yaml similarity index 91% rename from internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/image_classification/brick_compose.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/image_classification/brick_compose.yaml index 742c6474d..4893e246e 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/image_classification/brick_compose.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/image_classification/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-classification-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1338:1337 volumes: diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/keyword_spotting/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/keyword_spotting/brick_compose.yaml similarity index 91% rename from internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/keyword_spotting/brick_compose.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/keyword_spotting/brick_compose.yaml index ef3d418cc..c1d00f8d8 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/keyword_spotting/brick_compose.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/keyword_spotting/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-keyword-spot-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1340:1337 volumes: diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/motion_detection/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/motion_detection/brick_compose.yaml similarity index 91% rename from internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/motion_detection/brick_compose.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/motion_detection/brick_compose.yaml index 1943c9785..fb4dd245e 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/motion_detection/brick_compose.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/motion_detection/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-motion-detection-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1341:1337 volumes: diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/object_detection/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/object_detection/brick_compose.yaml similarity index 91% rename from internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/object_detection/brick_compose.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/object_detection/brick_compose.yaml index bfe701204..7a7e1ff7b 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/object_detection/brick_compose.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/object_detection/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-obj-detection-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1337:1337 volumes: diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/vibration_anomaly_detection/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/vibration_anomaly_detection/brick_compose.yaml similarity index 92% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/vibration_anomaly_detection/brick_compose.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/vibration_anomaly_detection/brick_compose.yaml index 3a4c2a245..edc0e9fd9 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/vibration_anomaly_detection/brick_compose.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/vibration_anomaly_detection/brick_compose.yaml @@ -2,14 +2,12 @@ # CUSTOM_MODEL_PATH = path to the custom model directory services: ei-anomaly-detection-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1342:1337 volumes: diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/video_image_classification/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/video_image_classification/brick_compose.yaml similarity index 84% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/video_image_classification/brick_compose.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/video_image_classification/brick_compose.yaml index 158464641..3584d13bf 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/video_image_classification/brick_compose.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/video_image_classification/brick_compose.yaml @@ -1,6 +1,6 @@ services: ei-video-classification-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: @@ -13,7 +13,7 @@ services: - "/run/udev:/run/udev" command: ["--model-file", "${EI_V_CLASSIFICATION_MODEL:-/models/ootb/ei/mobilenet-v2-224px.eim}", "--gst-source", "tcpserversrc host=0.0.0.0 port=5050 ! jpegdec", "--dont-print-predictions", "--preview-original-resolution"] healthcheck: - test: [ "CMD-SHELL", "netstat -tuln | grep :5050 || exit 1" ] + test: [ "CMD-SHELL", "grep -i ':13BA' /proc/net/tcp | grep ' 0A ' || exit 1" ] # Hex encoding of port 5050 interval: 2s timeout: 2s retries: 25 diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/video_object_detection/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/video_object_detection/brick_compose.yaml similarity index 84% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/video_object_detection/brick_compose.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/video_object_detection/brick_compose.yaml index cff716a92..6c35e5db9 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/video_object_detection/brick_compose.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/video_object_detection/brick_compose.yaml @@ -1,6 +1,6 @@ services: ei-video-obj-detection-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: @@ -13,7 +13,7 @@ services: - "/run/udev:/run/udev" command: ["--model-file", "${EI_V_OBJ_DETECTION_MODEL:-/models/ootb/ei/yolo-x-nano.eim}", "--gst-source", "tcpserversrc host=0.0.0.0 port=5050 ! jpegdec", "--dont-print-predictions", "--preview-original-resolution"] healthcheck: - test: [ "CMD-SHELL", "netstat -tuln | grep :5050 || exit 1" ] + test: [ "CMD-SHELL", "grep -i ':13BA' /proc/net/tcp | grep ' 0A ' || exit 1" ] # Hex encoding of port 5050 interval: 2s timeout: 2s retries: 25 diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/visual_anomaly_detection/brick_compose.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/visual_anomaly_detection/brick_compose.yaml similarity index 92% rename from internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/visual_anomaly_detection/brick_compose.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/visual_anomaly_detection/brick_compose.yaml index d62ec03f3..e0b3f6231 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/visual_anomaly_detection/brick_compose.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/compose/arduino/visual_anomaly_detection/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-obj-video-anomalies-det-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1343:1337 volumes: diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/arduino_cloud/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/arduino_cloud/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/arduino_cloud/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/arduino_cloud/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/asr/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/asr/README.md new file mode 100644 index 000000000..177c21334 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/asr/README.md @@ -0,0 +1,10 @@ +# Automatic Speech Recognition Brick + +The `AutomaticSpeechRecognition` brick provides on-device automatic speech recognition (ASR) capabilities for audio streams and files. It offers a high-level interface for transcribing audio using a local model, with support for both real-time and batch processing. + +## LocalASR Class Features + +- **Offline Operation:** All transcriptions are performed locally, ensuring data privacy and eliminating network dependencies. +- **Multi Language Support:** Supports the transcription of spoken multiple languages. +- **Audio Input Formats**: Designed to work with the Microphone peripheral, WAV and PCM audio. +- **Concurrency Control**: Limits the number of simultaneous transcription sessions to avoid resource exhaustion. diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/audio_classification/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/audio_classification/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/audio_classification/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/audio_classification/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/camera_code_detection/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/camera_code_detection/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/camera_code_detection/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/camera_code_detection/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/cloud_asr/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/cloud_asr/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/cloud_asr/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/cloud_asr/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/cloud_llm/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/cloud_llm/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/cloud_llm/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/cloud_llm/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/dbstorage_sqlstore/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/dbstorage_sqlstore/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/dbstorage_sqlstore/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/dbstorage_sqlstore/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/dbstorage_tsstore/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/dbstorage_tsstore/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/dbstorage_tsstore/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/dbstorage_tsstore/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/gesture_recognition/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/gesture_recognition/README.md new file mode 100644 index 000000000..8ed176d39 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/gesture_recognition/README.md @@ -0,0 +1,5 @@ +# Gesture Recognition Brick + +This gesture recognition brick utilizes a pre-trained model to analyze video streams from a camera. +The output is a video stream featuring gesture recognition as overlay, with the added capability to +trigger actions based on these detections. diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/image_classification/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/image_classification/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/image_classification/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/image_classification/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/keyword_spotting/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/keyword_spotting/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/keyword_spotting/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/keyword_spotting/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/llm/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/llm/README.md new file mode 100644 index 000000000..cdfddf309 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/llm/README.md @@ -0,0 +1,7 @@ +# Large Language Model (LLMs) Brick + +A Brick for interacting with locally-based Large Language Models (LLMs). + +This class wraps LangChain functionality to provide a simplified, unified interface for chatting with models like Qwenm, LLama, Gemma. +It supports both synchronous 'one-shot' responses and streaming output, with optional conversational memory. + diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/mood_detector/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/mood_detector/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/mood_detector/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/mood_detector/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/motion_detection/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/motion_detection/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/motion_detection/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/motion_detection/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/object_detection/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/object_detection/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/object_detection/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/object_detection/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/sound_generator/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/sound_generator/README.md similarity index 93% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/sound_generator/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/sound_generator/README.md index 378b010cb..864fa7e77 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/sound_generator/README.md +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/sound_generator/README.md @@ -8,9 +8,9 @@ Sound Generator is a lightweight and expressive audio generation brick that lets - Generate tones and melodies from notes or frequencies - Choose your waveform — sine, square, triangle, sawtooth -- Add sound effects such as chorus, overdrive, delay, vibrato, or distortion +- Add sound effects such as ADSR, bitcrusher, chorus, tremolo, vibrato, or overdrive - Compose procedural music directly from code -- Real-time playback over speaker +- Playback over speaker ## Code example and usage diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/streamlit_ui/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/streamlit_ui/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/streamlit_ui/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/streamlit_ui/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/telegram_bot/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/telegram_bot/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/telegram_bot/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/telegram_bot/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/vibration_anomaly_detection/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/vibration_anomaly_detection/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/vibration_anomaly_detection/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/vibration_anomaly_detection/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/video_image_classification/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/video_image_classification/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/video_image_classification/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/video_image_classification/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/video_object_detection/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/video_object_detection/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/video_object_detection/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/video_object_detection/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/visual_anomaly_detection/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/visual_anomaly_detection/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/visual_anomaly_detection/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/visual_anomaly_detection/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/vlm/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/vlm/README.md new file mode 100644 index 000000000..5f7b41e1f --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/vlm/README.md @@ -0,0 +1,3 @@ +# Vision Language Model (VLM) Brick + +Visual Language Model (VLM) Brick enables seamless integration with locally hosted VLMs for advanced AI capabilities in your Arduino projects. diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/wave_generator/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/wave_generator/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/wave_generator/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/wave_generator/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/weather_forecast/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/weather_forecast/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/weather_forecast/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/weather_forecast/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/web_ui/README.md b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/web_ui/README.md similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/docs/arduino/web_ui/README.md rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/docs/arduino/web_ui/README.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/arduino_cloud/1_led_blink.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/arduino_cloud/1_led_blink.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/arduino_cloud/1_led_blink.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/arduino_cloud/1_led_blink.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/arduino_cloud/2_light_with_colors_monitor.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/arduino_cloud/2_light_with_colors_monitor.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/arduino_cloud/2_light_with_colors_monitor.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/arduino_cloud/2_light_with_colors_monitor.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/arduino_cloud/3_light_with_colors_command.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/arduino_cloud/3_light_with_colors_command.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/arduino_cloud/3_light_with_colors_command.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/arduino_cloud/3_light_with_colors_command.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/00_transcribe_wav.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/00_transcribe_wav.py new file mode 100644 index 000000000..83d54bc83 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/00_transcribe_wav.py @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Transcribe a wav file" +# EXAMPLE_REQUIRES = "Requires a WAV file with a voice recording" +from arduino.app_bricks.asr import AutomaticSpeechRecognition + + +asr = AutomaticSpeechRecognition() +with open("recording_01.wav", "rb") as wav_file: + text = asr.transcribe_wav(wav_file.read()) + print(f"Transcription: {text}") diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/01_stream_wav_transcription.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/01_stream_wav_transcription.py new file mode 100644 index 000000000..0b624732b --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/01_stream_wav_transcription.py @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Transcribe a wav file and stream the results" +# EXAMPLE_REQUIRES = "Requires a WAV file with a voice recording" +from arduino.app_bricks.asr import AutomaticSpeechRecognition + + +asr = AutomaticSpeechRecognition() +with open("recording_01.wav", "rb") as wav_file: + with asr.transcribe_wav_stream(wav_file.read()) as stream: + for chunk in stream: + match chunk.type: + case "partial_text": + print(f"Partial: {chunk.data}") + case "full_text": + print(f"Final: {chunk.data}") + break diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/02_transcribe_mic.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/02_transcribe_mic.py new file mode 100644 index 000000000..8c91655ef --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/02_transcribe_mic.py @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Transcribe audio from microphone" +# EXAMPLE_REQUIRES = "Requires a microphone device" +from arduino.app_bricks.asr import AutomaticSpeechRecognition +from arduino.app_peripherals.microphone import Microphone + + +mic = Microphone() +mic.start() + +asr = AutomaticSpeechRecognition() +text = asr.transcribe_mic(mic, duration=5) +print(f"Transcription: {text}") + +mic.stop() diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/03_stream_mic_transcription.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/03_stream_mic_transcription.py new file mode 100644 index 000000000..8f0f8414c --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/asr/03_stream_mic_transcription.py @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Transcribe audio from microphone and stream the results" +# EXAMPLE_REQUIRES = "Requires a microphone device" +from arduino.app_bricks.asr import AutomaticSpeechRecognition +from arduino.app_peripherals.microphone import Microphone + + +mic = Microphone() +mic.start() + +asr = AutomaticSpeechRecognition() +with asr.transcribe_mic_stream(mic, duration=5) as stream: + for chunk in stream: + match chunk.type: + case "partial_text": + print(f"Partial: {chunk.data}") + case "full_text": + print(f"Final: {chunk.data}") + break + +mic.stop() diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/audio_classification/1_glass_breaking_from_mic.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/audio_classification/1_glass_breaking_from_mic.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/audio_classification/1_glass_breaking_from_mic.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/audio_classification/1_glass_breaking_from_mic.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/audio_classification/2_glass_breaking_from_file.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/audio_classification/2_glass_breaking_from_file.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/audio_classification/2_glass_breaking_from_file.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/audio_classification/2_glass_breaking_from_file.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/camera_code_detection/1_detection.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/camera_code_detection/1_detection.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/camera_code_detection/1_detection.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/camera_code_detection/1_detection.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/camera_code_detection/2_detection_list.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/camera_code_detection/2_detection_list.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/camera_code_detection/2_detection_list.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/camera_code_detection/2_detection_list.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/camera_code_detection/3_detection_with_overrides.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/camera_code_detection/3_detection_with_overrides.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/camera_code_detection/3_detection_with_overrides.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/camera_code_detection/3_detection_with_overrides.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_asr/1_asr.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_asr/1_asr.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_asr/1_asr.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_asr/1_asr.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_asr/2_multilingual_asr.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_asr/2_multilingual_asr.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_asr/2_multilingual_asr.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_asr/2_multilingual_asr.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_asr/3_event_stream.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_asr/3_event_stream.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_asr/3_event_stream.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_asr/3_event_stream.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_asr/4_different_providers.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_asr/4_different_providers.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_asr/4_different_providers.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_asr/4_different_providers.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/1_simple_prompt.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/1_simple_prompt.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/1_simple_prompt.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/1_simple_prompt.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/2_streaming_responses.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/2_streaming_responses.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/2_streaming_responses.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/2_streaming_responses.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/3_no_memory.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/3_no_memory.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/3_no_memory.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/3_no_memory.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/4_model_selection.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/4_model_selection.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/4_model_selection.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/4_model_selection.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/5_tool_calling.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/5_tool_calling.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/5_tool_calling.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/5_tool_calling.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/6_multimodal.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/6_multimodal.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/cloud_llm/6_multimodal.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/cloud_llm/6_multimodal.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/dbstorage_sqlstore/store_and_read_example.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/dbstorage_sqlstore/store_and_read_example.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/dbstorage_sqlstore/store_and_read_example.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/dbstorage_sqlstore/store_and_read_example.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/dbstorage_tsstore/1_write_read.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/dbstorage_tsstore/1_write_read.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/dbstorage_tsstore/1_write_read.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/dbstorage_tsstore/1_write_read.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/dbstorage_tsstore/2_read_all_samples.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/dbstorage_tsstore/2_read_all_samples.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/dbstorage_tsstore/2_read_all_samples.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/dbstorage_tsstore/2_read_all_samples.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/gesture_recognition/01_gesture.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/gesture_recognition/01_gesture.py new file mode 100644 index 000000000..912506140 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/gesture_recognition/01_gesture.py @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Gesture recognition" +# EXAMPLE_REQUIRES = "Requires a connected camera" + +from arduino.app_bricks.gesture_recognition import GestureRecognition +from arduino.app_utils.app import App + +pd = GestureRecognition() +pd.on_gesture("Victory", lambda meta: print("All your bases are belong to us")) +pd.on_gesture("Open_Palm", lambda meta: print("Moving left!"), hand="left") +pd.on_gesture("Open_Palm", lambda meta: print("Moving right!"), hand="right") + +App.run() diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/gesture_recognition/02_enter_exit.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/gesture_recognition/02_enter_exit.py new file mode 100644 index 000000000..fa4a4662a --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/gesture_recognition/02_enter_exit.py @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Gesture recognition hand enter/exit detection" +# EXAMPLE_REQUIRES = "Requires a connected camera" + +from arduino.app_bricks.gesture_recognition import GestureRecognition +from arduino.app_utils.app import App + +pd = GestureRecognition() +pd.on_enter(lambda: print("Hi there!")) +pd.on_exit(lambda: print("Goodbye!")) + +App.run() diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/gesture_recognition/03_confirm_deny.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/gesture_recognition/03_confirm_deny.py new file mode 100644 index 000000000..0d24c6065 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/gesture_recognition/03_confirm_deny.py @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Get user confirmation with hand gestures" +# EXAMPLE_REQUIRES = "Requires a connected camera" + +from arduino.app_bricks.gesture_recognition import GestureRecognition +from arduino.app_utils.app import App + +pd = GestureRecognition() +pd.on_gesture("Thumb_Up", lambda meta: print("Operation confirmed!")) +pd.on_gesture("Thumb_Down", lambda meta: print("Operation denied!")) + +App.run() diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/image_classification/image_classification_example.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/image_classification/image_classification_example.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/image_classification/image_classification_example.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/image_classification/image_classification_example.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/keyword_spotting/1_hello_world.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/keyword_spotting/1_hello_world.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/keyword_spotting/1_hello_world.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/keyword_spotting/1_hello_world.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/01_simple_chat.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/01_simple_chat.py new file mode 100644 index 000000000..392d13ebe --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/01_simple_chat.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with a Local LLM" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.llm import LargeLanguageModel +from arduino.app_utils import App + +llm = LargeLanguageModel() + + +def ask_prompt(): + prompt = input("Enter your prompt (or type 'exit' to quit): ") + if prompt.lower() == "exit": + raise StopIteration() + print(llm.chat(prompt)) + print() + + +App.run(ask_prompt) diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/02_simple_streaming_chat.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/02_simple_streaming_chat.py new file mode 100644 index 000000000..7352d2ce5 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/02_simple_streaming_chat.py @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with a Local LLM" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.llm import LargeLanguageModel +from arduino.app_utils import App + +llm = LargeLanguageModel() + + +def ask_prompt(): + prompt = input("Enter your prompt (or type 'exit' to quit): ") + if prompt.lower() == "exit": + raise StopIteration() + for chunk in llm.chat_stream(prompt): + print(chunk, end="", flush=True) + print() + + +App.run(ask_prompt) diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/03_external_provider_streaming_chat.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/03_external_provider_streaming_chat.py new file mode 100644 index 000000000..c30eacbfb --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/03_external_provider_streaming_chat.py @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with a Local LLM" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.llm import LargeLanguageModel +from arduino.app_utils import App + +llm = LargeLanguageModel(model="genie:qwen3:4b") + + +def ask_prompt(): + prompt = input("Enter your prompt (or type 'exit' to quit): ") + if prompt.lower() == "exit": + raise StopIteration() + for chunk in llm.chat_stream(prompt): + print(chunk, end="", flush=True) + print() + + +App.run(ask_prompt) diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/04_streaming_with_tools.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/04_streaming_with_tools.py new file mode 100644 index 000000000..32b353597 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/04_streaming_with_tools.py @@ -0,0 +1,48 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with tools and streaming" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.llm import LargeLanguageModel, tool +from arduino.app_utils import App + + +# Tool definition - simulates a simple weather API - please replace with actual API calls in a real application +@tool +def get_current_weather(location: str) -> str: + """ + Get the current weather in a given location. + The output is a string with a summary of the weather. + + Args: + location (str): The location to get the weather for. + + Returns: + str: A summary of the current weather in the specified location. + + """ + if "boston" in location.lower(): + return "The current weather in Boston is 15°C and partly cloudy." + elif "paris" in location.lower(): + return "The current weather in Paris is 8°C and rainy." + elif "turin" in location.lower(): + return "The current weather in Turin is 8°C and rainy." + else: + return f"Sorry, I do not have real-time weather data for {location}. Assuming it's a sunny day!" + + +llm = LargeLanguageModel(max_tokens=512, tools=[get_current_weather]) + + +def ask_prompt(): + prompt = input("Enter your prompt (or type 'exit' to quit): ") + if prompt.lower() == "exit": + raise StopIteration() + for chunk in llm.chat_stream(prompt): + print(chunk, end="", flush=True) + print() + + +App.run(ask_prompt) diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/04_tool_calling.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/04_tool_calling.py new file mode 100644 index 000000000..1caefe548 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/llm/04_tool_calling.py @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with an LLM using Tool Calling" +# EXAMPLE_REQUIRES = "Requires a valid API key to a cloud LLM service." + +from arduino.app_bricks.llm import LargeLanguageModel, tool +from arduino.app_utils import App + + +@tool +def get_current_weather(location: str) -> str: + """ + Get the current weather in a given location. + The output is a string with a summary of the weather. + """ + if "boston" in location.lower(): + return "The current weather in Boston is -5°C and rainy." + elif "paris" in location.lower(): + return "The current weather in Paris is 8°C and rainy." + elif "turin" in location.lower(): + return "The current weather in Turin is 8°C and rainy." + else: + return f"Sorry, I do not have real-time weather data for {location}. Assuming it's a sunny day!" + + +llm = LargeLanguageModel( + tools=[get_current_weather], +) + + +def ask_prompt(): + prompt = input("Enter your prompt (or type 'exit' to quit): ") + if prompt.lower() == "exit": + raise StopIteration() + print(llm.chat(prompt)) + print() + + +App.run(ask_prompt) diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/mood_detector/1_basic_usage.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/mood_detector/1_basic_usage.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/mood_detector/1_basic_usage.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/mood_detector/1_basic_usage.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/motion_detection/1_basic_usage.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/motion_detection/1_basic_usage.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/motion_detection/1_basic_usage.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/motion_detection/1_basic_usage.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/object_detection/object_detection_example.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/object_detection/object_detection_example.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/object_detection/object_detection_example.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/object_detection/object_detection_example.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/1_play_sequence.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/1_play_sequence.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/1_play_sequence.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/1_play_sequence.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/2_stream_sequence.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/2_stream_sequence.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/2_stream_sequence.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/2_stream_sequence.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/3_play_abc_notation.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/3_play_abc_notation.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/3_play_abc_notation.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/3_play_abc_notation.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/4_effects.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/4_effects.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/4_effects.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/4_effects.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/5_play_chords.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/5_play_chords.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/5_play_chords.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/5_play_chords.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/6_play_polyphonic.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/6_play_polyphonic.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/6_play_polyphonic.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/6_play_polyphonic.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/7_play_step_sequence.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/7_play_step_sequence.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/7_play_step_sequence.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/7_play_step_sequence.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/8_play_composition.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/8_play_composition.py similarity index 59% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/8_play_composition.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/8_play_composition.py index fbab43772..adf832b5c 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/8_play_composition.py +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/8_play_composition.py @@ -29,6 +29,21 @@ ) player = SoundGenerator() -player.play_composition(comp, block=True) + +# Choose how to play the composition: +# - "once": play it once and wait automatically until it finishes +# - "timed_loop": loop it for a fixed duration and wait automatically +# - "loop": loop forever until the app is stopped +PLAY_MODE = "timed_loop" +LOOP_DURATION_SECONDS = 10.0 + +if PLAY_MODE == "once": + player.play_composition(comp) +elif PLAY_MODE == "timed_loop": + player.play_composition(comp, loop=True, play_for=LOOP_DURATION_SECONDS) +elif PLAY_MODE == "loop": + player.play_composition(comp, loop=True) +else: + raise ValueError(f"Unsupported PLAY_MODE: {PLAY_MODE}") App.run() diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/9_play_wav.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/9_play_wav.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/9_play_wav.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/sound_generator/9_play_wav.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/streamlit_ui/1_basic_usage.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/streamlit_ui/1_basic_usage.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/streamlit_ui/1_basic_usage.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/streamlit_ui/1_basic_usage.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/1_text_echo.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/1_text_echo.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/1_text_echo.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/1_text_echo.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/2_command_handler.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/2_command_handler.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/2_command_handler.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/2_command_handler.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/3_whitelist_auth.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/3_whitelist_auth.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/3_whitelist_auth.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/3_whitelist_auth.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/4_scheduled_messages.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/4_scheduled_messages.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/4_scheduled_messages.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/4_scheduled_messages.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/5_photo_echo.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/5_photo_echo.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/5_photo_echo.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/5_photo_echo.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/6_audio_echo.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/6_audio_echo.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/6_audio_echo.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/6_audio_echo.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/7_video_echo.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/7_video_echo.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/7_video_echo.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/7_video_echo.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/8_document_echo.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/8_document_echo.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/telegram_bot/8_document_echo.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/telegram_bot/8_document_echo.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/vibration_anomaly_detection/1_basic_usage.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/vibration_anomaly_detection/1_basic_usage.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/vibration_anomaly_detection/1_basic_usage.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/vibration_anomaly_detection/1_basic_usage.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/video_image_classification/1_basic_usage.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/video_image_classification/1_basic_usage.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/video_image_classification/1_basic_usage.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/video_image_classification/1_basic_usage.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/video_object_detection/1_basic_usage.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/video_object_detection/1_basic_usage.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/video_object_detection/1_basic_usage.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/video_object_detection/1_basic_usage.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/video_object_detection/2_count_objects.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/video_object_detection/2_count_objects.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/video_object_detection/2_count_objects.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/video_object_detection/2_count_objects.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/video_object_detection/3_get_image.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/video_object_detection/3_get_image.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/video_object_detection/3_get_image.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/video_object_detection/3_get_image.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/visual_anomaly_detection/object_detection_example.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/visual_anomaly_detection/object_detection_example.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/visual_anomaly_detection/object_detection_example.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/visual_anomaly_detection/object_detection_example.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/visual_anomaly_detection/visual_anomaly_example.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/visual_anomaly_detection/visual_anomaly_example.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/visual_anomaly_detection/visual_anomaly_example.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/visual_anomaly_detection/visual_anomaly_example.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/vlm/01_simple_chat.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/vlm/01_simple_chat.py new file mode 100644 index 000000000..dd053e26f --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/vlm/01_simple_chat.py @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with a Local VLM" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.vlm import VisionLanguageModel + +vlm = VisionLanguageModel() + +print(vlm.chat("Describe the image.", images=["chair.jpg"])) diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/vlm/02_simple_streaming_chat.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/vlm/02_simple_streaming_chat.py new file mode 100644 index 000000000..32ed2f679 --- /dev/null +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/vlm/02_simple_streaming_chat.py @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with a Local VLM" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.vlm import VisionLanguageModel + +vlm = VisionLanguageModel() + +for chunk in vlm.chat_stream("Describe the image.", images=["chair.jpg"]): + print(chunk, end="", flush=True) diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/01_basic_tone.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/01_basic_tone.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/01_basic_tone.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/01_basic_tone.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/02_waveform_types.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/02_waveform_types.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/02_waveform_types.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/02_waveform_types.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/03_frequency_sweep.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/03_frequency_sweep.py similarity index 99% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/03_frequency_sweep.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/03_frequency_sweep.py index 005d3360a..33078b928 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/03_frequency_sweep.py +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/03_frequency_sweep.py @@ -32,7 +32,6 @@ def frequency_sweep(): for freq in range(880, 219, -20): wave_gen.frequency = float(freq) time.sleep(0.1) - wave_gen.amplitude = 0.0 # Fade out time.sleep(2) diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/04_envelope_control.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/04_envelope_control.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/04_envelope_control.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/04_envelope_control.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/05_custom_speaker.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/05_custom_speaker.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/wave_generator/05_custom_speaker.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/wave_generator/05_custom_speaker.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/weather_forecast/weather_forecast_by_city_example.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/weather_forecast/weather_forecast_by_city_example.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/weather_forecast/weather_forecast_by_city_example.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/weather_forecast/weather_forecast_by_city_example.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/weather_forecast/weather_forecast_by_coords_example.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/weather_forecast/weather_forecast_by_coords_example.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/weather_forecast/weather_forecast_by_coords_example.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/weather_forecast/weather_forecast_by_coords_example.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/web_ui/1_serve_webapp.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/web_ui/1_serve_webapp.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/web_ui/1_serve_webapp.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/web_ui/1_serve_webapp.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/web_ui/2_serve_webapp_and_api.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/web_ui/2_serve_webapp_and_api.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/web_ui/2_serve_webapp_and_api.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/web_ui/2_serve_webapp_and_api.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/web_ui/3_connect_disconnect.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/web_ui/3_connect_disconnect.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/web_ui/3_connect_disconnect.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/web_ui/3_connect_disconnect.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/web_ui/4_on_message.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/web_ui/4_on_message.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/web_ui/4_on_message.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/web_ui/4_on_message.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/web_ui/5_send_message.py b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/web_ui/5_send_message.py similarity index 100% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/web_ui/5_send_message.py rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/examples/arduino/web_ui/5_send_message.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/models-list.yaml b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/models-list.yaml similarity index 88% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/models-list.yaml rename to debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/models-list.yaml index 366474aa1..3d81d236e 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/models-list.yaml +++ b/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.9.0rc3/models-list.yaml @@ -1077,7 +1077,7 @@ models: source: "edgeimpulse" ei-project-id: 708500 ei-model-url: "https://studio.edgeimpulse.com/public/708500/live" - ei-gpu-mode: true + ei-gpu-mode: false source-model-id: "MobileNetV2" source-model-url: "https://www.tensorflow.org/api_docs/python/tf/keras/applications/MobileNetV2" bricks: @@ -1098,7 +1098,7 @@ models: source: "edgeimpulse" ei-project-id: 755016 ei-model-url: "https://studio.edgeimpulse.com/public/755016/live" - ei-gpu-mode: true + ei-gpu-mode: false source-model-id: "person-classification-wakevision" source-model-url: "https://studio.edgeimpulse.com/public/755016/live" bricks: @@ -1215,4 +1215,83 @@ models: ei-project-id: 842271 ei-model-url: "https://studio.edgeimpulse.com/public/842271/live" source-model-id: "hand-gestures" - source-model-url: "https://studio.edgeimpulse.com/public/842271/live" \ No newline at end of file + source-model-url: "https://studio.edgeimpulse.com/public/842271/live" + - "genie:qwen3-4b": + runner: genie + name : "Qwen 3-4B Instruct" + description: >- + The Qwen3-4B is a state-of-the-art multilingual base language model with 4 billion + parameters, excelling in language understanding, generation, coding, and mathematics. + supported_boards: ["ventunoq"] + bricks: + - id: "arduino:llm" + download_location: /var/lib/arduino-app-cli/models/genai + metadata: + source: "qualcomm-ai-hub" + source-model-id: "qwen3_4b_instruct_2507" + source-model-url: "https://aihub.qualcomm.com/models/qwen3_4b_instruct_2507" + - "genie:qwen3-vl-4b": + runner: genie + name : "Qwen 3-VL-4B VLM" + description: >- + The Qwen3 4B VLM is a state-of-the-art multilingual vision-language model with 4 + billion parameters, excelling in language understanding, generation, coding, and + mathematics. + supported_boards: ["ventunoq"] + bricks: + - id: "arduino:vlm" + download_location: /var/lib/arduino-app-cli/models/genai + metadata: + source: "qualcomm-ai-hub" + source-model-id: "qwen3_vl_4b" + source-model-url: "https://aihub.qualcomm.com/models/qwen3_vl_4b" + - gesture-recognition: + runner: brick + name : "MediaPipe Hand-Gesture Recognition" + description: >- + The MediaPipe Gesture Recognizer is a real-time machine learning pipeline that detects hands, predicts 21 hand landmarks, determines handedness (left/right), + and classifies gestures from a predefined set. + model_labels: + - Thumb_Up + - Thumb_Down + - Victory + - Pointing_Up + - Open_Palm + - ILoveYou + bricks: + - id: "arduino:gesture_recognition" + download_location: /var/lib/arduino-app-cli/models/genai + metadata: + source: "qualcomm-ai-hub" + source-model-id: "mediapipe_hand_gesture" + source-model-url: "https://aihub.qualcomm.com/models/mediapipe_hand_gesture" + - whisper-small: + runner: audio-analytics + name : "Whisper Small" + description: >- + Whisper-Small ASR (Automatic Speech Recognition) model is a state-of-the-art system designed for transcribing spoken language into written text. + This model is based on the transformer architecture and has been optimized for edge inference by replacing Multi-Head Attention (MHA) + with Single-Head Attention (SHA) and linear layers with convolutional (conv) layers. It exhibits robust performance in realistic, noisy environments, + making it highly reliable for real-world applications. + Specifically, it excels in long-form transcription, capable of accurately transcribing audio clips up to 30 seconds long. + supported_boards: ["ventunoq"] + bricks: + - id: "arduino:asr" + download_location: /var/lib/arduino-app-cli/models/audio-analytics/asr + metadata: + source: "qualcomm-ai-hub" + source-model-id: "whisper_small" + source-model-url: "https://aihub.qualcomm.com/models/whisper_small" + - melo-tts-en: + runner: audio-analytics + name : "Melo TTS (English)" + description: >- + MeloTTS is a high-quality multi-lingual text-to-speech library - English version. + supported_boards: ["ventunoq"] + bricks: + - id: "arduino:tts" + download_location: /var/lib/arduino-app-cli/models/audio-analytics/tts + metadata: + source: "qualcomm-ai-hub" + source-model-id: "melo_tts" + source-model-url: "https://aihub.qualcomm.com/models/melo_tts" \ No newline at end of file diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/air_quality_monitoring/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/air_quality_monitoring/API.md similarity index 98% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/air_quality_monitoring/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/air_quality_monitoring/API.md index 2264acdcc..5f9cb44bd 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/air_quality_monitoring/API.md +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/air_quality_monitoring/API.md @@ -46,9 +46,11 @@ Data class to represent air quality data. - **dominantpol** (*str*): Dominant pollutant in the air. - **iaqi** (*dict*): Individual AQI values for various pollutants. -### Methods +### Properties + +#### `pandas_dict: dict` -#### `pandas_dict()` +Access: read-only Return the data as a dictionary suitable for pandas DataFrame. diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/arduino_cloud/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/arduino_cloud/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/arduino_cloud/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/arduino_cloud/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/asr/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/asr/API.md new file mode 100644 index 000000000..a09c0c77d --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/asr/API.md @@ -0,0 +1,66 @@ +# asr API Reference + +## Index + +- Class `AutomaticSpeechRecognition` +- Class `ASREvent` +- Class `TranscriptionStream` + +--- + +## `AutomaticSpeechRecognition` class + +```python +class AutomaticSpeechRecognition(language: str) +``` + +### Parameters + +- **language**: The language code for the ASR model (e.g., "en" for English). + +### Methods + +#### `start()` + +Prepare the ASR for transcription. + +#### `stop()` + +Stop the ASR and clean up resources. + +#### `transcribe_mic(mic: BaseMicrophone, duration: int)` + +Transcribe audio data from the microphone and return the transcribed text. + +#### `transcribe_mic_stream(mic: BaseMicrophone, duration: int)` + +Transcribe audio data from the microphone and stream the results as soon as they are available. + +#### `transcribe_wav(wav_data: np.ndarray | bytes)` + +Transcribe audio from WAV data and return the transcribed text. + +#### `transcribe_wav_stream(wav_data: np.ndarray | bytes)` + +Transcribe audio from WAV data and stream the results. + + +--- + +## `ASREvent` class + +```python +class ASREvent() +``` + + +--- + +## `TranscriptionStream` class + +```python +class TranscriptionStream(generator: Generator[T, None, None]) +``` + +Iterator wrapper that guarantees proper teardown on context exit. + diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/audio_classification/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/audio_classification/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/audio_classification/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/audio_classification/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/camera_code_detection/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/camera_code_detection/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/camera_code_detection/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/camera_code_detection/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/cloud_asr/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/cloud_asr/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/cloud_asr/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/cloud_asr/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/cloud_llm/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/cloud_llm/API.md similarity index 93% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/cloud_llm/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/cloud_llm/API.md index 3eb7426c4..c50b8db3a 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/cloud_llm/API.md +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/cloud_llm/API.md @@ -64,6 +64,17 @@ Defaults to 10. - (*CloudLLM*): The current instance, allowing for method chaining. +#### `get_client()` + +Returns the underlying LangChain model instance. + +This allows for advanced users to access the full capabilities of the model +directly, such as calling `generate()` or `stream()` with custom message formats. + +##### Returns + +- (*BaseChatModel*): The LangChain chat model instance used internally. + #### `chat(message: str, images: List[str | bytes])` Sends a message to the AI and blocks until the complete response is received. diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/dbstorage_sqlstore/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/dbstorage_sqlstore/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/dbstorage_sqlstore/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/dbstorage_sqlstore/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/dbstorage_tsstore/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/dbstorage_tsstore/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/dbstorage_tsstore/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/dbstorage_tsstore/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/gesture_recognition/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/gesture_recognition/API.md new file mode 100644 index 000000000..19d9bca92 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/gesture_recognition/API.md @@ -0,0 +1,69 @@ +# gesture_recognition API Reference + +## Index + +- Class `GestureRecognition` + +--- + +## `GestureRecognition` class + +```python +class GestureRecognition(camera: BaseCamera | None) +``` + +### Methods + +#### `start()` + +Start the capture thread and asyncio event loop. + +#### `stop()` + +Stop all tracking and close connections. + +#### `on_gesture(gesture: str, callback: Callable[[dict], None], hand: Literal['left', 'right', 'both'])` + +Register or unregister a gesture callback. + +##### Parameters + +- **gesture** (*str*): The gesture name to detect +- **callback** (*Callable[[dict], None]*): Function to call when gesture is detected. None to unregister. +The callback receives a metadata dictionary with details about the detection, including: +- "hand": Which hand performed the gesture ("left" or "right") +- "gesture": Name of the detected gesture +- "confidence": Confidence score of the detection (0.0 to 1.0) +- "landmarks": List of key points of the detected hand (in (x, y, z) format where + x and y are pixel coordinates and z is normalized depth) +- "bounding_box_xyxy": [x_min, y_min, x_max, y_max] of the detected hand bounding box +- **hand** (*Literal["left", "right", "both"]*): Which hand(s) to track + +##### Raises + +- **ValueError**: If 'hand' argument is not valid + +#### `on_enter(callback: Callable[[], None])` + +Register a callback for when hands become visible. + +##### Parameters + +- **callback** (*Callable[[], None]*): Function to call when at least one hand is detected + +#### `on_exit(callback: Callable[[], None])` + +Register a callback for when hands are no longer visible. + +##### Parameters + +- **callback** (*Callable[[], None]*): Function to call when no hands are detected anymore + +#### `on_frame(callback: Callable[[np.ndarray], None])` + +Register a callback that receives each camera frame. + +##### Parameters + +- **callback** (*Callable[[np.ndarray], None]*): Function to call with camera frame data. None to unregister. + diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/image_classification/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/image_classification/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/image_classification/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/image_classification/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/keyword_spotting/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/keyword_spotting/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/keyword_spotting/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/keyword_spotting/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/llm/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/llm/API.md new file mode 100644 index 000000000..843cd65a3 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/llm/API.md @@ -0,0 +1,137 @@ +# llm API Reference + +## Index + +- Class `LargeLanguageModel` + +--- + +## `LargeLanguageModel` class + +```python +class LargeLanguageModel(api_key: str, system_prompt: str, temperature: Optional[float], max_tokens: int, timeout: int, tools: List[Callable[..., Any]], model: str) +``` + +A Brick for interacting with locally-based Large Language Models (LLMs). + +This class wraps LangChain functionality to provide a simplified, unified interface +for chatting with models like Qwenm, LLama, Gemma. It supports both synchronous +'one-shot' responses and streaming output, with optional conversational memory. + +### Parameters + +- **api_key** (*str*): The API access key for the target LLM service. Defaults to the +'LOCAL_LLM_API_KEY' environment variable. +- **model** (*str*): The specific model name or identifier to use (e.g., "genie:qwen3-4b"). +If not provided, model will be determined from app configuration or default brick configuration. +- **system_prompt** (*str*): A system-level instruction that defines the AI's persona +and constraints (e.g., "You are a helpful assistant"). Defaults to empty. +- **temperature** (*Optional[float]*): The sampling temperature between 0.0 and 1.0. +Higher values make output more random/creative; lower values make it more +deterministic. Defaults to 0.7. +- **max_tokens** (*int*): The maximum number of tokens to generate in the response. +Defaults to 512. +- **timeout** (*int*): The maximum duration in seconds to wait for a response before +timing out. Defaults to 30. +- **tools** (*List[Callable[..., Any]]*), default=None: A list of callable tool functions to register. Defaults to None. +- ****kwargs**: Additional arguments passed to the model constructor + +### Raises + +- **ValueError**: If `api_key` is not provided (empty string). + +### Methods + +#### `list_models()` + +Returns a list of supported local model identifiers. + +Note: LargeLanguageModel supports OpenAI-compatible API. This method uses the OpenAI client to query available models from the local server. +LangChain's OpenAI wrapper does not provide a direct method to list models, so we need to use the underlying OpenAI client directly. + +##### Returns + +- (*List[str]*): A list of supported model names (e.g., ["qwen2.5-7b"]). + +#### `with_memory(max_messages: int)` + +Enables conversational memory for this instance. + +Configures the Brick to retain a window of previous messages, allowing the +AI to maintain context across multiple interactions. + +##### Parameters + +- **max_messages** (*int*): The maximum number of messages (user + AI) to keep +in history. Older messages are discarded. Set to 0 to disable memory. +Defaults to 10. + +##### Returns + +- (*LargeLanguageModel*): The current instance, allowing for method chaining. + +#### `get_client()` + +Returns the underlying LangChain model instance. + +This allows for advanced users to access the full capabilities of the model +directly, such as calling `generate()` or `stream()` with custom message formats. + +##### Returns + +- (*BaseChatModel*): The LangChain chat model instance used internally. + +#### `chat(message: str, images: List[str | bytes])` + +Sends a message to the AI and blocks until the complete response is received. + +This method automatically manages conversation history if memory is enabled. + +##### Parameters + +- **message** (*str*): The input text prompt from the user. +- **images** (*List[str | bytes]*): Optional list of image file paths or raw bytes to include in the prompt. + +##### Returns + +- (*str*): The complete text response generated by the AI. + +##### Raises + +- **RuntimeError**: If the internal chain is not initialized or if the API request fails. + +#### `chat_stream(message: str, images: List[str | bytes])` + +Sends a message to the AI and yields response tokens as they are generated. + +This allows for processing or displaying the response in real-time (streaming). +The generation can be interrupted by calling `stop_stream()`. + +##### Parameters + +- **message** (*str*): The input text prompt from the user. +- **images** (*List[str | bytes]*): Optional list of image file paths or raw bytes to include in the prompt. + +##### Returns + +- (*str*): Chunks of text (tokens) from the AI response. + +##### Raises + +- **RuntimeError**: If the internal chain is not initialized or if the API request fails. +- **AlreadyGenerating**: If a streaming session is already active. + +#### `stop_stream()` + +Signals the active streaming generation to stop. + +This sets an internal flag that causes the `chat_stream` iterator to break +early. It has no effect if no stream is currently running. + +#### `clear_memory()` + +Clears the conversational memory history. + +Resets the stored context. This is useful for starting a new conversation +topic without previous context interfering. Only applies if memory is enabled. + diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/mood_detector/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/mood_detector/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/mood_detector/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/mood_detector/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/motion_detection/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/motion_detection/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/motion_detection/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/motion_detection/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/mqtt/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/mqtt/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/mqtt/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/mqtt/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/object_detection/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/object_detection/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/object_detection/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/object_detection/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/sound_generator/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/sound_generator/API.md similarity index 95% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/sound_generator/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/sound_generator/API.md index 11f0e66d9..0144a8e3d 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/sound_generator/API.md +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/sound_generator/API.md @@ -189,6 +189,8 @@ class SoundGenerator(output_device: Speaker, bpm: int, time_signature: tuple, oc ### Parameters - **output_device** (*Speaker*) (optional): The output device to play sound through. +When omitted, SoundGenerator creates an internal shared speaker so +multiple instances can overlap playback on the same device. - **bpm** (*int*): The tempo in beats per minute for note duration calculations. - **time_signature** (*tuple*): The time signature as (numerator, denominator). - **octaves** (*int*): Number of octaves to generate notes for (starting from octave @@ -240,7 +242,7 @@ Duration is in notes fractions (e.g., 1/4 for quarter note). - **volume** (*float*) (optional): Volume level (0.0 to 1.0). If None, uses master volume. - **block** (*bool*): If True, block until the entire sequence has been played. -#### `play_composition(composition: 'MusicComposition', block: bool)` +#### `play_composition(composition: 'MusicComposition', block: bool | None, loop: bool, play_for: float | None)` Play a MusicComposition object. @@ -253,7 +255,21 @@ is a list of (note, duration) tuples to play simultaneously. ##### Parameters - **composition** (*MusicComposition*): The composition to play. -- **block** (*bool*): If True, block until the entire composition has been played. +- **block** (*bool | None*): Controls whether this call waits for playback. +- True: wait until the current playback session ends. When + ``loop=True`` and ``play_for`` is not set, this may block + indefinitely until ``stop_sequence()`` or ``stop()`` is called + from another thread. +- False: start playback and return immediately. +- None: choose automatically based on the playback mode. Finite + playback blocks, infinite looping returns immediately, and + timed looping (``loop=True`` with ``play_for`` set) blocks + until the timed stop completes. This is the recommended + default for most scripts and examples. +- **loop** (*bool*): If True, loop the composition until ``stop_sequence()`` +is called or until ``play_for`` expires. +- **play_for** (*float | None*): When looping, stop automatically after the +given number of seconds. Requires ``loop=True``. #### `play_chord(notes: list[str], note_duration: float | str, volume: float, block: bool)` diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/streamlit_ui/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/streamlit_ui/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/streamlit_ui/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/streamlit_ui/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/telegram_bot/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/telegram_bot/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/telegram_bot/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/telegram_bot/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/tts/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/tts/API.md new file mode 100644 index 000000000..3169b8b3c --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/tts/API.md @@ -0,0 +1,70 @@ +# tts API Reference + +## Index + +- Class `TextToSpeech` + +--- + +## `TextToSpeech` class + +```python +class TextToSpeech() +``` + +Text-to-Speech brick for offline speech synthesis using local TTS service. + +### Methods + +#### `speak(text: str, language: Literal['en', 'es', 'zh'], speaker: BaseSpeaker | None)` + +Synthesize speech from text and play it through the provided speaker. + +##### Parameters + +- **text** (*str*): The text to be synthesized into speech. +- **language** (*Literal["en", "es", "zh"]*): The language of the text. +- **speaker** (*BaseSpeaker*): The speaker instance to play the synthesized audio. +If None, a default Speaker will be used. + +##### Raises + +- **ValueError**: If the specified language is not supported. +- **RuntimeError**: If the synthesis fails or maximum concurrency is reached. + +#### `synthesize_wav(text: str, language: Literal['en', 'es', 'zh'])` + +Synthesize speech from text and return the audio in WAV format. + +##### Parameters + +- **text** (*str*): The text to be synthesized into speech. +- **language** (*Literal["en", "es", "zh"]*): The language of the text. + +##### Returns + +- (*bytes*): The synthesized audio in WAV format. + +##### Raises + +- **ValueError**: If the specified language is not supported. +- **RuntimeError**: If the synthesis fails or maximum concurrency is reached. + +#### `synthesize_pcm(text: str, language: Literal['en', 'es', 'zh'])` + +Synthesize speech from text and return the audio in PCM format (mono, 16-bit, 44.1kHz). + +##### Parameters + +- **text** (*str*): The text to be synthesized into speech. +- **language** (*Literal["en", "es", "zh"]*): The language of the text. + +##### Returns + +- (*bytes*): The synthesized audio in PCM format. + +##### Raises + +- **ValueError**: If the specified language is not supported. +- **RuntimeError**: If the synthesis fails or maximum concurrency is reached. + diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/vibration_anomaly_detection/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/vibration_anomaly_detection/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/vibration_anomaly_detection/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/vibration_anomaly_detection/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/video_image_classification/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/video_image_classification/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/video_image_classification/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/video_image_classification/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/video_object_detection/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/video_object_detection/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/video_object_detection/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/video_object_detection/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/visual_anomaly_detection/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/visual_anomaly_detection/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/visual_anomaly_detection/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/visual_anomaly_detection/API.md diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/vlm/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/vlm/API.md new file mode 100644 index 000000000..ac23765d0 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/vlm/API.md @@ -0,0 +1,126 @@ +# vlm API Reference + +## Index + +- Class `VisionLanguageModel` + +--- + +## `VisionLanguageModel` class + +```python +class VisionLanguageModel(api_key: str, system_prompt: str, temperature: Optional[float], max_tokens: int, timeout: int, tools: List[Callable[..., Any]], model: str) +``` + +A Brick for interacting with locally-based Vision Language Models (VLMs). + +This class wraps LangChain functionality to provide a simplified, unified interface +for chatting with models like Qwenm, LLama, Gemma. It supports both synchronous +'one-shot' responses and streaming output, with optional conversational memory. + +### Parameters + +- **api_key** (*str*): The API access key for the target VLM service. Defaults to the +'LOCAL_LLM_API_KEY' environment variable. +- **model** (*str*): The specific model name or identifier to use (e.g., "genie:qwen3-4b"). +If not provided, model will be determined from app configuration or default brick configuration. +- **system_prompt** (*str*): A system-level instruction that defines the AI's persona +and constraints (e.g., "You are a helpful assistant"). Defaults to empty. +- **temperature** (*Optional[float]*): The sampling temperature between 0.0 and 1.0. +Higher values make output more random/creative; lower values make it more +deterministic. Defaults to 0.7. +- **max_tokens** (*int*): The maximum number of tokens to generate in the response. +Defaults to 256. +- **timeout** (*int*): The maximum duration in seconds to wait for a response before +timing out. Defaults to 30. +- **tools** (*List[Callable[..., Any]]*), default=None: A list of callable tool functions to register. Defaults to None. +- ****kwargs**: Additional arguments passed to the model constructor + +### Raises + +- **ValueError**: If `api_key` is not provided (empty string). + +### Methods + +#### `get_client()` + +Returns the underlying LangChain model instance. + +This allows for advanced users to access the full capabilities of the model +directly, such as calling `generate()` or `stream()` with custom message formats. + +##### Returns + +- (*BaseChatModel*): The LangChain chat model instance used internally. + +#### `chat(message: str, images: List[str | bytes])` + +Sends a message to the AI and blocks until the complete response is received. + +This method automatically manages conversation history if memory is enabled. + +##### Parameters + +- **message** (*str*): The input text prompt from the user. +- **images** (*List[str | bytes]*): Optional list of image file paths or raw bytes to include in the prompt. + +##### Returns + +- (*str*): The complete text response generated by the AI. + +##### Raises + +- **RuntimeError**: If the internal chain is not initialized or if the API request fails. + +#### `chat_stream(message: str, images: List[str | bytes])` + +Sends a message to the AI and yields response tokens as they are generated. + +This allows for processing or displaying the response in real-time (streaming). +The generation can be interrupted by calling `stop_stream()`. + +##### Parameters + +- **message** (*str*): The input text prompt from the user. +- **images** (*List[str | bytes]*): Optional list of image file paths or raw bytes to include in the prompt. + +##### Returns + +- (*str*): Chunks of text (tokens) from the AI response. + +##### Raises + +- **RuntimeError**: If the internal chain is not initialized or if the API request fails. +- **AlreadyGenerating**: If a streaming session is already active. + +#### `stop_stream()` + +Signals the active streaming generation to stop. + +This sets an internal flag that causes the `chat_stream` iterator to break +early. It has no effect if no stream is currently running. + +#### `clear_memory()` + +Clears the conversational memory history. + +Resets the stored context. This is useful for starting a new conversation +topic without previous context interfering. Only applies if memory is enabled. + +#### `with_memory(max_messages: int)` + +Enables conversational memory for this instance. + +Configures the Brick to retain a window of previous messages, allowing the +AI to maintain context across multiple interactions. + +##### Parameters + +- **max_messages** (*int*): The maximum number of messages (user + AI) to keep +in history. Older messages are discarded. Set to 0 to disable memory. +Defaults to 0. + +##### Returns + +- (*VisionLanguageModel*): The current instance, allowing for method chaining. + diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/wave_generator/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/wave_generator/API.md similarity index 88% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/wave_generator/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/wave_generator/API.md index 944e202b5..85d363ce0 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/wave_generator/API.md +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/wave_generator/API.md @@ -21,9 +21,11 @@ between frequency and amplitude changes using configurable envelope parameters. The generator runs continuously in a background thread, producing audio blocks with minimal latency. -### Methods +### Properties + +#### `wave_type: WaveType` -#### `wave_type()` +Access: read/write Get or set the current waveform type. @@ -35,7 +37,9 @@ Get or set the current waveform type. - (*WaveType*): Current waveform type ("sine", "square", "sawtooth", "triangle"). -#### `sample_rate()` +#### `sample_rate: int` + +Access: read-only Get the audio sample rate in Hz. @@ -47,7 +51,9 @@ Get the audio sample rate in Hz. - **RuntimeError**: If no speaker is configured. -#### `block_duration()` +#### `block_duration: float` + +Access: read-only Get the duration of each audio block in seconds. @@ -55,7 +61,9 @@ Get the duration of each audio block in seconds. - (*float*): Block duration in seconds. -#### `frequency()` +#### `frequency: float` + +Access: read/write Get or set the current output frequency in Hz. @@ -74,7 +82,9 @@ configured glide time. - **ValueError**: If the frequency is negative. -#### `amplitude()` +#### `amplitude: float` + +Access: read/write Get or set the current output amplitude. @@ -93,7 +103,9 @@ configured attack/release time. - **ValueError**: If the amplitude is not in range [0.0, 1.0]. -#### `attack()` +#### `attack: float` + +Access: read/write Get or set the current attack time in seconds. @@ -111,7 +123,9 @@ Attack time controls how quickly the amplitude rises to the target value. - **ValueError**: If the attack time is negative. -#### `release()` +#### `release: float` + +Access: read/write Get or set the current release time in seconds. @@ -129,7 +143,9 @@ Release time controls how quickly the amplitude falls to the target value. - **ValueError**: If the release time is negative. -#### `glide()` +#### `glide: float` + +Access: read/write Get the current frequency glide time in seconds (portamento). @@ -147,7 +163,9 @@ Glide time controls how quickly the frequency transitions to the target value. - **ValueError**: If the glide time is negative. -#### `volume()` +#### `volume: int | None` + +Access: read/write Get or set the wave generator volume level. @@ -163,7 +181,9 @@ Get or set the wave generator volume level. - **ValueError**: If the volume is not in range [0, 100]. -#### `state()` +#### `state: dict` + +Access: read-only Get current generator state. @@ -171,6 +191,8 @@ Get current generator state. - (*dict*): Dictionary containing current frequency, amplitude, wave type, etc. +### Methods + #### `start()` Start the wave generator and audio output. diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/weather_forecast/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/weather_forecast/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_bricks/weather_forecast/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/weather_forecast/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/web_ui/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/web_ui/API.md similarity index 93% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/web_ui/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/web_ui/API.md index ec08afdb2..773d0b3d4 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_bricks/web_ui/API.md +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_bricks/web_ui/API.md @@ -9,7 +9,7 @@ ## `WebUI` class ```python -class WebUI(addr: str, port: int, ui_path_prefix: str, api_path_prefix: str, assets_dir_path: str, certs_dir_path: str, use_tls: bool, use_ssl: bool | None) +class WebUI(addr: str, port: int, ui_path_prefix: str, api_path_prefix: str, assets_dir_path: str, certs_dir_path: str, use_tls: bool, use_ssl: bool | None, cors_origins: str) ``` Module for deploying a web server that can host a web application and expose APIs to its clients. @@ -27,10 +27,14 @@ and support real-time communication between the client and the server. - **certs_dir_path** (*str*) (optional), default="/app/certs": Path to TLS certificates directory. Defaults to "/app/certs". - **use_tls** (*bool*) (optional), default=False: Enable TLS/HTTPS. Defaults to False. - **use_ssl** (*bool*) (optional), default=None: Deprecated. Use use_tls instead. Defaults to None. +- **cors_origins** (*str*) (optional): CORS allowed origins. Can be "*" for all origins, a +comma-separated list of origins, or an empty string to disable CORS. Defaults to "*". -### Methods +### Properties + +#### `local_url: str` -#### `local_url()` +Access: read-only Get the locally addressable URL of the web server. @@ -38,7 +42,9 @@ Get the locally addressable URL of the web server. - (*str*): The server's URL (including protocol, address, and port). -#### `url()` +#### `url: str` + +Access: read-only Get the externally addressable URL of the web server. @@ -46,6 +52,8 @@ Get the externally addressable URL of the web server. - (*str*): The server's URL (including protocol, address, and port). +### Methods + #### `start()` Start the web server asynchronously. diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/camera/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/camera/API.md similarity index 97% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/camera/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/camera/API.md index 307eab7e8..34352b850 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/camera/API.md +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/camera/API.md @@ -56,12 +56,16 @@ providing a unified API regardless of the underlying camera protocol or type. a numpy array and returns a numpy array. Default: None - **auto_reconnect** (*bool*) (optional): Enable automatic reconnection on failure. Default: True. -### Methods +### Properties + +#### `status: Literal['disconnected', 'connected', 'streaming', 'paused']` -#### `status()` +Access: read-only Read-only property for camera status. +### Methods + #### `start()` Start the camera capture with retries, if enabled. @@ -279,13 +283,17 @@ accept self-signed certificates or when supplying your own certificates. - **adjustments** (*Callable[[np.ndarray], np.ndarray] | None*): Function to adjust frames - **auto_reconnect** (*bool*): Enable automatic reconnection on failure -### Methods +### Properties + +#### `url: str` -#### `url()` +Access: read-only Return the WebSocket server address. -#### `security_mode()` +#### `security_mode: str` + +Access: read-only Return current security mode for logging/debugging. diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/microphone/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/microphone/API.md similarity index 97% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/microphone/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/microphone/API.md index 6c5bda82f..901038e5a 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/api-docs/arduino/app_peripherals/microphone/API.md +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/microphone/API.md @@ -130,9 +130,11 @@ The output is always a NumPy array with the ALSA PCM format. - **buffer_size** (*int*): Size of the audio buffer. - **auto_reconnect** (*bool*) (optional): Enable automatic reconnection on failure. Default: True. -### Methods +### Properties + +#### `volume: int` -#### `volume()` +Access: read/write Get or set the microphone volume level. @@ -150,10 +152,14 @@ This controls the software volume of the microphone device. - **ValueError**: If the volume is not valid. -#### `status()` +#### `status: Literal['disconnected', 'connected', 'streaming', 'paused']` + +Access: read-only Read-only property for camera status. +### Methods + #### `start()` Start the microphone capture. @@ -304,16 +310,22 @@ ALSA limitations (~2000). - **MicrophoneConfigError**: If the format is not supported. -### Methods +### Properties + +#### `alsa_format_idx: int` -#### `alsa_format_idx()` +Access: read-only Get the ALSA format index corresponding to the current numpy dtype format. -#### `alsa_format_name()` +#### `alsa_format_name: str` + +Access: read-only Get the ALSA format string corresponding to the current numpy dtype format. +### Methods + #### `list_devices()` Return a list of available ALSA microphones (plughw only). @@ -382,13 +394,17 @@ it's sent to clients to suggest an optimal buffer size but clients may ignore it Default: Microphone.BUFFER_SIZE_BALANCED - 1024. - **auto_reconnect** (*bool*): Enable automatic reconnection on failure. -### Methods +### Properties + +#### `url: str` -#### `url()` +Access: read-only Return the WebSocket server address. -#### `security_mode()` +#### `security_mode: str` + +Access: read-only Return current security mode for logging/debugging. diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/speaker/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/speaker/API.md similarity index 96% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/speaker/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/speaker/API.md index d855ccf6d..c7f9a6ca5 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/speaker/API.md +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/speaker/API.md @@ -115,9 +115,11 @@ The input is always a NumPy array with the PCM format. - **SpeakerConfigError**: If the provided configuration is not valid. -### Methods +### Properties + +#### `volume: int` -#### `volume()` +Access: read/write Get or set the speaker volume level. @@ -135,10 +137,14 @@ This controls the software volume of the speaker device. - **ValueError**: If the volume is not valid. -#### `status()` +#### `status: Literal['disconnected', 'connected']` + +Access: read-only Read-only property for camera status. +### Methods + #### `start()` Start the speaker capture. @@ -264,23 +270,29 @@ parameter. Low values increase CPU usage but reduce latency. Default: 1024. Default: True. - **auto_reconnect** (*bool*): Enable automatic reconnection on failure. Default: True. -- **Note**: When shared=True, only higher buffer size values are supported due to -ALSA limitations (~2000). +- **Note**: When shared=True, buffer size is auto-negotiated due to +ALSA limitations to reach 125ms of latency. ### Raises - **SpeakerConfigError**: If the format is not supported. -### Methods +### Properties + +#### `alsa_format_idx: int` -#### `alsa_format_idx()` +Access: read-only Get the ALSA format index corresponding to the current numpy dtype format. -#### `alsa_format_name()` +#### `alsa_format_name: str` + +Access: read-only Get the ALSA format string corresponding to the current numpy dtype format. +### Methods + #### `list_devices()` Return a list of available ALSA speakers (plughw only). diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/usb_camera/API.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/usb_camera/API.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/api-docs/arduino/app_peripherals/usb_camera/API.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/api-docs/arduino/app_peripherals/usb_camera/API.md diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/bricks-list.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/bricks-list.yaml similarity index 87% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/bricks-list.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/bricks-list.yaml index 298671215..f044412ea 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/bricks-list.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/bricks-list.yaml @@ -1,24 +1,19 @@ bricks: -- id: arduino:motion_detection - name: Motion detection - description: 'This Brick is designed for motion detection and recognition, leveraging - pre-trained models. - - It takes input from accelerometer sensors to identify various motion patterns. - - You can use it with pre-trained models provided by the framework or with your - custom motion classification models trained on the Edge Impulse platform. - - ' +- id: arduino:visual_anomaly_detection + name: Visual Anomaly Detection + description: "Brick for visual anomaly detection using a pre-trained model. It processes\ + \ images to identify unusual patterns and returns detected anomalies with bounding\ + \ boxes. \nSupports pre-trained models provided by the framework or custom anomaly\ + \ detection models trained on the Edge Impulse platform. \n" require_container: true require_model: true mount_devices_into_container: false ports: [] - category: null - model_name: updown-wave-motion-detection + category: image + model_name: concrete-crack-anomaly-detection variables: - - name: EI_MOTION_DETECTION_MODEL - default_value: /models/ootb/ei/updown-wave-motion-detection.eim + - name: EI_V_ANOMALY_DETECTION_MODEL + default_value: /models/ootb/ei/concrete-crack-anomaly-detection.eim description: Path to the model file hidden: true - name: CUSTOM_MODEL_PATH @@ -29,26 +24,27 @@ bricks: default_value: 127.0.0.1 description: Bind address hidden: true -- id: arduino:keyword_spotting - name: Keyword Spotting - description: 'Brick for keyword spotting using a pre-trained model. It processes - audio input to detect specific keywords or phrases. +- id: arduino:vibration_anomaly_detection + name: Vibration Anomaly detection + description: 'This Brick is designed for vibration anomaly detection and recognition, + leveraging pre-trained models. - Brick is designed to work with pre-trained models provided by framework or with - custom audio classification models trained on Edge Impulse platform. + It takes input from sensors (accelerometer) to identify possible anomalies based + on vibration patterns. + + You can use it with pre-trained models provided by the framework or with your + own custom anomaly detections models trained on the Edge Impulse platform. ' require_container: true require_model: true mount_devices_into_container: false ports: [] - category: audio - model_name: keyword-spotting-hey-arduino - required_devices: - - microphone + category: null + model_name: fan-anomaly-detection variables: - - name: EI_KEYWORD_SPOTTING_MODEL - default_value: /models/ootb/ei/keyword-spotting-hey-arduino.eim + - name: EI_VIBRATION_ANOMALY_DETECTION_MODEL + default_value: /models/ootb/ei/fan-anomaly-detection.eim description: Path to the model file hidden: true - name: CUSTOM_MODEL_PATH @@ -59,6 +55,25 @@ bricks: default_value: 127.0.0.1 description: Bind address hidden: true +- id: arduino:streamlit_ui + name: WebUI - Streamlit + description: A simplified user interface based on Streamlit and Python. + require_container: false + require_model: false + mount_devices_into_container: false + ports: + - 7000 + category: ui + requires_display: webview +- id: arduino:weather_forecast + name: Weather Forecast + description: Online weather forecast module for Arduino using open-meteo.com geolocation + and weather APIs. Requires an internet connection. + require_container: false + require_model: false + mount_devices_into_container: false + ports: [] + category: miscellaneous - id: arduino:wave_generator name: Wave Generator description: Continuous wave generator for audio synthesis. Generates sine, square, @@ -70,56 +85,6 @@ bricks: category: audio required_devices: - speaker -- id: arduino:image_classification - name: Image Classification - description: "Brick for image classification using a pre-trained model. It processes\ - \ images and returns the predicted class label and confidence score.\nBrick is\ - \ designed to work with pre-trained models provided by framework or with custom\ - \ image classification models trained on Edge Impulse platform. \n" - require_container: true - require_model: true - mount_devices_into_container: false - ports: [] - category: video - model_name: mobilenet-image-classification - variables: - - name: EI_CLASSIFICATION_MODEL - default_value: /models/ootb/ei/mobilenet-v2-224px.eim - description: Path to the model file - hidden: true - - name: CUSTOM_MODEL_PATH - default_value: /home/arduino/.arduino-bricks/ei-models - description: Path to the custom model directory - hidden: true - - name: BIND_ADDRESS - default_value: 127.0.0.1 - description: Bind address - hidden: true -- id: arduino:visual_anomaly_detection - name: Visual Anomaly Detection - description: "Brick for visual anomaly detection using a pre-trained model. It processes\ - \ images to identify unusual patterns and returns detected anomalies with bounding\ - \ boxes. \nSupports pre-trained models provided by the framework or custom anomaly\ - \ detection models trained on the Edge Impulse platform. \n" - require_container: true - require_model: true - mount_devices_into_container: false - ports: [] - category: image - model_name: concrete-crack-anomaly-detection - variables: - - name: EI_V_ANOMALY_DETECTION_MODEL - default_value: /models/ootb/ei/concrete-crack-anomaly-detection.eim - description: Path to the model file - hidden: true - - name: CUSTOM_MODEL_PATH - default_value: /home/arduino/.arduino-bricks/ei-models - description: Path to the custom model directory - hidden: true - - name: BIND_ADDRESS - default_value: 127.0.0.1 - description: Bind address - hidden: true - id: arduino:cloud_llm name: Cloud LLM description: Cloud LLM Brick enables seamless integration with cloud-based Large @@ -133,56 +98,24 @@ bricks: - name: API_KEY description: API Key for the cloud-based LLM service secret: true -- id: arduino:weather_forecast - name: Weather Forecast - description: Online weather forecast module for Arduino using open-meteo.com geolocation - and weather APIs. Requires an internet connection. - require_container: false - require_model: false - mount_devices_into_container: false - ports: [] - category: miscellaneous -- id: arduino:arduino_cloud - name: Arduino Cloud - description: Connects to Arduino Cloud - require_container: false - require_model: false - mount_devices_into_container: false - ports: [] - category: null - variables: - - name: ARDUINO_DEVICE_ID - description: Arduino Cloud Device ID - secret: true - - name: ARDUINO_SECRET - description: Arduino Cloud Secret - secret: true -- id: arduino:video_object_detection - name: Video Object Detection - description: 'This object detection brick utilizes a pre-trained model to analyze - video streams from a camera. - - It identifies objects, returning their predicted class labels, bounding boxes, - and confidence scores. - - The output is a video stream featuring bounding boxes around detected objects, - with the added capability to trigger actions based on these detections. +- id: arduino:audio_classification + name: Audio Classification + description: 'Brick for audio classification using a pre-trained model. It processes + audio input to classify different sounds. - It supports pre-trained models provided by the framework and custom object detection - models trained on the Edge Impulse platform. + Brick is designed to work with pre-trained models provided by framework or with + custom audio classification models trained on Edge Impulse platform. ' require_container: true require_model: true - mount_devices_into_container: true + mount_devices_into_container: false ports: [] - category: video - model_name: yolox-object-detection - required_devices: - - camera + category: audio + model_name: glass-breaking variables: - - name: EI_V_OBJ_DETECTION_MODEL - default_value: /models/ootb/ei/yolo-x-nano.eim + - name: EI_AUDIO_CLASSIFICATION_MODEL + default_value: /models/ootb/ei/glass-breaking.eim description: Path to the model file hidden: true - name: CUSTOM_MODEL_PATH @@ -190,23 +123,38 @@ bricks: description: Path to the custom model directory hidden: true - name: BIND_ADDRESS - default_value: 0.0.0.0 + default_value: 127.0.0.1 description: Bind address hidden: true - - name: VIDEO_DEVICE - default_value: /dev/video1 - description: Video device path - hidden: true -- id: arduino:vibration_anomaly_detection - name: Vibration Anomaly detection - description: 'This Brick is designed for vibration anomaly detection and recognition, - leveraging pre-trained models. +- id: arduino:dbstorage_sqlstore + name: Database - SQL + description: Simplified database storage layer for Arduino sensor data using SQLite + local database. + require_container: false + require_model: false + mount_devices_into_container: false + ports: [] + category: storage +- id: arduino:web_ui + name: WebUI - HTML + description: A user interface based on HTML and JavaScript that can rely on additional + APIs and a WebSocket exposed by a web server. + require_container: false + require_model: false + mount_devices_into_container: false + ports: + - 7000 + category: ui + requires_display: webview +- id: arduino:motion_detection + name: Motion detection + description: 'This Brick is designed for motion detection and recognition, leveraging + pre-trained models. - It takes input from sensors (accelerometer) to identify possible anomalies based - on vibration patterns. + It takes input from accelerometer sensors to identify various motion patterns. You can use it with pre-trained models provided by the framework or with your - own custom anomaly detections models trained on the Edge Impulse platform. + custom motion classification models trained on the Edge Impulse platform. ' require_container: true @@ -214,10 +162,10 @@ bricks: mount_devices_into_container: false ports: [] category: null - model_name: fan-anomaly-detection + model_name: updown-wave-motion-detection variables: - - name: EI_VIBRATION_ANOMALY_DETECTION_MODEL - default_value: /models/ootb/ei/fan-anomaly-detection.eim + - name: EI_MOTION_DETECTION_MODEL + default_value: /models/ootb/ei/updown-wave-motion-detection.eim description: Path to the model file hidden: true - name: CUSTOM_MODEL_PATH @@ -228,27 +176,54 @@ bricks: default_value: 127.0.0.1 description: Bind address hidden: true -- id: arduino:web_ui - name: WebUI - HTML - description: A user interface based on HTML and JavaScript that can rely on additional - APIs and a WebSocket exposed by a web server. +- id: arduino:mood_detector + name: Mood Detection + description: 'This brick analyzes text sentiment to detect the mood expressed. + + It classifies text as positive, negative, or neutral. + + ' require_container: false require_model: false mount_devices_into_container: false - ports: - - 7000 - category: ui - requires_display: webview -- id: arduino:sound_generator - name: Sound Generator - description: Generate sounds like notes, tones, or melodies using waveforms. + ports: [] + category: text +- id: arduino:arduino_cloud + name: Arduino Cloud + description: Connects to Arduino Cloud require_container: false require_model: false mount_devices_into_container: false ports: [] + category: null + variables: + - name: ARDUINO_DEVICE_ID + description: Arduino Cloud Device ID + secret: true + - name: ARDUINO_SECRET + description: Arduino Cloud Secret + secret: true +- id: arduino:cloud_asr + name: Cloud ASR + description: 'Cloud ASR Brick provides a unified and flexible way to connect cloud-based + Automatic Speech Recognition (ASR) services and transform spoken audio into text. + + It enables real-time, streaming transcription from a connected microphone, leveraging + leading cloud providers to deliver low-latency speech-to-text processing. + + ' + require_container: false + require_model: false + mount_devices_into_container: true + ports: [] category: audio required_devices: - - speaker + - microphone + variables: + - name: API_KEY + description: API Key for the cloud-based Speech to Text service + - name: LANGUAGE + description: 'Language code for transcription (e.g., en, it). Default: en' - id: arduino:telegram_bot name: Telegram Bot description: A brick to interact with Telegram Bot API @@ -261,25 +236,25 @@ bricks: - name: TELEGRAM_BOT_TOKEN description: Telegram Bot Token secret: true -- id: arduino:camera_code_detection - name: Camera Code Detection - description: Scans a camera for barcodes and QR codes +- id: arduino:llm + name: Large Language Model (LLM) + description: Large Language Model (LLM) Brick enables seamless integration with + locally hosted LLMs for advanced AI capabilities in your Arduino projects. require_container: false - require_model: false - mount_devices_into_container: false - ports: [] - category: video - required_devices: - - camera -- id: arduino:dbstorage_sqlstore - name: Database - SQL - description: Simplified database storage layer for Arduino sensor data using SQLite - local database. - require_container: false - require_model: false + require_model: true mount_devices_into_container: false ports: [] - category: storage + category: null + model_name: genie:qwen3-4b + supported_boards: + - ventunoq + requires_services: + - arduino:genie + variables: + - name: LOCAL_LLM_API_KEY + default_value: api_key + description: API Key for the local LLM service + secret: true - id: arduino:video_image_classification name: Video Image Classification description: 'This image classification brick utilizes a pre-trained model to analyze @@ -319,27 +294,75 @@ bricks: default_value: /dev/video1 description: Video device path hidden: true -- id: arduino:cloud_asr - name: Cloud ASR - description: 'Cloud ASR Brick provides a unified and flexible way to connect cloud-based - Automatic Speech Recognition (ASR) services and transform spoken audio into text. +- id: arduino:asr + name: Automatic Speech Recognition (ASR) + description: Automatic Speech Recognition brick for offline speech-to-text processing + require_container: false + require_model: true + mount_devices_into_container: false + ports: [] + category: audio + model_name: whisper-small + supported_boards: + - ventunoq + requires_services: + - arduino:genie_audio + variables: + - name: VAD_LEN_HANGOVER + default_value: 70 + description: Length of hangover for Voice Activity Detection (in number of frames + of 10ms duration) + hidden: true +- id: arduino:video_object_detection + name: Video Object Detection + description: 'This object detection brick utilizes a pre-trained model to analyze + video streams from a camera. - It enables real-time, streaming transcription from a connected microphone, leveraging - leading cloud providers to deliver low-latency speech-to-text processing. + It identifies objects, returning their predicted class labels, bounding boxes, + and confidence scores. + + The output is a video stream featuring bounding boxes around detected objects, + with the added capability to trigger actions based on these detections. + + It supports pre-trained models provided by the framework and custom object detection + models trained on the Edge Impulse platform. ' - require_container: false - require_model: false + require_container: true + require_model: true mount_devices_into_container: true ports: [] - category: audio + category: video + model_name: yolox-object-detection required_devices: - - microphone + - camera variables: - - name: API_KEY - description: API Key for the cloud-based Speech to Text service - - name: LANGUAGE - description: 'Language code for transcription (e.g., en, it). Default: en' + - name: EI_V_OBJ_DETECTION_MODEL + default_value: /models/ootb/ei/yolo-x-nano.eim + description: Path to the model file + hidden: true + - name: CUSTOM_MODEL_PATH + default_value: /home/arduino/.arduino-bricks/ei-models + description: Path to the custom model directory + hidden: true + - name: BIND_ADDRESS + default_value: 0.0.0.0 + description: Bind address + hidden: true + - name: VIDEO_DEVICE + default_value: /dev/video1 + description: Video device path + hidden: true +- id: arduino:camera_code_detection + name: Camera Code Detection + description: Scans a camera for barcodes and QR codes + require_container: false + require_model: false + mount_devices_into_container: false + ports: [] + category: video + required_devices: + - camera - id: arduino:dbstorage_tsstore name: Database - Time Series description: Simplified time series database storage layer for Arduino sensor samples @@ -366,28 +389,16 @@ bricks: default_value: 127.0.0.1 description: External container address hidden: true -- id: arduino:mood_detector - name: Mood Detection - description: 'This brick analyzes text sentiment to detect the mood expressed. - - It classifies text as positive, negative, or neutral. - - ' +- id: arduino:sound_generator + name: Sound Generator + description: Generate sounds like notes, tones, or melodies using waveforms. require_container: false require_model: false mount_devices_into_container: false ports: [] - category: text -- id: arduino:streamlit_ui - name: WebUI - Streamlit - description: A simplified user interface based on Streamlit and Python. - require_container: false - require_model: false - mount_devices_into_container: false - ports: - - 7000 - category: ui - requires_display: webview + category: audio + required_devices: + - speaker - id: arduino:object_detection name: Object Detection description: "Brick for object detection using a pre-trained model. It processes\ @@ -413,10 +424,69 @@ bricks: default_value: 127.0.0.1 description: Bind address hidden: true -- id: arduino:audio_classification - name: Audio Classification - description: 'Brick for audio classification using a pre-trained model. It processes - audio input to classify different sounds. +- id: arduino:gesture_recognition + name: Gesture Recognition + description: 'This gesture recognition brick utilizes a pre-trained model to analyze + video streams from a camera. + + The output is a video stream featuring gesture recognition as overlay, with the + added capability to + + trigger actions based on these detections. + + ' + require_container: true + require_model: false + mount_devices_into_container: false + ports: [] + category: video + required_devices: + - camera + supported_boards: + - ventunoq +- id: arduino:image_classification + name: Image Classification + description: "Brick for image classification using a pre-trained model. It processes\ + \ images and returns the predicted class label and confidence score.\nBrick is\ + \ designed to work with pre-trained models provided by framework or with custom\ + \ image classification models trained on Edge Impulse platform. \n" + require_container: true + require_model: true + mount_devices_into_container: false + ports: [] + category: video + model_name: mobilenet-image-classification + variables: + - name: EI_CLASSIFICATION_MODEL + default_value: /models/ootb/ei/mobilenet-v2-224px.eim + description: Path to the model file + hidden: true + - name: CUSTOM_MODEL_PATH + default_value: /home/arduino/.arduino-bricks/ei-models + description: Path to the custom model directory + hidden: true + - name: BIND_ADDRESS + default_value: 127.0.0.1 + description: Bind address + hidden: true +- id: arduino:vlm + name: Visual Language Model (VLM) + description: Visual Language Model (VLM) Brick enables seamless integration with + locally hosted VLMs for advanced AI capabilities in your Arduino projects. + require_container: false + require_model: true + mount_devices_into_container: false + ports: [] + category: null + model_name: genie:qwen3-vl-4b + supported_boards: + - ventunoq + requires_services: + - arduino:genie +- id: arduino:keyword_spotting + name: Keyword Spotting + description: 'Brick for keyword spotting using a pre-trained model. It processes + audio input to detect specific keywords or phrases. Brick is designed to work with pre-trained models provided by framework or with custom audio classification models trained on Edge Impulse platform. @@ -427,10 +497,12 @@ bricks: mount_devices_into_container: false ports: [] category: audio - model_name: glass-breaking + model_name: keyword-spotting-hey-arduino + required_devices: + - microphone variables: - - name: EI_AUDIO_CLASSIFICATION_MODEL - default_value: /models/ootb/ei/glass-breaking.eim + - name: EI_KEYWORD_SPOTTING_MODEL + default_value: /models/ootb/ei/keyword-spotting-hey-arduino.eim description: Path to the model file hidden: true - name: CUSTOM_MODEL_PATH diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/audio_classification/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/audio_classification/brick_compose.yaml similarity index 91% rename from internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/audio_classification/brick_compose.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/audio_classification/brick_compose.yaml index 8887b1c18..86d6ef972 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/audio_classification/brick_compose.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/audio_classification/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-audio-classifier-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1339:1337 volumes: diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/dbstorage_tsstore/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/dbstorage_tsstore/brick_compose.yaml similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/dbstorage_tsstore/brick_compose.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/dbstorage_tsstore/brick_compose.yaml diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/gesture_recognition/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/gesture_recognition/brick_compose.yaml new file mode 100644 index 000000000..6ea5c2079 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/gesture_recognition/brick_compose.yaml @@ -0,0 +1,19 @@ +services: + gesture_recognition: + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/gesture-recognition:dev-next + logging: + driver: "json-file" + options: + max-size: "5m" + max-file: "2" + ports: + - ${BIND_ADDRESS:-0.0.0.0}:5002:5002 + devices: + - /dev/dma_heap/system + - /dev/dma_heap/qcom,system + - /dev/fastrpc-cdsp + healthcheck: + test: [ "CMD-SHELL", "nc -zv gesture_recognition 5002 || exit 1" ] + interval: 1s + timeout: 2s + retries: 30 \ No newline at end of file diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/image_classification/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/image_classification/brick_compose.yaml similarity index 91% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/image_classification/brick_compose.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/image_classification/brick_compose.yaml index 742c6474d..4893e246e 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/image_classification/brick_compose.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/image_classification/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-classification-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1338:1337 volumes: diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/keyword_spotting/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/keyword_spotting/brick_compose.yaml similarity index 91% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/keyword_spotting/brick_compose.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/keyword_spotting/brick_compose.yaml index ef3d418cc..c1d00f8d8 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/keyword_spotting/brick_compose.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/keyword_spotting/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-keyword-spot-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1340:1337 volumes: diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/motion_detection/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/motion_detection/brick_compose.yaml similarity index 91% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/motion_detection/brick_compose.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/motion_detection/brick_compose.yaml index 1943c9785..fb4dd245e 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/motion_detection/brick_compose.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/motion_detection/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-motion-detection-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1341:1337 volumes: diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/object_detection/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/object_detection/brick_compose.yaml similarity index 91% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/object_detection/brick_compose.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/object_detection/brick_compose.yaml index bfe701204..7a7e1ff7b 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/object_detection/brick_compose.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/object_detection/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-obj-detection-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1337:1337 volumes: diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/vibration_anomaly_detection/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/vibration_anomaly_detection/brick_compose.yaml similarity index 92% rename from internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/vibration_anomaly_detection/brick_compose.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/vibration_anomaly_detection/brick_compose.yaml index 3a4c2a245..edc0e9fd9 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/vibration_anomaly_detection/brick_compose.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/vibration_anomaly_detection/brick_compose.yaml @@ -2,14 +2,12 @@ # CUSTOM_MODEL_PATH = path to the custom model directory services: ei-anomaly-detection-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1342:1337 volumes: diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/video_image_classification/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/video_image_classification/brick_compose.yaml similarity index 84% rename from internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/video_image_classification/brick_compose.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/video_image_classification/brick_compose.yaml index 158464641..3584d13bf 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/video_image_classification/brick_compose.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/video_image_classification/brick_compose.yaml @@ -1,6 +1,6 @@ services: ei-video-classification-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: @@ -13,7 +13,7 @@ services: - "/run/udev:/run/udev" command: ["--model-file", "${EI_V_CLASSIFICATION_MODEL:-/models/ootb/ei/mobilenet-v2-224px.eim}", "--gst-source", "tcpserversrc host=0.0.0.0 port=5050 ! jpegdec", "--dont-print-predictions", "--preview-original-resolution"] healthcheck: - test: [ "CMD-SHELL", "netstat -tuln | grep :5050 || exit 1" ] + test: [ "CMD-SHELL", "grep -i ':13BA' /proc/net/tcp | grep ' 0A ' || exit 1" ] # Hex encoding of port 5050 interval: 2s timeout: 2s retries: 25 diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/video_object_detection/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/video_object_detection/brick_compose.yaml similarity index 84% rename from internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/video_object_detection/brick_compose.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/video_object_detection/brick_compose.yaml index cff716a92..6c35e5db9 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/compose/arduino/video_object_detection/brick_compose.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/video_object_detection/brick_compose.yaml @@ -1,6 +1,6 @@ services: ei-video-obj-detection-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: @@ -13,7 +13,7 @@ services: - "/run/udev:/run/udev" command: ["--model-file", "${EI_V_OBJ_DETECTION_MODEL:-/models/ootb/ei/yolo-x-nano.eim}", "--gst-source", "tcpserversrc host=0.0.0.0 port=5050 ! jpegdec", "--dont-print-predictions", "--preview-original-resolution"] healthcheck: - test: [ "CMD-SHELL", "netstat -tuln | grep :5050 || exit 1" ] + test: [ "CMD-SHELL", "grep -i ':13BA' /proc/net/tcp | grep ' 0A ' || exit 1" ] # Hex encoding of port 5050 interval: 2s timeout: 2s retries: 25 diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/visual_anomaly_detection/brick_compose.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/visual_anomaly_detection/brick_compose.yaml similarity index 92% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/visual_anomaly_detection/brick_compose.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/visual_anomaly_detection/brick_compose.yaml index d62ec03f3..e0b3f6231 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/compose/arduino/visual_anomaly_detection/brick_compose.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/compose/arduino/visual_anomaly_detection/brick_compose.yaml @@ -1,13 +1,11 @@ services: ei-obj-video-anomalies-det-runner: - image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.8.0 + image: ${DOCKER_REGISTRY_BASE:-ghcr.io/arduino/}app-bricks/ei-models-runner:0.9.0 logging: driver: "json-file" options: max-size: "5m" max-file: "2" - devices: - - "/dev/dri:/dev/dri" ports: - ${BIND_ADDRESS:-127.0.0.1}:1343:1337 volumes: diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/arduino_cloud/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/arduino_cloud/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/arduino_cloud/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/arduino_cloud/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/asr/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/asr/README.md new file mode 100644 index 000000000..177c21334 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/asr/README.md @@ -0,0 +1,10 @@ +# Automatic Speech Recognition Brick + +The `AutomaticSpeechRecognition` brick provides on-device automatic speech recognition (ASR) capabilities for audio streams and files. It offers a high-level interface for transcribing audio using a local model, with support for both real-time and batch processing. + +## LocalASR Class Features + +- **Offline Operation:** All transcriptions are performed locally, ensuring data privacy and eliminating network dependencies. +- **Multi Language Support:** Supports the transcription of spoken multiple languages. +- **Audio Input Formats**: Designed to work with the Microphone peripheral, WAV and PCM audio. +- **Concurrency Control**: Limits the number of simultaneous transcription sessions to avoid resource exhaustion. diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/audio_classification/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/audio_classification/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/audio_classification/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/audio_classification/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/camera_code_detection/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/camera_code_detection/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/camera_code_detection/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/camera_code_detection/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/cloud_asr/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/cloud_asr/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/cloud_asr/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/cloud_asr/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/cloud_llm/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/cloud_llm/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/cloud_llm/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/cloud_llm/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/dbstorage_sqlstore/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/dbstorage_sqlstore/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/dbstorage_sqlstore/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/dbstorage_sqlstore/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/dbstorage_tsstore/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/dbstorage_tsstore/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/dbstorage_tsstore/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/dbstorage_tsstore/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/gesture_recognition/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/gesture_recognition/README.md new file mode 100644 index 000000000..8ed176d39 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/gesture_recognition/README.md @@ -0,0 +1,5 @@ +# Gesture Recognition Brick + +This gesture recognition brick utilizes a pre-trained model to analyze video streams from a camera. +The output is a video stream featuring gesture recognition as overlay, with the added capability to +trigger actions based on these detections. diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/image_classification/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/image_classification/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/image_classification/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/image_classification/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/keyword_spotting/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/keyword_spotting/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/keyword_spotting/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/keyword_spotting/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/llm/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/llm/README.md new file mode 100644 index 000000000..cdfddf309 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/llm/README.md @@ -0,0 +1,7 @@ +# Large Language Model (LLMs) Brick + +A Brick for interacting with locally-based Large Language Models (LLMs). + +This class wraps LangChain functionality to provide a simplified, unified interface for chatting with models like Qwenm, LLama, Gemma. +It supports both synchronous 'one-shot' responses and streaming output, with optional conversational memory. + diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/mood_detector/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/mood_detector/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/mood_detector/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/mood_detector/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/motion_detection/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/motion_detection/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/motion_detection/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/motion_detection/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/object_detection/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/object_detection/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/object_detection/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/object_detection/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/sound_generator/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/sound_generator/README.md similarity index 93% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/sound_generator/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/sound_generator/README.md index 378b010cb..864fa7e77 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/sound_generator/README.md +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/sound_generator/README.md @@ -8,9 +8,9 @@ Sound Generator is a lightweight and expressive audio generation brick that lets - Generate tones and melodies from notes or frequencies - Choose your waveform — sine, square, triangle, sawtooth -- Add sound effects such as chorus, overdrive, delay, vibrato, or distortion +- Add sound effects such as ADSR, bitcrusher, chorus, tremolo, vibrato, or overdrive - Compose procedural music directly from code -- Real-time playback over speaker +- Playback over speaker ## Code example and usage diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/streamlit_ui/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/streamlit_ui/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/streamlit_ui/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/streamlit_ui/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/telegram_bot/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/telegram_bot/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/telegram_bot/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/telegram_bot/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/vibration_anomaly_detection/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/vibration_anomaly_detection/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/vibration_anomaly_detection/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/vibration_anomaly_detection/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/video_image_classification/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/video_image_classification/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/video_image_classification/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/video_image_classification/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/video_object_detection/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/video_object_detection/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/video_object_detection/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/video_object_detection/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/visual_anomaly_detection/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/visual_anomaly_detection/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/visual_anomaly_detection/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/visual_anomaly_detection/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/vlm/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/vlm/README.md new file mode 100644 index 000000000..5f7b41e1f --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/vlm/README.md @@ -0,0 +1,3 @@ +# Vision Language Model (VLM) Brick + +Visual Language Model (VLM) Brick enables seamless integration with locally hosted VLMs for advanced AI capabilities in your Arduino projects. diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/wave_generator/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/wave_generator/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/wave_generator/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/wave_generator/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/weather_forecast/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/weather_forecast/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/weather_forecast/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/weather_forecast/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/web_ui/README.md b/internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/web_ui/README.md similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/docs/arduino/web_ui/README.md rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/docs/arduino/web_ui/README.md diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/arduino_cloud/1_led_blink.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/arduino_cloud/1_led_blink.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/arduino_cloud/1_led_blink.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/arduino_cloud/1_led_blink.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/arduino_cloud/2_light_with_colors_monitor.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/arduino_cloud/2_light_with_colors_monitor.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/arduino_cloud/2_light_with_colors_monitor.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/arduino_cloud/2_light_with_colors_monitor.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/arduino_cloud/3_light_with_colors_command.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/arduino_cloud/3_light_with_colors_command.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/arduino_cloud/3_light_with_colors_command.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/arduino_cloud/3_light_with_colors_command.py diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/00_transcribe_wav.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/00_transcribe_wav.py new file mode 100644 index 000000000..83d54bc83 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/00_transcribe_wav.py @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Transcribe a wav file" +# EXAMPLE_REQUIRES = "Requires a WAV file with a voice recording" +from arduino.app_bricks.asr import AutomaticSpeechRecognition + + +asr = AutomaticSpeechRecognition() +with open("recording_01.wav", "rb") as wav_file: + text = asr.transcribe_wav(wav_file.read()) + print(f"Transcription: {text}") diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/01_stream_wav_transcription.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/01_stream_wav_transcription.py new file mode 100644 index 000000000..0b624732b --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/01_stream_wav_transcription.py @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Transcribe a wav file and stream the results" +# EXAMPLE_REQUIRES = "Requires a WAV file with a voice recording" +from arduino.app_bricks.asr import AutomaticSpeechRecognition + + +asr = AutomaticSpeechRecognition() +with open("recording_01.wav", "rb") as wav_file: + with asr.transcribe_wav_stream(wav_file.read()) as stream: + for chunk in stream: + match chunk.type: + case "partial_text": + print(f"Partial: {chunk.data}") + case "full_text": + print(f"Final: {chunk.data}") + break diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/02_transcribe_mic.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/02_transcribe_mic.py new file mode 100644 index 000000000..8c91655ef --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/02_transcribe_mic.py @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Transcribe audio from microphone" +# EXAMPLE_REQUIRES = "Requires a microphone device" +from arduino.app_bricks.asr import AutomaticSpeechRecognition +from arduino.app_peripherals.microphone import Microphone + + +mic = Microphone() +mic.start() + +asr = AutomaticSpeechRecognition() +text = asr.transcribe_mic(mic, duration=5) +print(f"Transcription: {text}") + +mic.stop() diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/03_stream_mic_transcription.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/03_stream_mic_transcription.py new file mode 100644 index 000000000..8f0f8414c --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/asr/03_stream_mic_transcription.py @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Transcribe audio from microphone and stream the results" +# EXAMPLE_REQUIRES = "Requires a microphone device" +from arduino.app_bricks.asr import AutomaticSpeechRecognition +from arduino.app_peripherals.microphone import Microphone + + +mic = Microphone() +mic.start() + +asr = AutomaticSpeechRecognition() +with asr.transcribe_mic_stream(mic, duration=5) as stream: + for chunk in stream: + match chunk.type: + case "partial_text": + print(f"Partial: {chunk.data}") + case "full_text": + print(f"Final: {chunk.data}") + break + +mic.stop() diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/audio_classification/1_glass_breaking_from_mic.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/audio_classification/1_glass_breaking_from_mic.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/audio_classification/1_glass_breaking_from_mic.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/audio_classification/1_glass_breaking_from_mic.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/audio_classification/2_glass_breaking_from_file.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/audio_classification/2_glass_breaking_from_file.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/audio_classification/2_glass_breaking_from_file.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/audio_classification/2_glass_breaking_from_file.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/camera_code_detection/1_detection.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/camera_code_detection/1_detection.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/camera_code_detection/1_detection.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/camera_code_detection/1_detection.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/camera_code_detection/2_detection_list.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/camera_code_detection/2_detection_list.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/camera_code_detection/2_detection_list.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/camera_code_detection/2_detection_list.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/camera_code_detection/3_detection_with_overrides.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/camera_code_detection/3_detection_with_overrides.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/camera_code_detection/3_detection_with_overrides.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/camera_code_detection/3_detection_with_overrides.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_asr/1_asr.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_asr/1_asr.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_asr/1_asr.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_asr/1_asr.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_asr/2_multilingual_asr.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_asr/2_multilingual_asr.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_asr/2_multilingual_asr.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_asr/2_multilingual_asr.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_asr/3_event_stream.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_asr/3_event_stream.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_asr/3_event_stream.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_asr/3_event_stream.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_asr/4_different_providers.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_asr/4_different_providers.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_asr/4_different_providers.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_asr/4_different_providers.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/1_simple_prompt.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/1_simple_prompt.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/1_simple_prompt.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/1_simple_prompt.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/2_streaming_responses.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/2_streaming_responses.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/2_streaming_responses.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/2_streaming_responses.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/3_no_memory.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/3_no_memory.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/3_no_memory.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/3_no_memory.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/4_model_selection.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/4_model_selection.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/4_model_selection.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/4_model_selection.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/5_tool_calling.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/5_tool_calling.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/5_tool_calling.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/5_tool_calling.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/6_multimodal.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/6_multimodal.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/cloud_llm/6_multimodal.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/cloud_llm/6_multimodal.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/dbstorage_sqlstore/store_and_read_example.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/dbstorage_sqlstore/store_and_read_example.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/dbstorage_sqlstore/store_and_read_example.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/dbstorage_sqlstore/store_and_read_example.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/dbstorage_tsstore/1_write_read.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/dbstorage_tsstore/1_write_read.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/dbstorage_tsstore/1_write_read.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/dbstorage_tsstore/1_write_read.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/dbstorage_tsstore/2_read_all_samples.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/dbstorage_tsstore/2_read_all_samples.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/dbstorage_tsstore/2_read_all_samples.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/dbstorage_tsstore/2_read_all_samples.py diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/gesture_recognition/01_gesture.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/gesture_recognition/01_gesture.py new file mode 100644 index 000000000..912506140 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/gesture_recognition/01_gesture.py @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Gesture recognition" +# EXAMPLE_REQUIRES = "Requires a connected camera" + +from arduino.app_bricks.gesture_recognition import GestureRecognition +from arduino.app_utils.app import App + +pd = GestureRecognition() +pd.on_gesture("Victory", lambda meta: print("All your bases are belong to us")) +pd.on_gesture("Open_Palm", lambda meta: print("Moving left!"), hand="left") +pd.on_gesture("Open_Palm", lambda meta: print("Moving right!"), hand="right") + +App.run() diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/gesture_recognition/02_enter_exit.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/gesture_recognition/02_enter_exit.py new file mode 100644 index 000000000..fa4a4662a --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/gesture_recognition/02_enter_exit.py @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Gesture recognition hand enter/exit detection" +# EXAMPLE_REQUIRES = "Requires a connected camera" + +from arduino.app_bricks.gesture_recognition import GestureRecognition +from arduino.app_utils.app import App + +pd = GestureRecognition() +pd.on_enter(lambda: print("Hi there!")) +pd.on_exit(lambda: print("Goodbye!")) + +App.run() diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/gesture_recognition/03_confirm_deny.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/gesture_recognition/03_confirm_deny.py new file mode 100644 index 000000000..0d24c6065 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/gesture_recognition/03_confirm_deny.py @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Get user confirmation with hand gestures" +# EXAMPLE_REQUIRES = "Requires a connected camera" + +from arduino.app_bricks.gesture_recognition import GestureRecognition +from arduino.app_utils.app import App + +pd = GestureRecognition() +pd.on_gesture("Thumb_Up", lambda meta: print("Operation confirmed!")) +pd.on_gesture("Thumb_Down", lambda meta: print("Operation denied!")) + +App.run() diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/image_classification/image_classification_example.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/image_classification/image_classification_example.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/image_classification/image_classification_example.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/image_classification/image_classification_example.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/keyword_spotting/1_hello_world.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/keyword_spotting/1_hello_world.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/keyword_spotting/1_hello_world.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/keyword_spotting/1_hello_world.py diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/01_simple_chat.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/01_simple_chat.py new file mode 100644 index 000000000..392d13ebe --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/01_simple_chat.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with a Local LLM" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.llm import LargeLanguageModel +from arduino.app_utils import App + +llm = LargeLanguageModel() + + +def ask_prompt(): + prompt = input("Enter your prompt (or type 'exit' to quit): ") + if prompt.lower() == "exit": + raise StopIteration() + print(llm.chat(prompt)) + print() + + +App.run(ask_prompt) diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/02_simple_streaming_chat.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/02_simple_streaming_chat.py new file mode 100644 index 000000000..7352d2ce5 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/02_simple_streaming_chat.py @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with a Local LLM" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.llm import LargeLanguageModel +from arduino.app_utils import App + +llm = LargeLanguageModel() + + +def ask_prompt(): + prompt = input("Enter your prompt (or type 'exit' to quit): ") + if prompt.lower() == "exit": + raise StopIteration() + for chunk in llm.chat_stream(prompt): + print(chunk, end="", flush=True) + print() + + +App.run(ask_prompt) diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/03_external_provider_streaming_chat.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/03_external_provider_streaming_chat.py new file mode 100644 index 000000000..c30eacbfb --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/03_external_provider_streaming_chat.py @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with a Local LLM" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.llm import LargeLanguageModel +from arduino.app_utils import App + +llm = LargeLanguageModel(model="genie:qwen3:4b") + + +def ask_prompt(): + prompt = input("Enter your prompt (or type 'exit' to quit): ") + if prompt.lower() == "exit": + raise StopIteration() + for chunk in llm.chat_stream(prompt): + print(chunk, end="", flush=True) + print() + + +App.run(ask_prompt) diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/04_streaming_with_tools.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/04_streaming_with_tools.py new file mode 100644 index 000000000..32b353597 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/04_streaming_with_tools.py @@ -0,0 +1,48 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with tools and streaming" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.llm import LargeLanguageModel, tool +from arduino.app_utils import App + + +# Tool definition - simulates a simple weather API - please replace with actual API calls in a real application +@tool +def get_current_weather(location: str) -> str: + """ + Get the current weather in a given location. + The output is a string with a summary of the weather. + + Args: + location (str): The location to get the weather for. + + Returns: + str: A summary of the current weather in the specified location. + + """ + if "boston" in location.lower(): + return "The current weather in Boston is 15°C and partly cloudy." + elif "paris" in location.lower(): + return "The current weather in Paris is 8°C and rainy." + elif "turin" in location.lower(): + return "The current weather in Turin is 8°C and rainy." + else: + return f"Sorry, I do not have real-time weather data for {location}. Assuming it's a sunny day!" + + +llm = LargeLanguageModel(max_tokens=512, tools=[get_current_weather]) + + +def ask_prompt(): + prompt = input("Enter your prompt (or type 'exit' to quit): ") + if prompt.lower() == "exit": + raise StopIteration() + for chunk in llm.chat_stream(prompt): + print(chunk, end="", flush=True) + print() + + +App.run(ask_prompt) diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/04_tool_calling.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/04_tool_calling.py new file mode 100644 index 000000000..1caefe548 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/llm/04_tool_calling.py @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with an LLM using Tool Calling" +# EXAMPLE_REQUIRES = "Requires a valid API key to a cloud LLM service." + +from arduino.app_bricks.llm import LargeLanguageModel, tool +from arduino.app_utils import App + + +@tool +def get_current_weather(location: str) -> str: + """ + Get the current weather in a given location. + The output is a string with a summary of the weather. + """ + if "boston" in location.lower(): + return "The current weather in Boston is -5°C and rainy." + elif "paris" in location.lower(): + return "The current weather in Paris is 8°C and rainy." + elif "turin" in location.lower(): + return "The current weather in Turin is 8°C and rainy." + else: + return f"Sorry, I do not have real-time weather data for {location}. Assuming it's a sunny day!" + + +llm = LargeLanguageModel( + tools=[get_current_weather], +) + + +def ask_prompt(): + prompt = input("Enter your prompt (or type 'exit' to quit): ") + if prompt.lower() == "exit": + raise StopIteration() + print(llm.chat(prompt)) + print() + + +App.run(ask_prompt) diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/mood_detector/1_basic_usage.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/mood_detector/1_basic_usage.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/mood_detector/1_basic_usage.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/mood_detector/1_basic_usage.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/motion_detection/1_basic_usage.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/motion_detection/1_basic_usage.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/motion_detection/1_basic_usage.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/motion_detection/1_basic_usage.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/object_detection/object_detection_example.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/object_detection/object_detection_example.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/object_detection/object_detection_example.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/object_detection/object_detection_example.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/1_play_sequence.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/1_play_sequence.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/1_play_sequence.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/1_play_sequence.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/2_stream_sequence.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/2_stream_sequence.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/2_stream_sequence.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/2_stream_sequence.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/3_play_abc_notation.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/3_play_abc_notation.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/3_play_abc_notation.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/3_play_abc_notation.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/4_effects.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/4_effects.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/4_effects.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/4_effects.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/5_play_chords.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/5_play_chords.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/5_play_chords.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/5_play_chords.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/6_play_polyphonic.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/6_play_polyphonic.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/6_play_polyphonic.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/6_play_polyphonic.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/7_play_step_sequence.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/7_play_step_sequence.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/7_play_step_sequence.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/7_play_step_sequence.py diff --git a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/8_play_composition.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/8_play_composition.py similarity index 59% rename from debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/8_play_composition.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/8_play_composition.py index fbab43772..adf832b5c 100644 --- a/debian/arduino-app-cli/var/lib/arduino-app-cli/assets/0.8.0/examples/arduino/sound_generator/8_play_composition.py +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/8_play_composition.py @@ -29,6 +29,21 @@ ) player = SoundGenerator() -player.play_composition(comp, block=True) + +# Choose how to play the composition: +# - "once": play it once and wait automatically until it finishes +# - "timed_loop": loop it for a fixed duration and wait automatically +# - "loop": loop forever until the app is stopped +PLAY_MODE = "timed_loop" +LOOP_DURATION_SECONDS = 10.0 + +if PLAY_MODE == "once": + player.play_composition(comp) +elif PLAY_MODE == "timed_loop": + player.play_composition(comp, loop=True, play_for=LOOP_DURATION_SECONDS) +elif PLAY_MODE == "loop": + player.play_composition(comp, loop=True) +else: + raise ValueError(f"Unsupported PLAY_MODE: {PLAY_MODE}") App.run() diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/9_play_wav.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/9_play_wav.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/sound_generator/9_play_wav.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/sound_generator/9_play_wav.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/streamlit_ui/1_basic_usage.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/streamlit_ui/1_basic_usage.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/streamlit_ui/1_basic_usage.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/streamlit_ui/1_basic_usage.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/1_text_echo.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/1_text_echo.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/1_text_echo.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/1_text_echo.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/2_command_handler.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/2_command_handler.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/2_command_handler.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/2_command_handler.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/3_whitelist_auth.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/3_whitelist_auth.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/3_whitelist_auth.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/3_whitelist_auth.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/4_scheduled_messages.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/4_scheduled_messages.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/4_scheduled_messages.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/4_scheduled_messages.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/5_photo_echo.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/5_photo_echo.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/5_photo_echo.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/5_photo_echo.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/6_audio_echo.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/6_audio_echo.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/6_audio_echo.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/6_audio_echo.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/7_video_echo.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/7_video_echo.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/7_video_echo.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/7_video_echo.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/8_document_echo.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/8_document_echo.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/telegram_bot/8_document_echo.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/telegram_bot/8_document_echo.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/vibration_anomaly_detection/1_basic_usage.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/vibration_anomaly_detection/1_basic_usage.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/vibration_anomaly_detection/1_basic_usage.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/vibration_anomaly_detection/1_basic_usage.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/video_image_classification/1_basic_usage.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/video_image_classification/1_basic_usage.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/video_image_classification/1_basic_usage.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/video_image_classification/1_basic_usage.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/video_object_detection/1_basic_usage.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/video_object_detection/1_basic_usage.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/video_object_detection/1_basic_usage.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/video_object_detection/1_basic_usage.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/video_object_detection/2_count_objects.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/video_object_detection/2_count_objects.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/video_object_detection/2_count_objects.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/video_object_detection/2_count_objects.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/video_object_detection/3_get_image.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/video_object_detection/3_get_image.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/video_object_detection/3_get_image.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/video_object_detection/3_get_image.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/visual_anomaly_detection/object_detection_example.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/visual_anomaly_detection/object_detection_example.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/visual_anomaly_detection/object_detection_example.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/visual_anomaly_detection/object_detection_example.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/visual_anomaly_detection/visual_anomaly_example.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/visual_anomaly_detection/visual_anomaly_example.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/visual_anomaly_detection/visual_anomaly_example.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/visual_anomaly_detection/visual_anomaly_example.py diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/vlm/01_simple_chat.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/vlm/01_simple_chat.py new file mode 100644 index 000000000..dd053e26f --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/vlm/01_simple_chat.py @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with a Local VLM" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.vlm import VisionLanguageModel + +vlm = VisionLanguageModel() + +print(vlm.chat("Describe the image.", images=["chair.jpg"])) diff --git a/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/vlm/02_simple_streaming_chat.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/vlm/02_simple_streaming_chat.py new file mode 100644 index 000000000..32ed2f679 --- /dev/null +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/vlm/02_simple_streaming_chat.py @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc) +# +# SPDX-License-Identifier: MPL-2.0 + +# EXAMPLE_NAME = "Chat with a Local VLM" +# EXAMPLE_REQUIRES = "Models must be downloaded and available locally." + +from arduino.app_bricks.vlm import VisionLanguageModel + +vlm = VisionLanguageModel() + +for chunk in vlm.chat_stream("Describe the image.", images=["chair.jpg"]): + print(chunk, end="", flush=True) diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/01_basic_tone.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/01_basic_tone.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/01_basic_tone.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/01_basic_tone.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/02_waveform_types.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/02_waveform_types.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/02_waveform_types.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/02_waveform_types.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/03_frequency_sweep.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/03_frequency_sweep.py similarity index 99% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/03_frequency_sweep.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/03_frequency_sweep.py index 005d3360a..33078b928 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/03_frequency_sweep.py +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/03_frequency_sweep.py @@ -32,7 +32,6 @@ def frequency_sweep(): for freq in range(880, 219, -20): wave_gen.frequency = float(freq) time.sleep(0.1) - wave_gen.amplitude = 0.0 # Fade out time.sleep(2) diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/04_envelope_control.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/04_envelope_control.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/04_envelope_control.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/04_envelope_control.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/05_custom_speaker.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/05_custom_speaker.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/wave_generator/05_custom_speaker.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/wave_generator/05_custom_speaker.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/weather_forecast/weather_forecast_by_city_example.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/weather_forecast/weather_forecast_by_city_example.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/weather_forecast/weather_forecast_by_city_example.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/weather_forecast/weather_forecast_by_city_example.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/weather_forecast/weather_forecast_by_coords_example.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/weather_forecast/weather_forecast_by_coords_example.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/weather_forecast/weather_forecast_by_coords_example.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/weather_forecast/weather_forecast_by_coords_example.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/web_ui/1_serve_webapp.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/web_ui/1_serve_webapp.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/web_ui/1_serve_webapp.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/web_ui/1_serve_webapp.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/web_ui/2_serve_webapp_and_api.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/web_ui/2_serve_webapp_and_api.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/web_ui/2_serve_webapp_and_api.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/web_ui/2_serve_webapp_and_api.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/web_ui/3_connect_disconnect.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/web_ui/3_connect_disconnect.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/web_ui/3_connect_disconnect.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/web_ui/3_connect_disconnect.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/web_ui/4_on_message.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/web_ui/4_on_message.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/web_ui/4_on_message.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/web_ui/4_on_message.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/web_ui/5_send_message.py b/internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/web_ui/5_send_message.py similarity index 100% rename from internal/e2e/daemon/testdata/assets/0.8.0/examples/arduino/web_ui/5_send_message.py rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/examples/arduino/web_ui/5_send_message.py diff --git a/internal/e2e/daemon/testdata/assets/0.8.0/models-list.yaml b/internal/e2e/daemon/testdata/assets/0.9.0rc3/models-list.yaml similarity index 88% rename from internal/e2e/daemon/testdata/assets/0.8.0/models-list.yaml rename to internal/e2e/daemon/testdata/assets/0.9.0rc3/models-list.yaml index 366474aa1..3d81d236e 100644 --- a/internal/e2e/daemon/testdata/assets/0.8.0/models-list.yaml +++ b/internal/e2e/daemon/testdata/assets/0.9.0rc3/models-list.yaml @@ -1077,7 +1077,7 @@ models: source: "edgeimpulse" ei-project-id: 708500 ei-model-url: "https://studio.edgeimpulse.com/public/708500/live" - ei-gpu-mode: true + ei-gpu-mode: false source-model-id: "MobileNetV2" source-model-url: "https://www.tensorflow.org/api_docs/python/tf/keras/applications/MobileNetV2" bricks: @@ -1098,7 +1098,7 @@ models: source: "edgeimpulse" ei-project-id: 755016 ei-model-url: "https://studio.edgeimpulse.com/public/755016/live" - ei-gpu-mode: true + ei-gpu-mode: false source-model-id: "person-classification-wakevision" source-model-url: "https://studio.edgeimpulse.com/public/755016/live" bricks: @@ -1215,4 +1215,83 @@ models: ei-project-id: 842271 ei-model-url: "https://studio.edgeimpulse.com/public/842271/live" source-model-id: "hand-gestures" - source-model-url: "https://studio.edgeimpulse.com/public/842271/live" \ No newline at end of file + source-model-url: "https://studio.edgeimpulse.com/public/842271/live" + - "genie:qwen3-4b": + runner: genie + name : "Qwen 3-4B Instruct" + description: >- + The Qwen3-4B is a state-of-the-art multilingual base language model with 4 billion + parameters, excelling in language understanding, generation, coding, and mathematics. + supported_boards: ["ventunoq"] + bricks: + - id: "arduino:llm" + download_location: /var/lib/arduino-app-cli/models/genai + metadata: + source: "qualcomm-ai-hub" + source-model-id: "qwen3_4b_instruct_2507" + source-model-url: "https://aihub.qualcomm.com/models/qwen3_4b_instruct_2507" + - "genie:qwen3-vl-4b": + runner: genie + name : "Qwen 3-VL-4B VLM" + description: >- + The Qwen3 4B VLM is a state-of-the-art multilingual vision-language model with 4 + billion parameters, excelling in language understanding, generation, coding, and + mathematics. + supported_boards: ["ventunoq"] + bricks: + - id: "arduino:vlm" + download_location: /var/lib/arduino-app-cli/models/genai + metadata: + source: "qualcomm-ai-hub" + source-model-id: "qwen3_vl_4b" + source-model-url: "https://aihub.qualcomm.com/models/qwen3_vl_4b" + - gesture-recognition: + runner: brick + name : "MediaPipe Hand-Gesture Recognition" + description: >- + The MediaPipe Gesture Recognizer is a real-time machine learning pipeline that detects hands, predicts 21 hand landmarks, determines handedness (left/right), + and classifies gestures from a predefined set. + model_labels: + - Thumb_Up + - Thumb_Down + - Victory + - Pointing_Up + - Open_Palm + - ILoveYou + bricks: + - id: "arduino:gesture_recognition" + download_location: /var/lib/arduino-app-cli/models/genai + metadata: + source: "qualcomm-ai-hub" + source-model-id: "mediapipe_hand_gesture" + source-model-url: "https://aihub.qualcomm.com/models/mediapipe_hand_gesture" + - whisper-small: + runner: audio-analytics + name : "Whisper Small" + description: >- + Whisper-Small ASR (Automatic Speech Recognition) model is a state-of-the-art system designed for transcribing spoken language into written text. + This model is based on the transformer architecture and has been optimized for edge inference by replacing Multi-Head Attention (MHA) + with Single-Head Attention (SHA) and linear layers with convolutional (conv) layers. It exhibits robust performance in realistic, noisy environments, + making it highly reliable for real-world applications. + Specifically, it excels in long-form transcription, capable of accurately transcribing audio clips up to 30 seconds long. + supported_boards: ["ventunoq"] + bricks: + - id: "arduino:asr" + download_location: /var/lib/arduino-app-cli/models/audio-analytics/asr + metadata: + source: "qualcomm-ai-hub" + source-model-id: "whisper_small" + source-model-url: "https://aihub.qualcomm.com/models/whisper_small" + - melo-tts-en: + runner: audio-analytics + name : "Melo TTS (English)" + description: >- + MeloTTS is a high-quality multi-lingual text-to-speech library - English version. + supported_boards: ["ventunoq"] + bricks: + - id: "arduino:tts" + download_location: /var/lib/arduino-app-cli/models/audio-analytics/tts + metadata: + source: "qualcomm-ai-hub" + source-model-id: "melo_tts" + source-model-url: "https://aihub.qualcomm.com/models/melo_tts" \ No newline at end of file diff --git a/internal/orchestrator/config/config.go b/internal/orchestrator/config/config.go index 107d3d119..382cc59fb 100644 --- a/internal/orchestrator/config/config.go +++ b/internal/orchestrator/config/config.go @@ -32,7 +32,7 @@ import ( ) // runnerVersion do not edit, this is generate with `task generate:assets` -var RunnerVersion = "0.8.0" +var RunnerVersion = "0.9.0rc3" type Configuration struct { appsDir *paths.Path