mini增加云端智能-语音交互
This commit is contained in:
108
boards/default_src/micropython/blocks/ai_cloud.js
Normal file
108
boards/default_src/micropython/blocks/ai_cloud.js
Normal file
@@ -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);
|
||||
}
|
||||
};
|
||||
@@ -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,
|
||||
|
||||
48
boards/default_src/micropython/generators/ai_cloud.js
Normal file
48
boards/default_src/micropython/generators/ai_cloud.js
Normal file
@@ -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;
|
||||
}
|
||||
@@ -486,3 +486,13 @@ div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTr
|
||||
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;
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -2811,6 +2811,124 @@
|
||||
</value>
|
||||
</block>
|
||||
</category>
|
||||
</category>
|
||||
<category id="catCloudAI" colour="#75878a">
|
||||
<category id="catVI" colour="88ada6">
|
||||
<block type="init_xunfei_vi">
|
||||
<value name="VAR">
|
||||
<shadow type="variables_get">
|
||||
<field name="VAR">asr</field>
|
||||
</shadow>
|
||||
</value>
|
||||
<value name="APPID">
|
||||
<shadow type="text">
|
||||
<field name="TEXT">ba3917dd</field>
|
||||
</shadow>
|
||||
</value>
|
||||
<value name="APISecret">
|
||||
<shadow type="text">
|
||||
<field name="TEXT">Nzg4MWUyNGE1ZTcxOGZkNzM4NWQ4Yzdi</field>
|
||||
</shadow>
|
||||
</value>
|
||||
<value name="APIKey">
|
||||
<shadow type="text">
|
||||
<field name="TEXT">b47549319a8324f5eab3dd5c37dfa1dd</field>
|
||||
</shadow>
|
||||
<value>
|
||||
</block>
|
||||
<block type="init_xunfei_Spark_Ultra">
|
||||
<value name="VAR">
|
||||
<shadow type="variables_get">
|
||||
<field name="VAR">llm</field>
|
||||
</shadow>
|
||||
</value>
|
||||
<value name="APPID">
|
||||
<shadow type="text">
|
||||
<field name="TEXT">ba3917dd</field>
|
||||
</shadow>
|
||||
</value>
|
||||
<value name="APISecret">
|
||||
<shadow type="text">
|
||||
<field name="TEXT">Nzg4MWUyNGE1ZTcxOGZkNzM4NWQ4Yzdi</field>
|
||||
</shadow>
|
||||
</value>
|
||||
<value name="APIKey">
|
||||
<shadow type="text">
|
||||
<field name="TEXT">b47549319a8324f5eab3dd5c37dfa1dd</field>
|
||||
</shadow>
|
||||
<value>
|
||||
</block>
|
||||
<block type="init_xunfei_vi_run">
|
||||
<value name="VAR">
|
||||
<shadow type="variables_get">
|
||||
<field name="VAR">asr</field>
|
||||
</shadow>
|
||||
</value>
|
||||
<value name="time">
|
||||
<shadow type="math_number">
|
||||
<field name="NUM">3</field>
|
||||
</shadow>
|
||||
</value>
|
||||
</block>
|
||||
<block type="init_xunfei_Spark_Ultra_run">
|
||||
<value name="VAR">
|
||||
<shadow type="variables_get">
|
||||
<field name="VAR">llm</field>
|
||||
</shadow>
|
||||
</value>
|
||||
<value name="qus">
|
||||
<shadow type="text">
|
||||
<field name="TEXT">question</field>
|
||||
</shadow>
|
||||
</value>
|
||||
</block>
|
||||
<block type="init_xunfei_Spark_Ultra_clr_his">
|
||||
<value name="VAR">
|
||||
<shadow type="variables_get">
|
||||
<field name="VAR">llm</field>
|
||||
</shadow>
|
||||
</value>
|
||||
</block>
|
||||
<block type="llm_set_callback">
|
||||
<value name="VAR1">
|
||||
<shadow type="variables_get">
|
||||
<field name="VAR">llm</field>
|
||||
</shadow>
|
||||
</value>
|
||||
<value name="callback">
|
||||
<shadow type="factory_block_return">
|
||||
<field name="VALUE">cb_func</field>
|
||||
</shadow>
|
||||
</value>
|
||||
<value name="VAR">
|
||||
<block type="tuple_create_with_text_return">
|
||||
<field name="TEXT">"参数名","类型","描述"</field>
|
||||
</block>
|
||||
</value>
|
||||
</block>
|
||||
<block type="procedures_defnoreturn">
|
||||
<mutation>
|
||||
<arg name="xx"></arg>
|
||||
</mutation>
|
||||
<field name="NAME">cb_func</field>
|
||||
<statement name="STACK">
|
||||
<block type="system_print_many">
|
||||
<mutation items="2"></mutation>
|
||||
<value name="ADD0">
|
||||
<block type="text">
|
||||
<field name="TEXT">cb------</field>
|
||||
</block>
|
||||
</value>
|
||||
<value name="ADD1">
|
||||
<block type="variables_get">
|
||||
<field name="VAR">xx</field>
|
||||
</block>
|
||||
</value>
|
||||
</block>
|
||||
</statement>
|
||||
</block>
|
||||
|
||||
</category>
|
||||
</category>
|
||||
<category id="catGroup" colour="140">
|
||||
<category id="catBLE" colour="140">
|
||||
|
||||
@@ -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)'
|
||||
})();
|
||||
|
||||
@@ -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-布尔类型)'
|
||||
})();
|
||||
@@ -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-布爾類型)'
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user