Sam Altman
There are two things from our announcement today I wanted to highlight.
First, a key part of our mission is to put very capable AI tools in the hands of people for free (or at a great price). I am...
You can add comments before uploading. Hold shift to upload directly.
<project name="snap-openai-gpt-4o" app="Snap! 10-dev, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAAqJJREFUeF7t2LFtwlAARdEPQzAACzAEE0BPTcNc7MEK9CxAQUMPUZAShaQOt+B4AD//qyNb8uR+v9+HS4GowATAqLzZRwEAQUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrf+DfA1Wo1jsfjOJ1OqijwsgJPb8BPhD+vy+UyDofDyx7G0PsV+PMJ/o3wZ5LNZjPW6/X7VXLifyvwBHA+n4/FYvE0dr1ex36/H7PZ7N8ewo3ft8A3wO12O87n86PEcrkcu93ufas4+csKPADebrcxnU5fNmpIga8CfsOwkBYAMM1vHEAG0gIApvmNA8hAWgDANL9xABlICwCY5jcOIANpAQDT/MYBZCAtAGCa3ziADKQFAEzzGweQgbQAgGl+4wAykBYAMM1vHEAG0gIApvmNA8hAWgDANL9xABlICwCY5jcOIANpAQDT/MY/AEkC/KiIpGeSAAAAAElFTkSuQmCC</thumbnail><scenes select="1"><scene name="snap-openai-gpt-4o"><notes></notes><palette><category name="动画文字" color="0,116,143,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="create openai client %'apikey'" type="command" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"><API key></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>apikey</l></list><l>if (window.openaiClient){return}

