diff --git a/boards/default_src/micropython/blocks/ai_cloud.js b/boards/default_src/micropython/blocks/ai_cloud.js new file mode 100644 index 00000000..78435c0d --- /dev/null +++ b/boards/default_src/micropython/blocks/ai_cloud.js @@ -0,0 +1,108 @@ +import * as Blockly from 'blockly/core'; +import { Variables } from '../../python/export'; +const AI_CLOUD_VOICE_HUE = '#88ada6'; + +export const init_xunfei_vi = { + init: function () { + this.setColour(AI_CLOUD_VOICE_HUE); + this.appendValueInput('VAR') + .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_AS + Blockly.Msg.MIXLY_XUFEI + Blockly.Msg.MIXLY_AipSpeech_asr ); + this.appendValueInput('APPID') + .setCheck(String) + .appendField('APPID'); + this.appendValueInput('APISecret') + .setCheck(String) + .appendField('APISecret'); + this.appendValueInput('APIKey') + .setCheck(String) + .appendField('APIKey'); + this.setInputsInline(false); + this.setPreviousStatement(true); + this.setNextStatement(true); + } +}; + + + +export const init_xunfei_Spark_Ultra = { + init: function () { + this.setColour(AI_CLOUD_VOICE_HUE); + this.appendValueInput('VAR') + .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_AS + Blockly.Msg.MIXLY_XUFEI + 'Spark Ultra' +Blockly.Msg.MIXLY_LARGE_LANGUAGE_MODEL ); + this.appendValueInput('APPID') + .setCheck(String) + .appendField('APPID'); + this.appendValueInput('APISecret') + .setCheck(String) + .appendField('APISecret'); + this.appendValueInput('APIKey') + .setCheck(String) + .appendField('APIKey'); + this.setInputsInline(false); + this.setPreviousStatement(true); + this.setNextStatement(true); + } +}; + +export const init_xunfei_vi_run = { + init: function () { + this.setColour(AI_CLOUD_VOICE_HUE); + this.appendValueInput('VAR') + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_RUN + Blockly.Msg.MIXLY_AipSpeech_asr); + this.appendValueInput('time') + .setCheck(Number); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXPY_AI_AUDIO_TIME); + this.setInputsInline(true); + this.setOutput(true); + this.setTooltip(Blockly.Msg.init_xunfei_vi_op_tooltip); + } +}; + +export const init_xunfei_Spark_Ultra_run = { + init: function () { + this.setColour(AI_CLOUD_VOICE_HUE); + this.appendValueInput('VAR') + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_RUN + Blockly.Msg.MIXLY_LARGE_LANGUAGE_MODEL); + this.appendValueInput('qus') + .setCheck(String) + .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND); + this.setInputsInline(true); + this.setOutput(true); + this.setTooltip(Blockly.Msg.init_xunfei_vi_run_tooltip); + } +}; + +export const init_xunfei_Spark_Ultra_clr_his = { + init: function () { + this.setColour(AI_CLOUD_VOICE_HUE); + this.appendValueInput('VAR') + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_RUN + Blockly.Msg.MIXLY_LARGE_LANGUAGE_MODEL + Blockly.Msg.MIXLY_EMPTY_HISTORY); + this.setInputsInline(true); + this.setPreviousStatement(true); + this.setNextStatement(true); + } +}; + +export const llm_set_callback = { + init: function () { + this.setColour(AI_CLOUD_VOICE_HUE); + this.appendValueInput('VAR1') + .appendField(Blockly.Msg.MIXLY_LARGE_LANGUAGE_MODEL) + this.appendValueInput('callback') + .appendField(Blockly.Msg.MIXLY_PYTHON_CONTROLS_THREAD_USE) + this.appendValueInput('VAR') + .appendField(Blockly.Msg.MIXLY_PARAMS); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setInputsInline(true); + this.setTooltip(Blockly.Msg.llm_set_callback_tooltip); + } +}; \ No newline at end of file diff --git a/boards/default_src/micropython/export.js b/boards/default_src/micropython/export.js index c95f5751..b0afa2d5 100644 --- a/boards/default_src/micropython/export.js +++ b/boards/default_src/micropython/export.js @@ -4,6 +4,7 @@ import * as MicroPythonActuatorBlocks from './blocks/actuator'; import * as MicroPythonAISensorBlocks from './blocks/ai_sensor'; import * as MicroPythonAIBlocks from './blocks/ai'; import * as MicroPythonAILocalBlocks from './blocks/ai_local'; +import * as MicroPythonAICloudBlocks from './blocks/ai_cloud'; import * as MicroPythonBlynkBlocks from './blocks/blynk'; import * as MicroPythonCCG1Blocks from './blocks/cc_g1'; import * as MicroPythonCEGOBlocks from './blocks/ce_go'; @@ -32,6 +33,7 @@ import * as MicroPythonActuatorGenerators from './generators/actuator'; import * as MicroPythonAISensorGenerators from './generators/ai_sensor'; import * as MicroPythonAILocalGenerators from './generators/ai_local'; import * as MicroPythonAIGenerators from './generators/ai'; +import * as MicroPythonAICloudGenerators from './generators/ai_cloud'; import * as MicroPythonBlynkGenerators from './generators/blynk'; import * as MicroPythonCCG1Generators from './generators/cc_g1'; import * as MicroPythonCEGOGenerators from './generators/ce_go'; @@ -67,6 +69,7 @@ export { MicroPythonAISensorBlocks, MicroPythonAIBlocks, MicroPythonAILocalBlocks, + MicroPythonAICloudBlocks, MicroPythonBlynkBlocks, MicroPythonCCG1Blocks, MicroPythonCEGOBlocks, @@ -94,6 +97,7 @@ export { MicroPythonAISensorGenerators, MicroPythonAIGenerators, MicroPythonAILocalGenerators, + MicroPythonAICloudGenerators, MicroPythonBlynkGenerators, MicroPythonCCG1Generators, MicroPythonCEGOGenerators, diff --git a/boards/default_src/micropython/generators/ai_cloud.js b/boards/default_src/micropython/generators/ai_cloud.js new file mode 100644 index 00000000..b06a9436 --- /dev/null +++ b/boards/default_src/micropython/generators/ai_cloud.js @@ -0,0 +1,48 @@ +import { Boards } from 'mixly'; + +export const init_xunfei_vi = function (_, generator) { + generator.definitions_['import_mini_xunfei'] = "import mini_xunfei"; + var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); + var id = generator.valueToCode(this, 'APPID', generator.ORDER_ATOMIC); + var s = generator.valueToCode(this, 'APISecret', generator.ORDER_ATOMIC); + var key = generator.valueToCode(this, 'APIKey', generator.ORDER_ATOMIC); + var code = v + ' = mini_xunfei.ASR_WebSocket(' + id + ',' + key + ',' + s +')\n'; + return code; +} + +export const init_xunfei_Spark_Ultra = function (_, generator) { + generator.definitions_['import_mini_xunfei'] = "import mini_xunfei"; + var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); + var id = generator.valueToCode(this, 'APPID', generator.ORDER_ATOMIC); + var s = generator.valueToCode(this, 'APISecret', generator.ORDER_ATOMIC); + var key = generator.valueToCode(this, 'APIKey', generator.ORDER_ATOMIC); + var code = v + ' = mini_xunfei.LLM_WebSocket(' + id + ',' + key + ',' + s +')\n'; + return code; +} + +export const init_xunfei_vi_run = function (_, generator) { + var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); + var t = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC); + var code = v + '.run(' + t +')'; + var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); + var q = generator.valueToCode(this, 'qus', generator.ORDER_ATOMIC); + var code = v + '.run(' + q +')'; + return [code,generator.ORDER_ATOMIC]; +} + +export const init_xunfei_Spark_Ultra_clr_his = function (_, generator) { + var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); + var code = v + '.empty_history()\n'; + return code; +} + +export const llm_set_callback = function (_, generator) { + var v1 = generator.valueToCode(this, "VAR1", generator.ORDER_NONE) || "None"; + var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None"; + var callback = generator.variableDB_.getName( + generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None", + Blockly.Procedures.NAME_TYPE + ); + var code = v1 +".function_call(" + callback + ", " + v + ")\n"; + return code; +} \ No newline at end of file diff --git a/boards/default_src/micropython_esp32c2/css/color_esp32c3_mixgocc.css b/boards/default_src/micropython_esp32c2/css/color_esp32c3_mixgocc.css index e471b651..66a1ed30 100644 --- a/boards/default_src/micropython_esp32c2/css/color_esp32c3_mixgocc.css +++ b/boards/default_src/micropython_esp32c2/css/color_esp32c3_mixgocc.css @@ -485,4 +485,14 @@ div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTr #catBLEKM.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon { background: url('../../../../common/media/mark/comuni2.png') no-repeat; background-size: 100% auto; +} + +#catVI.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon { + background: url('../../../../common/media/mark/AIvoice.png') no-repeat; + background-size: 100% auto; +} + +#catVI.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon { + background: url('../../../../common/media/mark/AIvoice2.png') no-repeat; + background-size: 100% auto; } \ No newline at end of file diff --git a/boards/default_src/micropython_esp32c2/index.js b/boards/default_src/micropython_esp32c2/index.js index 799f3fbc..5e7438b2 100644 --- a/boards/default_src/micropython_esp32c2/index.js +++ b/boards/default_src/micropython_esp32c2/index.js @@ -39,6 +39,7 @@ import { MicroPythonAISensorBlocks, MicroPythonAIBlocks, MicroPythonAILocalBlocks, + MicroPythonAICloudBlocks, MicroPythonBlynkBlocks, MicroPythonCCG1Blocks, MicroPythonCEGOBlocks, @@ -59,6 +60,7 @@ import { MicroPythonAISensorGenerators, MicroPythonAIGenerators, MicroPythonAILocalGenerators, + MicroPythonAICloudGenerators, MicroPythonBlynkGenerators, MicroPythonCCG1Generators, MicroPythonCEGOGenerators, @@ -131,6 +133,7 @@ Object.assign( MicroPythonWeatherBlocks, MicroPythonAISensorBlocks, MicroPythonAILocalBlocks, + MicroPythonAICloudBlocks, MicroPythonSensorOnBoardBlocks, MicroPythonSensorExternBlocks, MicroPythonNetworkBlocks, @@ -172,6 +175,7 @@ Object.assign( MicroPythonWeatherGenerators, MicroPythonAISensorGenerators, MicroPythonAILocalGenerators, + MicroPythonAICloudGenerators, MicroPythonSensorOnBoardGenerators, MicroPythonSensorExternGenerators, MicroPythonNetworkGenerators, diff --git a/boards/default_src/micropython_esp32c2/template.xml b/boards/default_src/micropython_esp32c2/template.xml index ba6169ac..1cf85669 100644 --- a/boards/default_src/micropython_esp32c2/template.xml +++ b/boards/default_src/micropython_esp32c2/template.xml @@ -2811,6 +2811,124 @@ + + + + + + + asr + + + + + ba3917dd + + + + + Nzg4MWUyNGE1ZTcxOGZkNzM4NWQ4Yzdi + + + + + b47549319a8324f5eab3dd5c37dfa1dd + + + + + + + llm + + + + + ba3917dd + + + + + Nzg4MWUyNGE1ZTcxOGZkNzM4NWQ4Yzdi + + + + + b47549319a8324f5eab3dd5c37dfa1dd + + + + + + + asr + + + + + 3 + + + + + + + llm + + + + + question + + + + + + + llm + + + + + + + llm + + + + + cb_func + + + + + "参数名","类型","描述" + + + + + + + + cb_func + + + + + + cb------ + + + + + xx + + + + + + + diff --git a/common/msg/blockly/en.js b/common/msg/blockly/en.js index c0f10e2f..3108cfb8 100644 --- a/common/msg/blockly/en.js +++ b/common/msg/blockly/en.js @@ -176,7 +176,9 @@ En.MSG = { enablePythonToBlockly: "Blocks↔Code", catSearch: "Search", wiki: "Wiki", - catTinyWebDB: "TinyWebDB" + catTinyWebDB: "TinyWebDB", + catCloudAI:"Cloud Intelligence", + catVI:"Voice Isnteraction" }; /* 多重选择 */ @@ -4041,4 +4043,10 @@ En.MIXLY_TENSORFLOW_LOAD_MODEL = 'Use imported model'; En.MIXLY_TENSORFLOW_MODEL_NAME = 'Model name'; En.MIXLY_TENSORFLOW_PREPARE_PICTURE_TO_TENSOR = 'Preprocess image to tensor'; En.MIXLY_TENSORFLOW_PREPARE_PICTURE_READ_PICTURE = 'Read image'; +En.MIXLY_XUFEI = 'xunfei'; +En.MIXLY_LARGE_LANGUAGE_MODEL = 'large language model'; +En.init_xunfei_vi_op_tooltip = 'return text result of speech recognition'; +En.MIXLY_RUN = 'run'; +En.init_xunfei_vi_run_tooltip = 'return large language model text output'; +En.llm_set_callback_tooltip = 'tpyes (string,number(includde float),integer,boolean)' })(); diff --git a/common/msg/blockly/zh-hans.js b/common/msg/blockly/zh-hans.js index 5444af27..aee55ae5 100644 --- a/common/msg/blockly/zh-hans.js +++ b/common/msg/blockly/zh-hans.js @@ -187,7 +187,9 @@ ZhHans.MSG = { enablePythonToBlockly: "图文互换", catSearch: "查找", wiki: "Wiki", - catTinyWebDB: "TinyWebDB" + catTinyWebDB: "TinyWebDB", + catCloudAI:"云端智能", + catVI:"语音交互" }; /* 多重选择 */ @@ -4199,4 +4201,10 @@ ZhHans.MIXLY_TENSORFLOW_LOAD_MODEL = '使用导入模型'; ZhHans.MIXLY_TENSORFLOW_MODEL_NAME = '模型名'; ZhHans.MIXLY_TENSORFLOW_PREPARE_PICTURE_TO_TENSOR = '预处理图像为张量'; ZhHans.MIXLY_TENSORFLOW_PREPARE_PICTURE_READ_PICTURE = '读入图像'; +ZhHans.MIXLY_XUFEI = '讯飞'; +ZhHans.MIXLY_LARGE_LANGUAGE_MODEL = '大模型'; +ZhHans.init_xunfei_vi_op_tooltip = '返回 语音识别文字结果'; +ZhHans.MIXLY_RUN = '运行'; +ZhHans.init_xunfei_vi_run_tooltip = '返回 大模型文字结果'; +ZhHans.llm_set_callback_tooltip = '类型有(string-字符串类型,number-数字类型(含小数),integer-整数类型,boolean-布尔类型)' })(); \ No newline at end of file diff --git a/common/msg/blockly/zh-hant.js b/common/msg/blockly/zh-hant.js index de64d220..f3e868bd 100644 --- a/common/msg/blockly/zh-hant.js +++ b/common/msg/blockly/zh-hant.js @@ -187,7 +187,9 @@ ZhHant.MSG = { enablePythonToBlockly: "圖文互換", catSearch: "查找", wiki: "Wiki", - catTinyWebDB: "TinyWebDB" + catTinyWebDB: "TinyWebDB", + catCloudAI:"雲端智能", + catVI:"語音交互" }; /* 多重選擇 */ @@ -4194,4 +4196,10 @@ ZhHant.MIXLY_TENSORFLOW_LOAD_MODEL = '使用導入模型'; ZhHant.MIXLY_TENSORFLOW_MODEL_NAME = '模型名'; ZhHant.MIXLY_TENSORFLOW_PREPARE_PICTURE_TO_TENSOR = '預處理圖像為張量'; ZhHant.MIXLY_TENSORFLOW_PREPARE_PICTURE_READ_PICTURE = '讀入圖像'; +ZhHant.MIXLY_XUFEI = '訊飛'; +ZhHant.MIXLY_LARGE_LANGUAGE_MODEL = '大模型'; +ZhHant.init_xunfei_vi_op_tooltip = '返回 語音識別文字結果'; +ZhHant.MIXLY_RUN = '運行'; +ZhHant.init_xunfei_vi_run_tooltip = '返回 大模型文字結果'; +ZhHant.llm_set_callback_tooltip = '類型有(string-字符串類型,number-數字類型(含小數),integer-整數類型,boolean-布爾類型)' })();