From a6b05daefeabbb9b7a49d3b27eccc053d129d1e3 Mon Sep 17 00:00:00 2001 From: Irene-Maxine <114802521+Irene-Maxine@users.noreply.github.com> Date: Sun, 9 Mar 2025 23:05:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ollama=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../micropython/blocks/actuator_onboard.js | 16 +++ boards/default_src/micropython/blocks/iot.js | 117 +++++++++++++++++- .../micropython/blocks/sensor_extern.js | 2 +- .../micropython/blocks/sensor_onboard.js | 12 +- .../generators/actuator_onboard.js | 9 ++ .../default_src/micropython/generators/iot.js | 65 ++++++++++ .../micropython/generators/sensor_onboard.js | 7 ++ .../micropython_esp32c2/template.xml | 88 +++++++++++++ common/msg/blockly/zh-hans.js | 16 +++ 9 files changed, 329 insertions(+), 3 deletions(-) diff --git a/boards/default_src/micropython/blocks/actuator_onboard.js b/boards/default_src/micropython/blocks/actuator_onboard.js index 64f8f690..037f817e 100644 --- a/boards/default_src/micropython/blocks/actuator_onboard.js +++ b/boards/default_src/micropython/blocks/actuator_onboard.js @@ -1790,4 +1790,20 @@ export const educore_ble_keyboard_input = { this.setNextStatement(true); this.setInputsInline(true); } +}; + +export const get_keyboard_light = { + init: function () { + this.setColour(ACTUATOR_ONBOARD_HUE); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_KEYBOARD_LIGHT) + this.appendDummyInput() + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_NumLock, "0"], + [Blockly.Msg.MIXLY_CapsLock, "1"], + [Blockly.Msg.MIXLY_ScorllLock, "2"] + ]),'key'); + this.setOutput(true); + this.setInputsInline(true); + } }; \ No newline at end of file diff --git a/boards/default_src/micropython/blocks/iot.js b/boards/default_src/micropython/blocks/iot.js index 4421323a..40b0336b 100644 --- a/boards/default_src/micropython/blocks/iot.js +++ b/boards/default_src/micropython/blocks/iot.js @@ -621,4 +621,119 @@ export const iot_wificonnect = iot_wifi_connect; export const iot_onenetconnect = iot_onenet_connect; export const iot_onenetdisconnect = iot_onenet_disconnect; export const iot_checkonenet = iot_onenet_check; -export const iot_publish = iot_onenet_publish; \ No newline at end of file +export const iot_publish = iot_onenet_publish; + +export const IOT_CONNECT_OLLAMA = { + init: function () { + this.setColour(IOT_HUE); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_CONNECT_OLLAMA); + this.appendValueInput('SERVER') + .appendField(Blockly.Msg.MIXLY_EMQX_SERVER) + .setAlign(Blockly.inputs.Align.RIGHT); + this.appendValueInput('NAME') + .appendField(Blockly.Msg.MODEL_NAME) + .setAlign(Blockly.inputs.Align.RIGHT); + this.appendValueInput('NUMBER') + .appendField(Blockly.Msg.MIXLY_SET_MAXIMUM_HISTORICAL_SESSIONS_NUM); + this.setInputsInline(false); + this.setPreviousStatement(true); + this.setNextStatement(true); + } +}; + +export const use_ollama_llm_to_chat = { + init: function () { + this.setColour(IOT_HUE); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_LLM_CHAT); + this.appendValueInput('TOPIC') + .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_SEND); + this.appendValueInput('METHOD') + .appendField(Blockly.Msg.MIXLY_LLM_CONTENT_CALLBACK); + this.setInputsInline(true); + this.setPreviousStatement(true); + this.setNextStatement(true); + } +}; + +export const use_ollama_llm_to_chat_return = { + init: function () { + this.setColour(IOT_HUE); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_LLM_CHAT); + this.appendValueInput('TOPIC') + .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_SEND); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXPY_REQUESTS_GET_RESULT) + this.setInputsInline(true); + this.setOutput(true); + } +}; + +// export const ollama_set_timeout = { +// init: function () { +// this.setColour(IOT_HUE); +// this.appendValueInput("VAR") +// .appendField('Ollama ' + Blockly.Msg.MIXLY_OLLAMA_SET_TIMEOUT); +// this.setInputsInline(true); +// this.setPreviousStatement(true); +// this.setNextStatement(true); +// } +// } + +// export const ollama_set_max_retries = { +// init: function () { +// this.setColour(IOT_HUE); +// this.appendValueInput("VAR") +// .appendField('Ollama ' + Blockly.Msg.MIXLY_OLLAMA_SET_MAX_RETRIES); +// this.setInputsInline(true); +// this.setPreviousStatement(true); +// this.setNextStatement(true); +// } +// } + +// export const ollama_set_custom_url = { +// init: function () { +// this.setColour(IOT_HUE); +// this.appendValueInput("TEXT") +// .appendField('Ollama ' + Blockly.Msg.MIXLY_OLLAMA_SET_CUSTOM_URL); +// this.setInputsInline(true); +// this.setPreviousStatement(true); +// this.setNextStatement(true); +// } +// } + +// export const ollama_select_model = { +// init: function () { +// this.setColour(IOT_HUE); +// this.appendValueInput("TEXT") +// .appendField('Ollama ' + Blockly.Msg.MIXLY_SELECT_MODEL); +// this.setInputsInline(true); +// this.setPreviousStatement(true); +// this.setNextStatement(true); +// } +// } + +// export const ollama_clear_user_history = { +// init: function () { +// this.setColour(IOT_HUE); +// this.appendDummyInput() +// .appendField('Ollama ' + Blockly.Msg.MIXLY_CLEAR_USER_HISTORY); +// this.setInputsInline(true); +// this.setPreviousStatement(true); +// this.setNextStatement(true); +// } +// } + +export const ollama_empty_history = { + init: function () { + this.setColour(IOT_HUE); + this.appendDummyInput() + .appendField('Ollama ' + Blockly.Msg.MIXLY_EMPTY_HISTORY); + this.setInputsInline(true); + this.setPreviousStatement(true); + this.setNextStatement(true); + } +} + diff --git a/boards/default_src/micropython/blocks/sensor_extern.js b/boards/default_src/micropython/blocks/sensor_extern.js index 44ba7023..00c18efd 100644 --- a/boards/default_src/micropython/blocks/sensor_extern.js +++ b/boards/default_src/micropython/blocks/sensor_extern.js @@ -2227,7 +2227,7 @@ export const weigh_sensor_get_weight = { this.appendValueInput('SUB') .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_WEIGH_SENSOR) this.appendDummyInput() - .appendField(Blockly.Msg.blockpy_set_of + Blockly.Msg.MIXLY_DATA) + .appendField(Blockly.Msg.blockpy_set_of + Blockly.Msg.MIXLY_DATA + '(g)') this.setOutput(true); this.setInputsInline(true); } diff --git a/boards/default_src/micropython/blocks/sensor_onboard.js b/boards/default_src/micropython/blocks/sensor_onboard.js index 625f25db..ed6fbbec 100644 --- a/boards/default_src/micropython/blocks/sensor_onboard.js +++ b/boards/default_src/micropython/blocks/sensor_onboard.js @@ -1038,6 +1038,7 @@ export const sensor_mixgo_cc_mmc5603_get_magnetic = { }); } }; + export const sensor_mixgo_cc_mmc5603_get_angle = { init: function () { this.setColour(SENSOR_ONBOARD_HUE); @@ -1045,7 +1046,6 @@ export const sensor_mixgo_cc_mmc5603_get_angle = { .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE) this.setOutput(true, Number); this.setInputsInline(true); - } }; @@ -1737,4 +1737,14 @@ export const CI130X_SET_SYSTEM_CMD_SANT = { this.setNextStatement(true); this.setInputsInline(true); } +}; + +export const sensor_get_the_coprocessor_version = { + init: function () { + this.setColour(SENSOR_ONBOARD_HUE); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_THE_COPROCESSOR_VERSION) + this.setOutput(true); + this.setInputsInline(true); + } }; \ No newline at end of file diff --git a/boards/default_src/micropython/generators/actuator_onboard.js b/boards/default_src/micropython/generators/actuator_onboard.js index e59fb0fc..6d59edb4 100644 --- a/boards/default_src/micropython/generators/actuator_onboard.js +++ b/boards/default_src/micropython/generators/actuator_onboard.js @@ -765,4 +765,13 @@ export const educore_ble_keyboard_input = function (_, generator) { var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); var code = sub+".keyboard_send("+ ge + ")\n"; return code; +} + +export const get_keyboard_light = function (_,generator){ + var version = Boards.getSelectedBoardKey().split(':')[2] + generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot'; + var key = this.getFieldValue('key'); + var code = "onboard_bot.hid_keyboard_state()["+ key +']'; + return [code,generator.ORDER_ATOMIC] + } \ No newline at end of file diff --git a/boards/default_src/micropython/generators/iot.js b/boards/default_src/micropython/generators/iot.js index 19cbfb83..20fa7c99 100644 --- a/boards/default_src/micropython/generators/iot.js +++ b/boards/default_src/micropython/generators/iot.js @@ -233,4 +233,69 @@ export const iot_mqtt_data = function (_, generator) { var key = this.getFieldValue('key'); var code = 'mqtt_client.' + key; return [code, generator.ORDER_ATOMIC]; +} + +export const IOT_CONNECT_OLLAMA = function(_,generator) { + generator.definitions_['import_Ollama'] = "from ollama import Ollama"; + var ser = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC); + var name = generator.valueToCode(this, 'NAME', generator.ORDER_ATOMIC); + var num = generator.valueToCode(this, 'NUMBER', generator.ORDER_ATOMIC); + var code = 'llm = Ollama(' + ser + ', ' + name + ','+ num +')\n'; + return code; + +} + +export const use_ollama_llm_to_chat = function (_, generator) { + generator.definitions_['import_Ollama'] = "from ollama import Ollama"; + var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC); + var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC); + var code = 'llm.chat(' + topic + ',' + method + ')\n'; + return code; +} + +export const use_ollama_llm_to_chat_return = function (_, generator) { + generator.definitions_['import_Ollama'] = "from ollama import Ollama"; + var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC); + var code = 'llm.chat(' + topic + ')'; + return [code,generator.ORDER_ATOMIC]; +} + +// export const ollama_set_timeout = function (_,generator) { +// generator.definitions_['import_Ollama'] = "from ollama import Ollama"; +// var t = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); +// var code = 'llm.set_timeout(' + t + ')\n'; +// return code; +// } + +// export const ollama_set_max_retries = function (_,generator) { +// generator.definitions_['import_Ollama'] = "from ollama import Ollama"; +// var t = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); +// var code = 'llm.set_max_retries(' + t + ')\n'; +// return code; +// } + +// export const ollama_set_custom_url = function (_,generator) { +// generator.definitions_['import_Ollama'] = "from ollama import Ollama"; +// var t = generator.valueToCode(this, 'TEXT', generator.ORDER_ATOMIC); +// var code = 'llm.set_custom_url(' + t + ')\n'; +// return code; +// } + +// export const ollama_select_model = function (_,generator) { +// generator.definitions_['import_Ollama'] = "from ollama import Ollama"; +// var t = generator.valueToCode(this, 'TEXT', generator.ORDER_ATOMIC); +// var code = 'llm.select_model(' + t + ')\n'; +// return code; +// } + +// export const ollama_clear_user_history = function (_,generator) { +// generator.definitions_['import_Ollama'] = "from ollama import Ollama"; +// var code = 'llm.clear_user_history()\n'; +// return code; +// } + +export const ollama_empty_history = function (_,generator) { + generator.definitions_['import_Ollama'] = "from ollama import Ollama"; + var code = 'llm.empty_history()\n'; + return code; } \ No newline at end of file diff --git a/boards/default_src/micropython/generators/sensor_onboard.js b/boards/default_src/micropython/generators/sensor_onboard.js index f7c9094f..6258ac3d 100644 --- a/boards/default_src/micropython/generators/sensor_onboard.js +++ b/boards/default_src/micropython/generators/sensor_onboard.js @@ -924,4 +924,11 @@ export const CI130X_SET_SYSTEM_CMD_SANT = function (_, generator) { var cmd = this.getFieldValue('cmd'); var code = 'onboard_asr.sys_cmd(' + cmd + ')\n'; return code; +} + +export const sensor_get_the_coprocessor_version = function(_,generator){ + var version = Boards.getSelectedBoardKey().split(':')[2]; + generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot'; + var code = 'onboard_bot.version()'; + return [code, generator.ORDER_ATOMIC]; } \ No newline at end of file diff --git a/boards/default_src/micropython_esp32c2/template.xml b/boards/default_src/micropython_esp32c2/template.xml index 8a21053b..9fa6330e 100644 --- a/boards/default_src/micropython_esp32c2/template.xml +++ b/boards/default_src/micropython_esp32c2/template.xml @@ -1431,6 +1431,7 @@ + @@ -1699,6 +1700,7 @@ + @@ -2335,6 +2337,92 @@ + + + + 192.168.1.1 + + + + + qwen2.5-coder:0.5b + + + + + 5 + + + + + + + content + + + + + content_callback + + + + + + + + content_callback + + + + + content + + + + + + + + + + + + + + 请介绍一下米思齐? + + + + + + diff --git a/common/msg/blockly/zh-hans.js b/common/msg/blockly/zh-hans.js index db6cee40..ef2fd2d9 100644 --- a/common/msg/blockly/zh-hans.js +++ b/common/msg/blockly/zh-hans.js @@ -4063,4 +4063,20 @@ ZhHans.MIXLY_RFID_SCAN_ERROR = '卡错误'; ZhHans.MIXLY_WEIGH_SENSOR = '称重传感器'; ZhHans.MIXLY_Calibration_ratio = '校准比例'; ZhHans.MIXLY_KEYBOARD_AND_MOUSE = '键鼠'; +ZhHans.MIXLY_THE_COPROCESSOR_VERSION = '协处理器版本'; +ZhHans.MIXLY_KEYBOARD_LIGHT = '键盘指示灯'; +ZhHans.MIXLY_NumLock = '数字锁定'; +ZhHans.MIXLY_CapsLock = '大写锁定'; +ZhHans.MIXLY_ScorllLock = '滚动锁定'; +ZhHans.MIXLY_CONNECT_OLLAMA = '连接ollama平台 使用大语言模型'; +ZhHans.MIXLY_SET_MAXIMUM_HISTORICAL_SESSIONS_NUM = '设置历史对话记录最大保留数量'; +ZhHans.MIXLY_LLM_CHAT = '与大语言模型进行对话'; +ZhHans.MIXLY_LLM_CONTENT_CALLBACK = '结果输出回调'; +// ZhHans.MIXLY_OLLAMA_SET_TIMEOUT = '设置超时时间'; +// ZhHans.MIXLY_OLLAMA_SET_MAX_RETRIES = '设置最大重试次数'; +// ZhHans.MIXLY_OLLAMA_SET_CUSTOM_URL = '设置自定义链接'; +// ZhHans.MIXLY_SELECT_MODEL = '选择模型'; +// ZhHans.MIXLY_CLEAR_USER_HISTORY = '清除用户的历史记录'; +ZhHans.MIXLY_EMPTY_HISTORY = '清空历史记录' + })(); \ No newline at end of file