url = "https://cdn.jsdelivr.net/npm/@azure/openai@1.0.0-beta.12/+esm" // @latest
import(url).then(openai => {
 window.openaiClient = new openai.OpenAIClient(new openai.OpenAIKeyCredential(apikey));
});</l></block><list><block var="apikey"/></list></block><block s="doWaitUntil"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return window.openaiClient != null</l></block><list></list></block></block></script></block-definition><block-definition s="显示文字 %'TEXT'" type="command" category="动画文字"><header></header><code></code><translations></translations><inputs><input type="%s">欢迎来到我的项目!</input></inputs><script><block s="doSetVar"><l>_AnimatedText_font_text</l><block var="TEXT"/></block><block s="setPenColorDimension"><l><option>r-g-b(-a)</option></l><block var="_AnimatedText_font_color"/></block><block s="doSwitchToCostume"><custom-block s="costume from text %s size %n (elite version)"><block var="_AnimatedText_font_text"/><block var="_AnimatedText_font_size"/></custom-block></block></script><scripts><script x="278" y="47.44444444444446"><block var="_AnimatedText_font_size"/></script></scripts></block-definition><block-definition s="costume from text %'text' size %'size' (elite version)" type="reporter" category="动画文字" helper="true"><header></header><code></code><translations>de:Kostüm aus Text _ Größe _
pt:um traje com o texto _ de tamanho _
ca:vestit amb el text _ i mida _
</translations><inputs><input type="%s">A</input><input type="%n">72</input></inputs><script><block s="doDeclareVariables"><list><l>costume</l><l>x</l><l>y</l><l>dir</l><l>cst</l><l>trails</l><l>pen state</l></list></block><block s="doSetVar"><l>x</l><block s="xPosition"></block></block><block s="doSetVar"><l>y</l><block s="yPosition"></block></block><block s="doSetVar"><l>dir</l><block s="direction"></block></block><block s="doSetVar"><l>cst</l><block s="reportGet"><l><option>costume</option></l></block></block><block s="doSetVar"><l>pen state</l><block s="getPenDown"></block></block><block s="up"></block><block s="doGotoObject"><l><option>center</option></l></block><block s="setHeading"><l>90</l></block><block s="doSwitchToCostume"><l><option>Turtle</option></l></block><block s="doSetVar"><l>trails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>舞台</l></block><block s="reportDifference"><block s="reportAttributeOf"><l><option>top</option></l><l>舞台</l></block><block var="size"/></block></block><block s="doWarp"><script><block s="doForEach"><l>line</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list></list></block></autolambda><list></list></block><custom-block s="_text %s to lines size %s"><block var="text"/><block var="size"/></custom-block></block><script><block s="write"><block var="line"/><block var="size"/></block><block s="setXPosition"><block s="reportAttributeOf"><l><option>left</option></l><l>舞台</l></block></block><block s="changeYPosition"><block s="reportVariadicProduct"><list><l>-1</l><block s="reportVariadicSum"><list><block var="size"/><l>5</l></list></block></list></block></block></script></block></script></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>舞台</l></block><block s="reportDifference"><block s="reportAttributeOf"><l><option>top</option></l><l>舞台</l></block><block var="size"/></block></block><block s="doSetVar"><l>costume</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="doApplyExtension"><l>obj_name(obj, name)</l><list><block var="costume"/><block s="reportJoinWords"><list><block var="text"/></list></block></list></block><block s="doGotoObject"><l><option>center</option></l></block><block s="doSwitchToCostume"><block var="trails"/></block><block s="doStamp"></block><block s="doSwitchToCostume"><block var="cst"/></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="setHeading"><block var="dir"/></block><block s="doIf"><block var="pen state"/><script><block s="down"></block></script><list></list></block><block s="doReport"><block var="costume"/></block></script></block-definition><block-definition s="将特效设为 %'X' 显示文字 %'TEXT'" type="command" category="动画文字"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">打字<options>打字
彩虹
放大</options></input><input type="%s">开始吧!</input></inputs><script><block s="doSetVar"><l>_AnimatedText_font_text</l><block var="TEXT"/></block><block s="setPenColorDimension"><l><option>r-g-b(-a)</option></l><block var="_AnimatedText_font_color"/></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="X"/><l>打字</l></list></block><script><block s="doFor"><l>i</l><l>1</l><block s="reportTextAttribute"><l><option>length</option></l><block var="_AnimatedText_font_text"/></block><script><block s="doSwitchToCostume"><custom-block s="costume from text %s size %n (elite version)"><block s="reportJoinWords"><list><block s="reportLetter"><block s="reportNumbers"><l>1</l><block var="i"/></block><block var="_AnimatedText_font_text"/></block></list></block><block var="_AnimatedText_font_size"/></custom-block></block><block s="doWait"><l>0.05</l></block></script></block></script><list><block s="reportVariadicEquals"><list><block var="X"/><l>放大</l></list></block><script><block s="doFor"><l>i</l><l>1</l><l>25</l><script><block s="doSwitchToCostume"><custom-block s="costume from text %s size %n (elite version)"><block var="_AnimatedText_font_text"/><block var="i"/></custom-block></block></script></block></script><block s="reportVariadicEquals"><list><block var="X"/><l>彩虹</l></list></block><script><block s="setColor"><color>227,0,230,1</color></block><block s="doFor"><l>i</l><l>1</l><l>100</l><script><block s="setPenColorDimension"><l><option>hue</option></l><block var="i"/></block><block s="doSwitchToCostume"><custom-block s="costume from text %s size %n (elite version)"><block var="_AnimatedText_font_text"/><block var="_AnimatedText_font_size"/></custom-block></block></script></block><custom-block s="显示文字 %s"><block var="_AnimatedText_font_text"/></custom-block></script></list></block></script></block-definition><block-definition s="显示角色" type="command" category="动画文字"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>_AnimatedText_font_text</l><l></l></block><block s="doSwitchToCostume"><block s="getCostumeIdx"></block></block></script></block-definition><block-definition s="将文字颜色设为 %'COLOR'" type="command" category="动画文字"><header></header><code></code><translations></translations><inputs><input type="%clr"></input></inputs><script><block s="doSetVar"><l>_AnimatedText_font_color</l><custom-block s="_color_to_rgb %s"><block var="COLOR"/></custom-block></block><block s="doAddToList"><l>255</l><block var="_AnimatedText_font_color"/></block><block s="doIf"><block var="_AnimatedText_font_text"/><script><custom-block s="显示文字 %s"><block var="_AnimatedText_font_text"/></custom-block></script><list></list></block></script></block-definition><block-definition s="_color_to_rgb %'COLOR'" type="reporter" category="动画文字" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>color</l></list></block><block s="doSetVar"><l>color</l><block s="reportTextSplit"><block s="reportJoinWords"><list><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicOr"><list><block s="reportIsA"><l></l><l><option>number</option></l></block><block s="reportVariadicEquals"><list><l></l><l>,</l></list></block></list></block></autolambda><list></list></block><block s="reportTextSplit"><block s="reportJoinWords"><list><block var="COLOR"/></list></block><l><option>letter</option></l></block></block></list></block><l>,</l></block></block><block s="doReport"><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block var="color"/></block><block s="reportListItem"><l>2</l><block var="color"/></block><block s="reportListItem"><l>3</l><block var="color"/></block></list></block></block></script></block-definition><block-definition s="_text %'text' to lines size %'size'" type="reporter" category="动画文字" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s">25</input></inputs><script><block s="doDeclareVariables"><list><l>new_list</l><l>last_line</l><l>word_per_line</l></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="_AnimatedText_line_width"/><l>0</l></list></block><script><block s="doSetVar"><l>word_per_line</l><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="reportAttributeOf"><l><option>width</option></l><l>舞台</l></block><block var="size"/></block></block></block></script><list><l><bool>true</bool></l><script><block s="doSetVar"><l>word_per_line</l><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="_AnimatedText_line_width"/><block var="size"/></block></block></block></script></list></block><block s="doIf"><block s="reportVariadicLessThan"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="text"/></block><block var="word_per_line"/></list></block><script><block s="doReport"><block s="reportNewList"><list><block s="reportTextSplit"><block var="text"/><l></l></block></list></block><comment w="90" collapsed="false">优化性能</comment></block></script><list><l><bool>true</bool></l><script><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="text"/></block><block s="reportVariadicProduct"><list><l>6</l><block var="word_per_line"/></list></block></list></block><script></script><list></list></block><block s="doWarp"><script><block s="doSetVar"><l>new_list</l><block s="reportReshape"><block s="reportTextSplit"><block var="text"/><l></l></block><list><l></l><block var="word_per_line"/></list></block></block><block s="doSetVar"><l>last_line</l><block s="reportListItem"><l><option>last</option></l><block var="new_list"/></block></block><block s="doRepeat"><block s="reportDifference"><block s="reportVariadicProduct"><list><block s="reportListAttribute"><l><option>length</option></l><block var="new_list"/></block><block var="word_per_line"/></list></block><block s="reportTextAttribute"><l><option>length</option></l><block var="text"/></block></block><script><block s="doDeleteFromList"><l><option>last</option></l><block var="last_line"/></block></script></block><block s="doReport"><block var="new_list"/></block></script></block></script></list></block></script><scripts><comment x="477.66666666666674" y="158.46666666666667" w="120" collapsed="false">查看帮助说明 重构列表会导致重复
清理最后一行</comment><script x="406.6666666666667" y="312.44444444444446"><block s="doApplyExtension"><l>err_error(msg)</l><list><l>长度超过限制</l></list></block></script></scripts></block-definition><block-definition s="将文字宽度设为 %'width'" type="command" category="动画文字"><header></header><code></code><translations></translations><inputs><input type="%n">200</input></inputs><script><block s="doSetVar"><l>_AnimatedText_line_width</l><block s="reportVariadicMin"><list><block s="reportAttributeOf"><l><option>width</option></l><l>舞台</l></block><block s="reportVariadicMax"><list><block var="_AnimatedText_font_size"/><block var="width"/></list></block></list></block></block><block s="doIf"><block var="_AnimatedText_font_text"/><script><custom-block s="显示文字 %s"><block var="_AnimatedText_font_text"/></custom-block></script><list></list></block></script></block-definition><block-definition s="显示 emoji 角色 %'EMOJI'" type="command" category="动画文字"><header></header><code></code><translations></translations><inputs><input type="%s">🔥<options>🔥
🤪
🥳
🐶
🚀
🥥
🍉
🌶️
💻
📖
⛰️
❤️</options></input></inputs><script><block s="doSwitchToCostume"><custom-block s="costume from text %s size %n (elite version)"><block var="EMOJI"/><l>50</l></custom-block></block></script><scripts><script x="84.66666666666664" y="93.77777777777776"><block s="doSetVar"><l><option>my rotation x</option></l><block s="reportGet"><l><option>center x</option></l><comment w="166" collapsed="false">设置旋转中心为角色的中心
需要用户手动进行,直接拼在这个积木内,会导致偏移</comment></block></block><block s="doSetVar"><l><option>my rotation y</option></l><block s="reportGet"><l><option>center y</option></l></block></block></script></scripts></block-definition><block-definition s="stream chat completions $nl text %'text' $nl vision %'vision' $nl callback %'callback'" type="command" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mlt" initial="1"></input><input type="%b" initial="1">false</input><input type="%cmdRing" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>reply</l><l>delta_callback</l></list></block><block s="doSetVar"><l>reply</l><block s="reportNewList"><list></list></block></block><block s="doIf"><block var="vision"/><script><block s="doSetVar"><l>vision</l><block s="reportApplyExtension"><l>elite_object2base64(obj)</l><list><block s="reportVideo"><l><option>snap</option></l><l>舞台</l></block></list></block></block></script><list></list></block><block s="doSetVar"><l>delta_callback</l><block s="reifyScript"><script><block s="doAddToList"><block var="delta"/><block var="reply"/></block><block s="doSetVar"><l>test</l><block s="reportJoinWords"><block var="reply"/></block></block><block s="doRun"><block var="callback"/><list><block s="reportJoinWords"><block var="reply"/></block></list></block></script><list><l>delta</l></list></block></block><block s="doRun"><block s="reportJSFunction"><list><l>text</l><l>vision</l><l>callback</l></list><l>let that = this;

function run_callback(callback, args) {
 let stage = that.parentThatIsA(StageMorph);
 let proc = new Process();
 // let args = args;
 proc.initializeFor(callback, new List(args));
 stage.threads.processes.push(proc);
}

async function main() {
 const client = window.openaiClient;
 // https://platform.openai.com/playground/chat 
 const deploymentId = "gpt-4o";
 const messages = [
 // { role: "system", content: "你是一个有用的助手。 你会像海盗一样说话。" },
 // { role: "user", content: "你能帮助我吗?" },
 // { role: "assistant", content: "当然,我心甘情愿! 我能为你做点什么?" },
 {
 role: "user", content:
 [
 {
 "type": "image_url",
 "imageUrl": {
 "url": vision
 }
 },
 {
 "type": "text",
 "text": text
 }
 ]
 },
 ];

 console.log(`Messages: ${messages.map((m) => m.content).join("\n")}`);

 const events = await client.streamChatCompletions(deploymentId, messages, { maxTokens: 128 });
 for await (const event of events) {
 for (const choice of event.choices) {
 const delta = choice.delta?.content;
 if (delta !== undefined) {
 run_callback(callback, [delta]);
 // console.log(`Chatbot: ${delta}`);
 }
 }
 }
}

main().catch((err) => {
 console.error("The sample encountered an error:", err);
});</l></block><list><block var="text"/><block var="vision"/><block var="delta_callback"/></list></block></script><scripts><script x="287.9615885416666" y="90.75000000000037"><block var="reply"/></script><script x="389.3734374999998" y="124.33333333333337"><block var="vision"/></script></scripts></block-definition></blocks><stage name="舞台" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="613"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="614"></list></costumes><sounds><list struct="atomic" id="615"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><watcher var="messages" style="normal" x="13.44537815126098" y="13.445378151260496" color="243,118,29" hidden="true"/><watcher var="test" style="normal" x="13.903098256699414" y="81.62036485060486" color="243,118,29" hidden="true"/><watcher var="reply" style="normal" x="5.561806469213196" y="10.157894917359275" color="243,118,29" hidden="true"/><sprite name="角色" idx="1" x="-205.00980823437578" y="-92.2730557396654" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="623"><costumes><list struct="atomic" id="624"></list></costumes><sounds><list struct="atomic" id="625"></list></sounds><blocks></blocks><variables></variables><scripts><script x="41.66666666666674" y="92.97222222222237"><custom-block s="create openai client %s"><l>sk-proj-mLikh953eAcxcng2URkwT3BlbkFJNkT8QUGyBdw0dey0L12m</l></custom-block></script><script x="42.50000000000007" y="13.472222222222262"><block s="doSetGlobalFlag"><l><option>video capture</option></l><l><bool>true</bool></l></block><block s="doSetVideoTransparency"><l>0</l></block></script><script x="46.66666666666674" y="148.1666666666669"><block s="receiveKey"><l><option>space</option></l><list></list></block><custom-block s="stream chat completions %br text %mlt %br vision %b %br callback %cmdRing"><l>你看到了什么</l><l><bool>true</bool></l><block s="reifyScript"><script><block s="bubble"><l></l></block></script><list></list></block></custom-block></script></scripts></sprite></sprites></stage><variables><variable name="_AnimatedText_font_color" hidden="true"><list struct="atomic" id="652">0,0,0,255</list></variable><variable name="_AnimatedText_font_text" hidden="true"><l>欢迎来到我的项目!</l></variable><variable name="_AnimatedText_line_width" hidden="true"><l>0</l></variable><variable name="_AnimatedText_font_size" hidden="true"><l>25</l></variable><variable name="messages"><l>0</l></variable><variable name="reply"><l>0</l></variable><variable name="test"><l>这张照片中,有一个人正用手拿着一个橘子。背景是一面墙和一个开关。照片的主体是橘子。</l></variable></variables></scene></scenes></project>