Ashhar commited on
Commit
31571b9
1 Parent(s): 1a5d173

format answers better

Browse files
Files changed (4) hide show
  1. .gitignore +1 -0
  2. app.py +17 -9
  3. constants.py +4 -1
  4. soup_dump.html +0 -1046
.gitignore CHANGED
@@ -5,3 +5,4 @@ __pycache__/
5
  gradio_cached_examples/
6
  app_*.py
7
  soup_dump*.html
 
 
5
  gradio_cached_examples/
6
  app_*.py
7
  soup_dump*.html
8
+ soup_dump.html
app.py CHANGED
@@ -43,8 +43,9 @@ MODEL_CONFIG: dict[ModelType, ModelConfig] = {
43
  "LLAMA": {
44
  "client": Groq(api_key=os.environ.get("GROQ_API_KEY")),
45
  "model": "llama-3.1-70b-versatile",
 
46
  "tools_model": "llama3-groq-70b-8192-tool-use-preview",
47
- "max_context": 128000,
48
  "tokenizer": AutoTokenizer.from_pretrained("Xenova/Meta-Llama-3.1-Tokenizer")
49
  }
50
  }
@@ -121,9 +122,9 @@ def __getMessages():
121
  return st.session_state.messages
122
 
123
 
124
- def __logLlmRequest(messagesFormatted: list):
125
  contextSize = __countTokens(messagesFormatted)
126
- U.pprint(f"{contextSize=} | {MODEL}")
127
  # U.pprint(f"{messagesFormatted=}")
128
 
129
 
@@ -256,14 +257,14 @@ def __getClaudeTools():
256
  return claudeTools
257
 
258
 
259
- def predict(model: str = None):
260
  model = model or MODEL
261
 
262
  messagesFormatted = []
263
  try:
264
  if isClaudeModel:
265
  messagesFormatted.extend(__getMessages())
266
- __logLlmRequest(messagesFormatted)
267
 
268
  responseMessage = client.messages.create(
269
  model=model,
@@ -282,7 +283,7 @@ def predict(model: str = None):
282
  else:
283
  messagesFormatted = [{"role": "system", "content": C.SYSTEM_MSG}]
284
  messagesFormatted.extend(__getMessages())
285
- __logLlmRequest(messagesFormatted)
286
 
287
  response = client.chat.completions.create(
288
  model=model,
@@ -296,8 +297,14 @@ def predict(model: str = None):
296
  responseContent = responseMessage.content
297
 
298
  if responseContent and '<function=' in responseContent:
299
- U.pprint("Switching to TOOLS_MODEL")
300
- return predict(TOOLS_MODEL)
 
 
 
 
 
 
301
  toolCalls = responseMessage.tool_calls
302
 
303
  # U.pprint(f"{responseMessage=}")
@@ -319,7 +326,7 @@ def predict(model: str = None):
319
  return responseContent
320
  except Exception as e:
321
  U.pprint(f"LLM API Error: {e}")
322
- return C.EXCEPTION_KEYWORD
323
 
324
 
325
  def __generateImage(prompt: str):
@@ -466,6 +473,7 @@ if prompt := (
466
 
467
  if jsonStr:
468
  try:
 
469
  json.loads(jsonStr)
470
  jsonObj = json.loads(jsonStr)
471
  questions = jsonObj.get("questions")
 
43
  "LLAMA": {
44
  "client": Groq(api_key=os.environ.get("GROQ_API_KEY")),
45
  "model": "llama-3.1-70b-versatile",
46
+ # "model": "llama-3.2-90b-text-preview",
47
  "tools_model": "llama3-groq-70b-8192-tool-use-preview",
48
+ "max_context": 12800, # intentionally reduced to 1/10th
49
  "tokenizer": AutoTokenizer.from_pretrained("Xenova/Meta-Llama-3.1-Tokenizer")
50
  }
51
  }
 
122
  return st.session_state.messages
123
 
124
 
125
+ def __logLlmRequest(messagesFormatted: list, model: str):
126
  contextSize = __countTokens(messagesFormatted)
127
+ U.pprint(f"{contextSize=} | {model}")
128
  # U.pprint(f"{messagesFormatted=}")
129
 
130
 
 
257
  return claudeTools
258
 
259
 
260
+ def predict(model: str = None, attempts=0):
261
  model = model or MODEL
262
 
263
  messagesFormatted = []
264
  try:
265
  if isClaudeModel:
266
  messagesFormatted.extend(__getMessages())
267
+ __logLlmRequest(messagesFormatted, model)
268
 
269
  responseMessage = client.messages.create(
270
  model=model,
 
283
  else:
284
  messagesFormatted = [{"role": "system", "content": C.SYSTEM_MSG}]
285
  messagesFormatted.extend(__getMessages())
286
+ __logLlmRequest(messagesFormatted, model)
287
 
288
  response = client.chat.completions.create(
289
  model=model,
 
297
  responseContent = responseMessage.content
298
 
299
  if responseContent and '<function=' in responseContent:
300
+ U.pprint(f"Wrong toolCall response: {responseContent}")
301
+ if attempts < 3:
302
+ U.pprint(f"Retrying...{attempts + 1}/3")
303
+ time.sleep(0.2)
304
+ return predict(model, attempts + 1)
305
+ else:
306
+ U.pprint("Switching to TOOLS_MODEL")
307
+ return predict(TOOLS_MODEL)
308
  toolCalls = responseMessage.tool_calls
309
 
310
  # U.pprint(f"{responseMessage=}")
 
326
  return responseContent
327
  except Exception as e:
328
  U.pprint(f"LLM API Error: {e}")
329
+ return f"{C.EXCEPTION_KEYWORD} | {e}"
330
 
331
 
332
  def __generateImage(prompt: str):
 
473
 
474
  if jsonStr:
475
  try:
476
+ jsonStr = jsonStr.replace("```", "")
477
  json.loads(jsonStr)
478
  jsonObj = json.loads(jsonStr)
479
  questions = jsonObj.get("questions")
constants.py CHANGED
@@ -5,10 +5,11 @@ EXCEPTION_KEYWORD = "<<EXCEPTION>>"
5
  SYSTEM_MSG = f"""
6
  => Instructions:
7
  You're a helpful assistant who tries to answer as accurately as possible. Always add supporting details wherever possible AFTER the primary answer.
 
8
  --------
9
 
10
  => Rules:
11
- - You ALWAYS search google and collect search results before answering.
12
  - You then read through all the google search results, give them extremely high importance, and then use it to generate the answer.
13
  - You then return the final answer (before Questions JSON) in this format (each point should be in a new line):
14
  {{Generated Answer}}
@@ -24,6 +25,8 @@ You're a helpful assistant who tries to answer as accurately as possible. Always
24
 
25
  => Response Format:
26
  - Don't tell how you arrived at the answer.
 
 
27
  - Append this exact keyword "{JSON_SEPARATOR}" to your FINAL response (after appending details and references, if any), and only AFTER this, append a JSON of possible Questions that the user might be interesed in (max 4) strictly in the format described below.
28
  ```
29
  {{
 
5
  SYSTEM_MSG = f"""
6
  => Instructions:
7
  You're a helpful assistant who tries to answer as accurately as possible. Always add supporting details wherever possible AFTER the primary answer.
8
+ You make full use of available tools.
9
  --------
10
 
11
  => Rules:
12
+ - You ALWAYS search google and collect search results before answering, unless it's a established fact.
13
  - You then read through all the google search results, give them extremely high importance, and then use it to generate the answer.
14
  - You then return the final answer (before Questions JSON) in this format (each point should be in a new line):
15
  {{Generated Answer}}
 
25
 
26
  => Response Format:
27
  - Don't tell how you arrived at the answer.
28
+ - Make full use of markdown to format the answer better, like sub-headings, bold, italics, etc
29
+ - Don't return "<function=getGoogleSearchResults>" in response content, instead send in tool call
30
  - Append this exact keyword "{JSON_SEPARATOR}" to your FINAL response (after appending details and references, if any), and only AFTER this, append a JSON of possible Questions that the user might be interesed in (max 4) strictly in the format described below.
31
  ```
32
  {{
soup_dump.html DELETED
@@ -1,1046 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en-IN">
3
- <head>
4
- <meta charset="utf-8"/>
5
- <meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"/>
6
- <title>
7
- streamlit app as pwa - Google Search
8
- </title>
9
- <script nonce="EK-zhWykiC0TIPIWA0_dDg">
10
- (function(){
11
- document.documentElement.addEventListener("submit",function(b){var a;if(a=b.target){var c=a.getAttribute("data-submitfalse");a=c==="1"||c==="q"&&!a.elements.q.value?!0:!1}else a=!1;a&&(b.preventDefault(),b.stopPropagation())},!0);document.documentElement.addEventListener("click",function(b){var a;a:{for(a=b.target;a&&a!==document.documentElement;a=a.parentElement)if(a.tagName==="A"){a=a.getAttribute("data-nohref")==="1";break a}a=!1}a&&b.preventDefault()},!0);}).call(this);(function(){window.google=window.google||{};var a=window.performance&&window.performance.timing&&"navigationStart"in window.performance.timing,b=google.stvsc&&google.stvsc.ns,c=a?b||window.performance.timing.navigationStart:void 0,d=google.stvsc&&google.stvsc.rs,f=a?d||window.performance.timing.responseStart:void 0;window.start=Date.now();var h=window,k=window.performance;k&&(c&&f&&f>c&&f<=window.start?(window.start=f,h.wsrt=f-c):k.now&&(h.wsrt=Math.floor(window.performance.now()-(google.stvsc&&google.stvsc.pno||0))));var l=function(g){g&&g.target.setAttribute("data-iml",String(Date.now()))};document.documentElement.addEventListener("load",l,!0);google.rglh=function(){document.documentElement.removeEventListener("load",l,!0)};}).call(this);(function(){window.google.erd={jsr:1,bv:2085,de:true,dpf:'Kbsvdm0NdusYk93G-FVyqob7MZY3ZlEkygPOkfwJIiY'};})();(function(){var sdo=false;var mei=10;
12
- var g=this||self;var k,l=(k=g.mei)!=null?k:1,n,p=(n=g.sdo)!=null?n:!0,q=0,r,t=google.erd,v=t.jsr;google.ml=function(a,b,d,m,e){e=e===void 0?2:e;b&&(r=a&&a.message);d===void 0&&(d={});d.cad="ple_"+google.ple+".aple_"+google.aple;if(google.dl)return google.dl(a,e,d,!0),null;b=d;if(v<0){window.console&&console.error(a,b);if(v===-2)throw a;b=!1}else b=!a||!a.message||a.message==="Error loading script"||q>=l&&!m?!1:!0;if(!b)return null;q++;d=d||{};b=encodeURIComponent;var c="/gen_204?atyp=i&ei="+b(google.kEI);google.kEXPI&&(c+="&jexpid="+b(google.kEXPI));c+="&srcpg="+b(google.sn)+"&jsr="+b(t.jsr)+
13
- "&bver="+b(t.bv);t.dpf&&(c+="&dpf="+b(t.dpf));var f=a.lineNumber;f!==void 0&&(c+="&line="+f);var h=a.fileName;h&&(h.indexOf("-extension:/")>0&&(e=3),c+="&script="+b(h),f&&h===window.location.href&&(f=document.documentElement.outerHTML.split("\n")[f],c+="&cad="+b(f?f.substring(0,300):"No script found.")));google.ple&&google.ple===1&&(e=2);c+="&jsel="+e;for(var u in d)c+="&",c+=b(u),c+="=",c+=b(d[u]);c=c+"&emsg="+b(a.name+": "+a.message);c=c+"&jsst="+b(a.stack||"N/A");c.length>=12288&&(c=c.substr(0,12288));a=c;m||google.log(0,"",a);return a};window.onerror=function(a,b,d,m,e){r!==a&&(a=e instanceof Error?e:Error(a),d===void 0||"lineNumber"in a||(a.lineNumber=d),b===void 0||"fileName"in a||(a.fileName=b),google.ml(a,!1,void 0,!1,a.name==="SyntaxError"||a.message.substring(0,11)==="SyntaxError"||a.message.indexOf("Script error")!==-1?3:0));r=null;p&&q>=l&&(window.onerror=null)};})();(function(){var c=[],e=0;window.ping=function(b){b.indexOf("&zx")==-1&&(b+="&zx="+Date.now());var a=new Image,d=e++;c[d]=a;a.onerror=a.onload=a.onabort=function(){delete c[d]};a.src=b};}).call(this);
14
- </script>
15
- <style>
16
- a{color:#1a0dab;text-decoration:none;tap-highlight-color:rgba(0,0,0,.10)}a:visited{color:#4b11a8}a:hover{text-decoration:underline}img{border:0}html{font-family:arial,sans-serif;font-size:14px;line-height:20px;text-size-adjust:100%;color:#3c4043;word-wrap:break-word;background-color:#fff}.bz1lBb{background-color:#fff;height:72px;}.KP7LCb{background-color:#fff;padding-left:4px}.BsXmcf{position:absolute;height:1px;left:0;right:0;background-color:#dadce0}.cOl4Id{background-color:#fff}.bRsWnc{overflow:hidden}.N6RWV{height:51px}.Uv67qb{font-size:14px;line-height:20px;font-weight:bold;display:flex}.Uv67qb a,.Uv67qb span{color:#5e5e5e;height:20px;margin:4px 12px 1px;display:block;flex:none;text-align:center;}.OXXup{border-bottom:2px solid #1f1f1f}.Uv67qb .OXXup{font-weight:bold;color:#1f1f1f}a.eZt8xd:visited{color:#5e5e5e}.FElbsf{border-left:1px solid #dadce0}header article{overflow:visible}.Pg70bf{height:39px;display:box;display:flex;display:flex;width:100%}.H0PQec{position:relative;flex:1}.Pg70bf{height:26px}.hlm7Y{height:46px;margin-top:26px;border-radius:25px;width:auto;background:#fff;box-shadow:0px 2px 6px rgba(60,64,67,0.16)}.sbc{display:flex}.Pg70bf input{}.x{width:26px;color:#70757a;line-height:40px;margin-top:3px;font:27px/38px arial, sans-serif}#qdClwb{flex:0 0 auto;padding:0;height:33px;margin-top:5px;border-top-right-radius:25px;border-bottom-right-radius:25px;width:48px;background:#fff;border:0;border-left:1px solid #dadce0;background-repeat:no-repeat;background-image:url(data:image/gif;base64,R0lGODlhJAAjAOYAAP////7+//v8//b5//z9//H2//T4/9Xl/uTu/+ry/+zz/+/1/1GX+1aa+1mc+1+f+2ml+3eu/H6y/IK0/IO1/Iq5/JG9/ZG9/JfB/Z3E/Z7F/Z/F/ajL/anL/azN/bjU/rrV/b3X/sHa/sPb/sTc/sbd/svg/tDj/tfn/tzq/t/s/+bw/+ny/+vz//X5//r8/w9x+RV1+Rd2+Rh3+Rl3+Rp3+Rp4+Rt4+Rt5+Rx5+R16+R56+R96+R97+SB7+SF8+SJ8+SJ9+SN9+SR9+SV++SeA+Sh/+SmA+SqB+SuB+iuB+SyC+S2C+jKF+jKG+jSH+jWH+jWI+jqK+jyL+j+N+kSQ+kWR+kaR+keS+kmT+k6W+lOZ+1Sa+1ab+1eb+1ec+1ic+1md+1qd+1ue+1ye+12f+16f+2el+2mm+2un+26p/HSt+3au/IS2/IW3/Ia3/Iq6/JK+/JbB/JfB/JjC/JrD/KLI/anM/arN/b/Z/cHa/d/s/uLu/ufx//3+/////yH5BAUAAH8ALAAAAAAkACMAAAf4gACCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmAAJeXEUGyUEmYIBGlRENTE7S2UmohM8PVVoaw1OMlMjlwIWQUdvCoIDJV47UCiWKU02c4YFWDRnoZQXNmAuhyJHUXyVZDYViC5ZQCCVWjN4iH5hMXaVEDNyiAtXQyGVdDMPL4cmTE0qKp1Q4gODoRdfZES45MbGEwwGBh0wIwTKiksGIvjowYANHDVTcBSxUofFpQBtpOSgEePGDy4kwsAY0wLTngwS0mTQc82DER1igIkq1AGJDgc1hxLqkCSHgwRKCd1JoqNLn6iDOAjZchWroA8IvIodS7as2bOWAgEAOw==)}.sc{font-size:16px;position:absolute;top:48px;left:0;right:0;box-shadow:0 2px 5px rgba(0,0,0,.2);z-index:2;background-color:#fff}.sc>div{padding:10px 20px}.scs{background-color:#fafafa;}.noHIxc{display:block;font-size:16px;padding:0 0 0 8px;flex:1;height:35px;outline:none;border:none;width:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:hidden;padding:4px 0 0 20px}.sbc input[type=text]{background:none}html{background-color:#fff;}body{padding:0;}body{margin:0 auto 0 156px;max-width:652px;min-width:652px;padding:0 8px}.cOl4Id{letter-spacing:-1px;text-align:center;font:22pt Futura, arial,sans-serif;font-smoothing:antialiased;padding:32px 28px 0 24px;position:absolute;left:0;top:0;height:37px}.cOl4Id span{display:inline-block}.V6gwVd{color:#4285f4}.iWkuvd{color:#ea4335}.cDrQ7{color:#fcc934}.ntlR9{color:#34a853}.tJ3Myc{-webkit-transform:rotate(-20deg);position:relative;left:-1px;display:inline-block}footer{text-align:center;margin-top:18px}footer a,footer a:visited,.smiUbb{color:#70757a}.xeDNfc{margin:0 13px;display:inline-block}#EOlPnc{margin-top:36px}#EOlPnc>div{margin:20px}.Srfpq{color:#70757a}
17
- </style>
18
- </head>
19
- <body jsmodel="hspDDf ">
20
- <header id="hdr">
21
- <script nonce="EK-zhWykiC0TIPIWA0_dDg">
22
- (function(){
23
- var k=this||self,l=function(a){var b=typeof a;return b=="object"&&a!=null||b=="function"},m=function(a,b){function c(){}c.prototype=b.prototype;a.l=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.s=function(d,e,f){for(var g=Array(arguments.length-2),h=2;h<arguments.length;h++)g[h-2]=arguments[h];return b.prototype[e].apply(d,g)}};var n=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if(typeof a==="string")return typeof b!=="string"||b.length!=1?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};var p=function(a){return typeof a.className=="string"?a.className:a.getAttribute&&a.getAttribute("class")||""},q=function(a,b){typeof a.className=="string"?a.className=b:a.setAttribute&&a.setAttribute("class",b)},r=function(a,b){a.classList?b=a.classList.contains(b):(a=a.classList?a.classList:p(a).match(/\S+/g)||[],b=n(a,b)>=0);return b},v=function(){var a=t,b=u;a.classList?a.classList.remove(b):r(a,b)&&q(a,Array.prototype.filter.call(a.classList?a.classList:p(a).match(/\S+/g)||[],function(c){return c!=
24
- b}).join(" "))};var w=function(a,b){this.type=a;this.target=b};w.prototype.g=function(){};var x=function(){if(!k.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{var c=function(){};k.addEventListener("test",c,b);k.removeEventListener("test",c,b)}catch(d){}return a}();var y=function(a){w.call(this,a?a.type:"");this.relatedTarget=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.keyCode=0;this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;if(a){var b=this.type=a.type,c=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;var d=a.relatedTarget;d||(b=="mouseover"?d=a.fromElement:b=="mouseout"&&(d=a.toElement));this.relatedTarget=d;c?(this.clientX=c.clientX!==void 0?c.clientX:c.pageX,this.clientY=c.clientY!==void 0?c.clientY:c.pageY,this.screenX=c.screenX||0,this.screenY=c.screenY||0):(this.clientX=a.clientX!==void 0?a.clientX:a.pageX,this.clientY=a.clientY!==void 0?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.keyCode=a.keyCode||0;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.pointerId=
25
- a.pointerId||0;this.pointerType=a.pointerType;this.state=a.state;this.i=a;a.defaultPrevented&&y.l.g.call(this)}};m(y,w);y.prototype.g=function(){y.l.g.call(this);var a=this.i;a.preventDefault?a.preventDefault():a.returnValue=!1};var z="closure_listenable_"+(Math.random()*1E6|0);var A=0;var B=function(a,b,c,d,e){this.listener=a;this.proxy=null;this.src=b;this.type=c;this.capture=!!d;this.i=e;this.key=++A;this.g=this.j=!1},C=function(a){a.g=!0;a.listener=null;a.proxy=null;a.src=null;a.i=null};var D=function(a){this.src=a;this.g={};this.i=0};D.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.g[f];a||(a=this.g[f]=[],this.i++);var g;a:{for(g=0;g<a.length;++g){var h=a[g];if(!h.g&&h.listener==b&&h.capture==!!d&&h.i==e)break a}g=-1}g>-1?(b=a[g],c||(b.j=!1)):(b=new B(b,this.src,f,!!d,e),b.j=c,a.push(b));return b};var E="closure_lm_"+(Math.random()*1E6|0),F={},G=0,I=function(a,b,c,d,e){if(d&&d.once)return H(a,b,c,d,e);if(Array.isArray(b)){for(var f=0;f<b.length;f++)I(a,b[f],c,d,e);return null}c=J(c);return a&&a[z]?a.g(b,c,l(d)?!!d.capture:!!d,e):K(a,b,c,!1,d,e)},K=function(a,b,c,d,e,f){if(!b)throw Error("a");var g=l(e)?!!e.capture:!!e,h=L(a);h||(a[E]=h=new D(a));c=h.add(b,c,d,g,f);if(c.proxy)return c;d=M();c.proxy=d;d.src=a;d.listener=c;if(a.addEventListener)x||(e=g),e===void 0&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(N(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("b");G++;return c},M=function(){var a=O,b=function(c){return a.call(b.src,b.listener,c)};return b},H=function(a,b,c,d,e){if(Array.isArray(b)){for(var f=0;f<b.length;f++)H(a,b[f],c,d,e);return null}c=J(c);return a&&a[z]?a.i(b,c,l(d)?!!d.capture:!!d,e):K(a,b,c,!0,d,e)},P=function(a){if(typeof a!=="number"&&a&&!a.g){var b=a.src;if(b&&b[z])b.v(a);else{var c=a.type,d=a.proxy;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(N(c),d):b.addListener&&b.removeListener&&b.removeListener(d);G--;if(c=L(b)){d=a.type;if(d in c.g){var e=c.g[d],f=n(e,a),g;(g=f>=0)&&Array.prototype.splice.call(e,f,1);g&&(C(a),c.g[d].length==0&&(delete c.g[d],c.i--))}c.i==0&&(c.src=null,b[E]=null)}else C(a)}}},N=function(a){return a in F?F[a]:F[a]="on"+a},O=function(a,b){if(a.g)a=!0;else{b=new y(b,this);var c=a.listener,d=a.i||a.src;a.j&&P(a);a=c.call(d,b)}return a},L=function(a){a=a[E];return a instanceof D?a:null},Q="__closure_events_fn_"+(Math.random()*1E9>>>0),J=function(a){if(typeof a==="function")return a;a[Q]||(a[Q]=function(b){return a.handleEvent(b)});return a[Q]};var R=[9],u,t=document.documentElement,S;function T(){P(S);S=H(t,"mousedown",function(){v();U()},{capture:!0})}function U(){P(S);S=I(t,"keydown",function(a){if(R.indexOf(a.keyCode)!==-1){a=t;var b=u;if(a.classList)a.classList.add(b);else if(!r(a,b)){var c=p(a);q(a,c+(c.length>0?" "+b:b))}T()}})};u="zAoYTe";U();}).call(this);
26
- </script>
27
- <div class="cOl4Id">
28
- <a href="/?sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQOwgC">
29
- <span class="V6gwVd">
30
- G
31
- </span>
32
- <span class="iWkuvd">
33
- o
34
- </span>
35
- <span class="cDrQ7">
36
- o
37
- </span>
38
- <span class="V6gwVd">
39
- g
40
- </span>
41
- <span class="ntlR9">
42
- l
43
- </span>
44
- <span class="iWkuvd tJ3Myc">
45
- e
46
- </span>
47
- </a>
48
- </div>
49
- <div class="bz1lBb">
50
- <form class="Pg70bf hlm7Y" id="sf">
51
- <input name="sca_esv" type="hidden" value="1ddba70af590f790"/>
52
- <input name="sca_upv" type="hidden" value="1"/>
53
- <input name="ie" type="hidden" value="ISO-8859-1"/>
54
- <div class="H0PQec">
55
- <div class="sbc esbc">
56
- <input autocapitalize="none" autocomplete="off" class="noHIxc" name="q" spellcheck="false" type="text" value="streamlit app as pwa"/>
57
- <input name="oq" type="hidden"/>
58
- <input name="aqs" type="hidden"/>
59
- <div class="x">
60
- ×
61
- </div>
62
- <div class="sc">
63
- </div>
64
- </div>
65
- </div>
66
- <button id="qdClwb" type="submit">
67
- </button>
68
- </form>
69
- </div>
70
- <noscript>
71
- <meta content="0;url=/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;gbv=1&amp;sei=hw31ZreEKpDL1sQPt4GgkAg" http-equiv="refresh"/>
72
- <style>
73
- table,div,span,p{display:none}
74
- </style>
75
- <div style="display:block">
76
- Please click
77
- <a href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;gbv=1&amp;sei=hw31ZreEKpDL1sQPt4GgkAg">
78
- here
79
- </a>
80
- if you are not redirected within a few seconds.
81
- </div>
82
- </noscript>
83
- </header>
84
- <div id="main">
85
- <div>
86
- <div class="KP7LCb">
87
- <div class="bRsWnc">
88
- <div class="N6RWV">
89
- <div class="Pg70bf Uv67qb">
90
- <span class="OXXup">
91
- All
92
- </span>
93
- <a class="eZt8xd" href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;tbm=vid&amp;source=lnms&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ_AUIBigB">
94
- Videos
95
- </a>
96
- <a class="eZt8xd" href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;tbm=nws&amp;source=lnms&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ_AUIBygC">
97
- News
98
- </a>
99
- <a class="eZt8xd" href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;tbm=isch&amp;source=lnms&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ_AUICCgD">
100
- Images
101
- </a>
102
- <a href="/url?q=https://maps.google.com/maps%3Fq%3Dstreamlit%2Bapp%2Bas%2Bpwa%26um%3D1%26ie%3DUTF-8%26ved%3D1t:200713%26ictx%3D111&amp;opi=89978449&amp;sa=U&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQiaAMCAkoBA&amp;usg=AOvVaw04OnpCNHkORBa2VfnR9fMP">
103
- Maps
104
- </a>
105
- <a href="/url?q=/search%3Fq%3Dstreamlit%2Bapp%2Bas%2Bpwa%26sca_esv%3D1ddba70af590f790%26sca_upv%3D1%26ie%3DUTF-8%26tbm%3Dshop%26source%3Dlnms%26ved%3D1t:200713%26ictx%3D111&amp;opi=89978449&amp;sa=U&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQiaAMCAooBQ&amp;usg=AOvVaw01EdmxHaK-NwC_X6X2mNkI">
106
- Shopping
107
- </a>
108
- <a href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;tbm=bks&amp;source=lnms&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ_AUICygG">
109
- Books
110
- </a>
111
- <div class="FElbsf">
112
- <a href="/advanced_search" id="st-toggle" role="button" style="white-space:nowrap">
113
- Search tools
114
- </a>
115
- </div>
116
- </div>
117
- </div>
118
- </div>
119
- </div>
120
- <div class="Pg70bf wEsjbd Gx5Zad xpd EtOod pkphOe" id="st-card" style="display:none">
121
- <style>
122
- .wEsjbd{height:44px;white-space:nowrap}.coPU8c{height:60px;overflow-scrolling:touch;overflow-x:auto;overflow-y:hidden}.Xj2aue{height:44px;overflow:hidden}.RnNGze{margin:11px 16px}.wEsjbd div,.wEsjbd a,.wEsjbd li{outline-width:0;outline:none}
123
- </style>
124
- <div class="Xj2aue">
125
- <div class="coPU8c">
126
- <div class="RnNGze">
127
- <style>
128
- .PA9J5{display:inline-block}.RXaOfd,.tbcPJb{display:inline-block;height:22px;position:relative;padding-top:0;padding-bottom:0;padding-right:16px;padding-left:0;line-height:22px;cursor:pointer;text-transform:uppercase;font-size:12px;color:#70757a}.sa1toc{background:#fff;display:none;position:absolute;border:1px solid #dadce0;box-shadow:0 2px 4px rgba(0,0,0,.3);margin:0;white-space:nowrap;z-index:103;line-height:17px;padding-top:5px;padding-bottom:5px;padding-left:0}.PA9J5:hover .sa1toc{display:block}.mGSy8d a:active,.RXaOfd:active{color:#4285f4}
129
- </style>
130
- <div class="PA9J5">
131
- <div class="RXaOfd" role="button" tabindex="0">
132
- <style>
133
- .TWMOUc{display:inline-block;padding-right:14px;white-space:nowrap}.vQYuGf{font-weight:bold}.OmTIzf{border-color:#909090 transparent;border-style:solid;border-width:4px 4px 0 4px;width:0;height:0;margin-left:-10px;top:50%;margin-top:-2px;position:absolute}.RXaOfd:active .OmTIzf{border-color:#4285f4 transparent}
134
- </style>
135
- <div class="TWMOUc">
136
- Any time
137
- </div>
138
- <span class="OmTIzf">
139
- </span>
140
- </div>
141
- <ul class="sa1toc ozatM">
142
- <style>
143
- .ozatM{font-size:12px;text-transform:uppercase}.ozatM .yNFsl,.ozatM li{list-style-type:none;list-style-position:outside;list-style-image:none}.yNFsl.SkUj4c,.yNFsl a{color:#70757a;text-decoration:none;padding:6px 44px 6px 14px;line-height:17px;display:block}.SkUj4c{background-image:url(//ssl.gstatic.com/ui/v1/menu/checkmark2.png);background-position:right center;background-repeat:no-repeat}.SkUj4c:active{background-color:#f8f9fa}
144
- </style>
145
- <li class="yNFsl SkUj4c">
146
- <style>
147
- .tbcPJb a{color:#70757a;text-decoration:none}
148
- </style>
149
- Any time
150
- </li>
151
- <li class="yNFsl">
152
- <a href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;source=lnt&amp;tbs=qdr:h&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQpwUIDQ">
153
- Past hour
154
- </a>
155
- </li>
156
- <li class="yNFsl">
157
- <a href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;source=lnt&amp;tbs=qdr:d&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQpwUIDg">
158
- Past 24 hours
159
- </a>
160
- </li>
161
- <li class="yNFsl">
162
- <a href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;source=lnt&amp;tbs=qdr:w&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQpwUIDw">
163
- Past week
164
- </a>
165
- </li>
166
- <li class="yNFsl">
167
- <a href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;source=lnt&amp;tbs=qdr:m&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQpwUIEA">
168
- Past month
169
- </a>
170
- </li>
171
- <li class="yNFsl">
172
- <a href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;source=lnt&amp;tbs=qdr:y&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQpwUIEQ">
173
- Past year
174
- </a>
175
- </li>
176
- </ul>
177
- </div>
178
- <div class="PA9J5">
179
- <div class="RXaOfd" role="button" tabindex="0">
180
- <div class="TWMOUc">
181
- All results
182
- </div>
183
- <span class="OmTIzf">
184
- </span>
185
- </div>
186
- <ul class="sa1toc ozatM">
187
- <li class="yNFsl SkUj4c">
188
- All results
189
- </li>
190
- <li class="yNFsl">
191
- <a href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;source=lnt&amp;tbs=li:1&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQpwUIEw">
192
- Verbatim
193
- </a>
194
- </li>
195
- </ul>
196
- </div>
197
- </div>
198
- </div>
199
- </div>
200
- <script nonce="EK-zhWykiC0TIPIWA0_dDg">
201
- (function(){var a=document.getElementById("st-toggle"),b=document.getElementById("st-card");a&&b&&a.addEventListener("click",function(c){b.style.display=b.style.display?"":"none";c.preventDefault()},!1);}).call(this);
202
- </script>
203
- </div>
204
- </div>
205
- <div class="BsXmcf">
206
- </div>
207
- <style>
208
- .Gx5Zad{margin-bottom:30px;margin:0px 0px 8px;}.pkphOe{font-size:14px;line-height:22px;}.EtOod>*:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.EtOod>*:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.EtOod.avPKgf>*:last-child{border-bottom-left-radius:4px}.rl7ilb{display:block;clear:both}.egMi0{margin-bottom:-23px}.kCrYT{padding:16px 14px 12px}a.fdYsqf{color:#4b11a8}.sCuL3{position:absolute;width:100%;top:0;left:0;padding-top:1px;margin-bottom:-1px}.j039Wc{padding-top:28px;margin-bottom:-1px}.DnJfK{position:relative}.l97dzf{font-weight:400}.zBAuLc{line-height:normal;margin:0;padding:0}.BNeawe{white-space:pre-line;word-wrap:break-word}.vvjwJb{color:#1a0dab;font-size:20px;line-height:26px}a:visited .vvjwJb,.vvjwJb a:visited{color:#4b11a8}.vvjwJb.HrGdeb{color:#fff}a:visited .vvjwJb.HrGdeb,.vvjwJb.HrGdeb a:visited{color:rgba(255,255,255,.70)}.UPmit{font-size:14px;line-height:22px}.UPmit.HrGdeb{color:rgba(255,255,255,.70)}.UPmit.AP7Wnd{color:#202124}.lRVwie{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Ap5OSd{padding-bottom:12px}.s3v9rd{font-size:14px;line-height:22px}.s3v9rd.HrGdeb{color:#fff}.s3v9rd.AP7Wnd{color:#202124}.mSx1Ee{padding-left:48px;margin:0}.v9i61e{padding-bottom:8px}.r0bn4c.tr0dw{color:rgba(255,255,255,.70)}.r0bn4c.rQMQod{color:#70757a}.K8tyEc{padding-bottom:12px}.mEUgP{font-size:20px;font-weight:bold;line-height:26px;color:#1f1f1f;height:14px;padding:16px 14px 0px 14px;margin:0}.FCUp0c{font-weight:bold}.nRlVm .FCUp0c{background-color:#d3e3fd;color:#040c28}.C7GS5b{margin-left:12px;display:table-cell;vertical-align:middle}.rkGIWe{padding:14px}.rxk4ae{padding-top:6px;padding-bottom:6px}.xpc .hwc,.xpx .hwx{display:none}.iIWm4b{box-sizing:border-box;min-height:48px}.fLtXsc{padding:14px;position:relative}.NtmAdb{width:40px;height:40px;overflow:hidden;margin-top:-10px;margin-bottom:-16px;margin-right:8px;border-radius:4px}.xpc .NtmAdb{display:inline-block}.xpx .NtmAdb{display:none}.Lt3Tzc{display:inline-block;padding-right:26px;color:#474747;font-size:16px}.Lym8W{width:14px;height:20px;position:relative;margin:0 auto}.xCgLUe{position:absolute;margin-top:-10px;top:50%;margin-right:-4px}.Lym8W div{position:absolute;border-left:7px solid transparent;border-right:7px solid transparent;width:0;height:0;left:0}.IyYaEd{top:7px;border-top:7px solid #70757a}.ECUHQe{top:4px;border-top:7px solid #fff}.AeQQub{bottom:7px;border-bottom:7px solid #70757a}.YCU7eb{bottom:4px;border-bottom:7px solid #fff}.v7Y0Ge{background-color:#f7f8f9;padding:10px;width:14px;height:15px;right:14px;margin-top:-18px;top:50%;position:absolute;border-radius:50%}.WZP0ub{display:inline-block;margin-left:5px;margin-top:-6px}.qxDOhb{border-radius:0}.EtOod>.qxDOhb>*:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.EtOod>.qxDOhb>*:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.yStFkb .xpd{box-shadow:none;border-radius:16px;background-color:#f7f8f9;}.oTWEpb{padding-top:16px}.n1Qedd{overflow:hidden;text-align:center}.KMAGC{margin:0 auto;display:block}.ho0sdc{margin:0 -50%;display:inline-block}.PqksIc{font-size:16px;line-height:20px}.x54gtf{height:1px;background-color:#dadce0;margin:0 14px}.Q0HXG{height:1px;background-color:#dadce0;}.Xb5VRe{color:#1a0dab}a:visited .Xb5VRe{color:#4b11a8}.Xb5VRe.tr0dw{color:#fff}a:visited .Xb5VRe.tr0dw{color:rgba(255,255,255,.70)}.P1NWSe{display:table;width:100%;padding-top:16px;padding-bottom:16px;margin-bottom:-12px}.wOMIed{display:table-cell;vertical-align:top}.nkPlDb{vertical-align:middle}.JhFlyf{color:#3c4043;font-size:14px;text-align:center}.VQFmSd{display:block;white-space:pre-line;word-wrap:break-word}.JhFlyf.VQFmSd{line-height:22px}.f4J0H{padding:18px}.ZTv9Bb{display:block}.nVTMpe{border-radius:8px}.deIvCb{font-size:16px;line-height:20px;font-weight:400}.deIvCb.HrGdeb{color:#fff}.deIvCb.AP7Wnd{color:#202124}.X7NTVe{display:table;width:100%;padding-right:14px;box-sizing:border-box}.tHmfQe{display:table-cell;padding:16px 0 12px 14px}.UHtrk{width:72px}.HBTM6d{width:30px}.XS7yGd{display:table-cell;text-align:center;vertical-align:middle;padding:16px 0 12px 8px}.am3QBf{display:table;vertical-align:top}.pkr8ib{display:table-cell;min-width:40px;padding-right:8px}.uEec3{font-size:12px;line-height:16px}.uEec3.HrGdeb{color:rgba(255,255,255,.70)}.uEec3.AP7Wnd{color:#70757a}.aJyiOc{color:#202124}.XLloXe{color:#1a0dab;font-size:14px;line-height:20px}a:visited .XLloXe,.XLloXe a:visited{color:#4b11a8}.XLloXe.HrGdeb{color:#fff}a:visited .XLloXe.HrGdeb,.XLloXe.HrGdeb a:visited{color:rgba(255,255,255,.70)}.lcJF1d{border-radius:8px;margin-left:14px;float:right;}.h1hFNe{display:inline-block;position:relative}.Q6Xouf{overflow:hidden}.G6SP0b{display:inline-block}.eeoFaf{position:relative}.oz9fhd{background-color:rgba(0,0,0,.12)}.S9HcI{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.UhWgBb{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAQAAAD9CzEMAAABl0lEQVR4Ae2XveraUBiHY4xD3URx8F+9gHZW9EKEOgi9Cz8uQFtXiwRsobvgIoLXIfYCKrqoaadCk+Xp4HiSc15PQkvB512FB37xvB/Ok/8BXDqMWXMgICIi4MCaEW1cHFOZftBgxpkkTnygbi+osiTCRIhPxUbQ5wdSAnqPCQp84VF8PKmgyA4bthQlggI7bNnimQWfSYNvEvRJyzudoMpP0nKjnCxYkgWLJEFD+6ze8wsZIS/xghk6HN7wDRnTOIHLGR33F/IVCUdyqqCDHudewqhaqmAsEwijGqqCtUwgjGqlCg4ygTCqvSoIZAJhVFdVEMkEwqjCvyiwj+gt8oiy/8j/4G86QosSjZ6BKmhn2iqaqsDllFmz+x7X7Bw+ouMejYxJ/DyoZzRwflNLGpk+WTBPnskVAtJyoaRbW3qkpWtavHzS8Mm82XlssWVDXrb82ik2vJKu7x6+RTj5xw6QHjekXOjanFBlFoSCZzWnZH8EvmbKUdNzJtQER6ChXFoMWbHnSkjIlT0rBjTJyc/Y7OspkNYf1H6eRU02jH0AAAAASUVORK5CYII=);background-repeat:no-repeat;background-position:center}.oyqqef{background:rgba(32, 33, 36, 0.5);position:absolute;border-radius:4px;padding:2px 6px}.gGQDvd{position:relative;padding:20px 14px 14px 14px;height:60px;}.Q71vJc{display:block;position:relative;width:100%}.kjGX2{position:absolute;vertical-align:bottom;display:inline-block;right:48px;left:0;color:#4d5156;}.Xe4YD{font-size:16px}.ieB2Dd{overflow:hidden;margin-top:-10px;margin-bottom:-16px;margin-right:8px;border-radius:4px;display:inline-block;border-radius:50%;padding:8px 7px 8px 9px;background-color:#f7f8f9;}.toMBf{position:absolute;right:0;margin-right:-8px;margin-top:-2px}.OEaqif{width:20px;height:20px;display:block}.RJI4s{vertical-align:middle}.sRN2ub,.OcpZAb{padding-top:16px;padding-bottom:12px}.MlK5cf{padding-left:14px;}.J094Fd,.OcpZAb,.ZXY5Ec,.RQNVx{padding-left:14px;padding-right:14px;}.ZXY5Ec{padding-bottom:12px}.RQNVx{padding-top:12px}.nMymef{display:flex}.G5eFlf{flex:1;display:block}.nMymef span{text-align:center}.EYqSq{margin:6px 4px 9px 0;border-radius:100%;display:inline-block;height:10px;vertical-align:middle;width:10px}.dfB0uf{color:#3c4043;font-weight:bold}.IffyKc{word-wrap:break-word}
209
- </style>
210
- <div>
211
- </div>
212
- <div>
213
- <div class="Gx5Zad xpd EtOod pkphOe">
214
- <div class="egMi0 kCrYT">
215
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAoQAg" href="/url?q=https://discuss.streamlit.io/t/how-to-make-a-pwa-with-streamlit/10369&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAoQAg&amp;usg=AOvVaw1Iq9cnFzURnBLiQjEa_Z_V">
216
- <div class="DnJfK">
217
- <div class="j039Wc">
218
- <h3 class="zBAuLc l97dzf">
219
- <div class="BNeawe vvjwJb AP7Wnd">
220
- How to make a PWA with streamlit
221
- </div>
222
- </h3>
223
- </div>
224
- <div class="sCuL3">
225
- <div class="BNeawe UPmit AP7Wnd lRVwie">
226
- discuss.streamlit.io › how-to-make-a-pwa-with-streamlit
227
- </div>
228
- </div>
229
- </div>
230
- </a>
231
- </div>
232
- <div class="kCrYT">
233
- <div>
234
- <div class="BNeawe s3v9rd AP7Wnd">
235
- <div>
236
- <div>
237
- <div class="BNeawe s3v9rd AP7Wnd">
238
- <span class="r0bn4c rQMQod">
239
- 2 Mar 2021
240
- </span>
241
- <span class="r0bn4c rQMQod">
242
- ·
243
- </span>
244
- There is no way currently to make a PWA from a Streamlit app, as Streamlit requires having an open websocket connection between the Python backend and ...
245
- </div>
246
- </div>
247
- </div>
248
- </div>
249
- </div>
250
- </div>
251
- </div>
252
- </div>
253
- <div>
254
- <div class="Gx5Zad xpd EtOod pkphOe">
255
- <div class="egMi0 kCrYT">
256
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAgQAg" href="/url?q=https://discuss.streamlit.io/t/streamlit-pwa/63275&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAgQAg&amp;usg=AOvVaw3kW79cIzntgmfvc8bAedA0">
257
- <div class="DnJfK">
258
- <div class="j039Wc">
259
- <h3 class="zBAuLc l97dzf">
260
- <div class="BNeawe vvjwJb AP7Wnd">
261
- Streamlit PWA
262
- </div>
263
- </h3>
264
- </div>
265
- <div class="sCuL3">
266
- <div class="BNeawe UPmit AP7Wnd lRVwie">
267
- discuss.streamlit.io › streamlit-pwa
268
- </div>
269
- </div>
270
- </div>
271
- </a>
272
- </div>
273
- <div class="kCrYT">
274
- <div>
275
- <div class="BNeawe s3v9rd AP7Wnd">
276
- <div>
277
- <div>
278
- <div class="BNeawe s3v9rd AP7Wnd">
279
- <span class="r0bn4c rQMQod">
280
- 26 Feb 2024
281
- </span>
282
- <span class="r0bn4c rQMQod">
283
- ·
284
- </span>
285
- Is it possible to do this with streamlit Pwa? I saw earlier in 2021 that this did not happen. Is there any news from this time?
286
- </div>
287
- </div>
288
- </div>
289
- </div>
290
- </div>
291
- </div>
292
- </div>
293
- </div>
294
- <div data-hveid="CAQQAA">
295
- <div class="Gx5Zad xpd EtOod pkphOe">
296
- <div class="K8tyEc">
297
- <div class="mEUgP">
298
- <span>
299
- <div class="BNeawe">
300
- <span class="FCUp0c rQMQod">
301
- People also ask
302
- </span>
303
- </div>
304
- </span>
305
- </div>
306
- </div>
307
- <div>
308
- <div class="rxk4ae xpc">
309
- <div class="duf-h">
310
- <div aria-expanded="false" class="fLtXsc iIWm4b" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQuk56BAgEEAI" id="tsuid_1" role="button" tabindex="0">
311
- <div class="Lt3Tzc">
312
- How do I deploy Streamlit app to the Internet?
313
- </div>
314
- <div class="v7Y0Ge">
315
- <div class="Lym8W xCgLUe">
316
- <div class="AeQQub hwc">
317
- </div>
318
- <div class="YCU7eb hwc">
319
- </div>
320
- <div class="IyYaEd hwx">
321
- </div>
322
- <div class="ECUHQe hwx">
323
- </div>
324
- </div>
325
- </div>
326
- </div>
327
- </div>
328
- <div class="qxDOhb" id="accdef_1">
329
- </div>
330
- </div>
331
- </div>
332
- <div class="x54gtf">
333
- </div>
334
- <div>
335
- <div class="rxk4ae xpc">
336
- <div class="duf-h">
337
- <div aria-expanded="false" class="fLtXsc iIWm4b" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQuk56BAgEEAk" id="tsuid_2" role="button" tabindex="0">
338
- <div class="Lt3Tzc">
339
- Is Streamlit good for web development?
340
- </div>
341
- <div class="v7Y0Ge">
342
- <div class="Lym8W xCgLUe">
343
- <div class="AeQQub hwc">
344
- </div>
345
- <div class="YCU7eb hwc">
346
- </div>
347
- <div class="IyYaEd hwx">
348
- </div>
349
- <div class="ECUHQe hwx">
350
- </div>
351
- </div>
352
- </div>
353
- </div>
354
- </div>
355
- <div class="qxDOhb" id="accdef_3">
356
- </div>
357
- </div>
358
- </div>
359
- <div class="x54gtf">
360
- </div>
361
- <div>
362
- <div class="rxk4ae xpc">
363
- <div class="duf-h">
364
- <div aria-expanded="false" class="fLtXsc iIWm4b" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQuk56BAgEEBA" id="tsuid_3" role="button" tabindex="0">
365
- <div class="Lt3Tzc">
366
- Can PWA replace mobile apps?
367
- </div>
368
- <div class="v7Y0Ge">
369
- <div class="Lym8W xCgLUe">
370
- <div class="AeQQub hwc">
371
- </div>
372
- <div class="YCU7eb hwc">
373
- </div>
374
- <div class="IyYaEd hwx">
375
- </div>
376
- <div class="ECUHQe hwx">
377
- </div>
378
- </div>
379
- </div>
380
- </div>
381
- </div>
382
- <div class="qxDOhb" id="accdef_5">
383
- </div>
384
- </div>
385
- </div>
386
- <div class="x54gtf">
387
- </div>
388
- <div>
389
- <div class="rxk4ae xpc">
390
- <div class="duf-h">
391
- <div aria-expanded="false" class="fLtXsc iIWm4b" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQuk56BAgEEBc" id="tsuid_4" role="button" tabindex="0">
392
- <div class="Lt3Tzc">
393
- How do I create a Web page using Streamlit?
394
- </div>
395
- <div class="v7Y0Ge">
396
- <div class="Lym8W xCgLUe">
397
- <div class="AeQQub hwc">
398
- </div>
399
- <div class="YCU7eb hwc">
400
- </div>
401
- <div class="IyYaEd hwx">
402
- </div>
403
- <div class="ECUHQe hwx">
404
- </div>
405
- </div>
406
- </div>
407
- </div>
408
- </div>
409
- <div class="qxDOhb" id="accdef_7">
410
- </div>
411
- </div>
412
- </div>
413
- </div>
414
- </div>
415
- <div>
416
- <div class="Gx5Zad xpd EtOod pkphOe">
417
- <div class="egMi0 kCrYT">
418
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAsQAg" href="/url?q=https://streamlit.io/&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAsQAg&amp;usg=AOvVaw0Fyv3y6wt2rTg4YJ7__6Jc">
419
- <div class="DnJfK">
420
- <div class="j039Wc">
421
- <h3 class="zBAuLc l97dzf">
422
- <div class="BNeawe vvjwJb AP7Wnd">
423
- Streamlit • A faster way to build and share data apps
424
- </div>
425
- </h3>
426
- </div>
427
- <div class="sCuL3">
428
- <div class="BNeawe UPmit AP7Wnd lRVwie">
429
- streamlit.io
430
- </div>
431
- </div>
432
- </div>
433
- </a>
434
- </div>
435
- <div class="kCrYT">
436
- <div>
437
- <div class="BNeawe s3v9rd AP7Wnd">
438
- <div>
439
- <div class="v9i61e">
440
- <div class="BNeawe s3v9rd AP7Wnd">
441
- Streamlit turns data scripts into shareable web apps in minutes. All in pure Python. No front-end experience required.
442
- </div>
443
- </div>
444
- <div>
445
- <div class="BNeawe s3v9rd AP7Wnd">
446
- <span class="BNeawe">
447
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ0gJ6BAgLEAU" href="/url?q=https://streamlit.io/gallery&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ0gJ6BAgLEAU&amp;usg=AOvVaw0fw2UuREQ0iy70JJ776xfX">
448
- <span class="XLloXe AP7Wnd">
449
- App Gallery
450
- </span>
451
- </a>
452
- </span>
453
- ·
454
- <span class="BNeawe">
455
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ0gJ6BAgLEAY" href="/url?q=https://docs.streamlit.io/get-started/fundamentals/main-concepts&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ0gJ6BAgLEAY&amp;usg=AOvVaw37vzAdgIwwoHjRv5DWr7pK">
456
- <span class="XLloXe AP7Wnd">
457
- Basic concepts of Streamlit
458
- </span>
459
- </a>
460
- </span>
461
- ·
462
- <span class="BNeawe">
463
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ0gJ6BAgLEAc" href="/url?q=https://streamlit.io/become-a-creator&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ0gJ6BAgLEAc&amp;usg=AOvVaw2zDmlc6xOd5RyTwxndc26s">
464
- <span class="XLloXe AP7Wnd">
465
- Become a Streamlit Creator
466
- </span>
467
- </a>
468
- </span>
469
- ·
470
- <span class="BNeawe">
471
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ0gJ6BAgLEAg" href="/url?q=https://discuss.streamlit.io/&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ0gJ6BAgLEAg&amp;usg=AOvVaw0wwoK0XZHpgxXuKWp61mg2">
472
- <span class="XLloXe AP7Wnd">
473
- Forum
474
- </span>
475
- </a>
476
- </span>
477
- </div>
478
- </div>
479
- </div>
480
- </div>
481
- </div>
482
- </div>
483
- </div>
484
- </div>
485
- <div>
486
- <div class="Gx5Zad xpd EtOod pkphOe">
487
- <div class="egMi0 kCrYT">
488
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAkQAg" href="/url?q=https://discuss.streamlit.io/t/how-to-link-a-manifest-json-to-create-a-pwa/69682&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAkQAg&amp;usg=AOvVaw2nOTOpf0-i5zUZ8W2Kkx96">
489
- <div class="DnJfK">
490
- <div class="j039Wc">
491
- <h3 class="zBAuLc l97dzf">
492
- <div class="BNeawe vvjwJb AP7Wnd">
493
- How to &lt;link&gt; a manifest.json to create a PWA - Using Streamlit
494
- </div>
495
- </h3>
496
- </div>
497
- <div class="sCuL3">
498
- <div class="BNeawe UPmit AP7Wnd lRVwie">
499
- discuss.streamlit.io › how-to-link-a-manifest-json-to-create-a-pwa
500
- </div>
501
- </div>
502
- </div>
503
- </a>
504
- </div>
505
- <div class="kCrYT">
506
- <div>
507
- <div class="BNeawe s3v9rd AP7Wnd">
508
- <div>
509
- <div>
510
- <div class="BNeawe s3v9rd AP7Wnd">
511
- <span class="r0bn4c rQMQod">
512
- 16 May 2024
513
- </span>
514
- <span class="r0bn4c rQMQod">
515
- ·
516
- </span>
517
- I would like to add a HTML element inside the element. My idea is to link a manifest.json so my app becomes a PWA and can be a “share target” in android.
518
- </div>
519
- </div>
520
- </div>
521
- </div>
522
- </div>
523
- </div>
524
- </div>
525
- </div>
526
- <div>
527
- <div class="Gx5Zad xpd EtOod pkphOe">
528
- <div class="egMi0 kCrYT">
529
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAEQAg" href="/url?q=https://github.com/streamlit/streamlit/runs/13357035839%3Fcheck_suite_focus%3Dtrue&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAEQAg&amp;usg=AOvVaw0PwHYjsNhEUrpFgF26J-T8">
530
- <div class="DnJfK">
531
- <div class="j039Wc">
532
- <h3 class="zBAuLc l97dzf">
533
- <div class="BNeawe vvjwJb AP7Wnd">
534
- Improve metadata: PWA compatibility for a Streamlit application #1562
535
- </div>
536
- </h3>
537
- </div>
538
- <div class="sCuL3">
539
- <div class="BNeawe UPmit AP7Wnd lRVwie">
540
- github.com › streamlit › streamlit › runs
541
- </div>
542
- </div>
543
- </div>
544
- </a>
545
- </div>
546
- <div class="kCrYT">
547
- <div>
548
- <div class="BNeawe s3v9rd AP7Wnd">
549
- <div>
550
- <div>
551
- <div class="BNeawe s3v9rd AP7Wnd">
552
- Streamlit — A faster way to build and share data apps. - Improve metadata: PWA compatibility for a Streamlit application · streamlit/streamlit@2266ca2.
553
- </div>
554
- </div>
555
- </div>
556
- </div>
557
- </div>
558
- </div>
559
- </div>
560
- </div>
561
- <div>
562
- <div class="Gx5Zad xpd EtOod pkphOe">
563
- <div class="egMi0 kCrYT">
564
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAIQAg" href="/url?q=https://docs.streamlit.io/get-started/tutorials/create-an-app&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAIQAg&amp;usg=AOvVaw1Tgsqp9i_3ItNSt-BXAv7e">
565
- <div class="DnJfK">
566
- <div class="j039Wc">
567
- <h3 class="zBAuLc l97dzf">
568
- <div class="BNeawe vvjwJb AP7Wnd">
569
- Create an app - Streamlit Docs
570
- </div>
571
- </h3>
572
- </div>
573
- <div class="sCuL3">
574
- <div class="BNeawe UPmit AP7Wnd lRVwie">
575
- docs.streamlit.io › get-started › tutorials › create-an-app
576
- </div>
577
- </div>
578
- </div>
579
- </a>
580
- </div>
581
- <div class="kCrYT">
582
- <div>
583
- <div class="BNeawe s3v9rd AP7Wnd">
584
- <div>
585
- <div>
586
- <div class="BNeawe s3v9rd AP7Wnd">
587
- In this guide, you're going to use Streamlit's core features to create an interactive app; exploring a public Uber dataset for pickups and drop-offs in New York ...
588
- </div>
589
- </div>
590
- </div>
591
- </div>
592
- </div>
593
- </div>
594
- </div>
595
- </div>
596
- <div>
597
- <div class="Gx5Zad xpd EtOod pkphOe">
598
- <div class="egMi0 kCrYT">
599
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAAQAg" href="/url?q=https://learn.microsoft.com/en-us/answers/questions/1470782/how-to-deploy-a-streamlit-application-on-azure-app&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAAQAg&amp;usg=AOvVaw0xyCDRh9SqLlX78pcR9LbK">
600
- <div class="DnJfK">
601
- <div class="j039Wc">
602
- <h3 class="zBAuLc l97dzf">
603
- <div class="BNeawe vvjwJb AP7Wnd">
604
- How to deploy a streamlit application on Azure App Service (WebApp)
605
- </div>
606
- </h3>
607
- </div>
608
- <div class="sCuL3">
609
- <div class="BNeawe UPmit AP7Wnd lRVwie">
610
- learn.microsoft.com › en-us › answers › questions › how-to-deploy-a-strea...
611
- </div>
612
- </div>
613
- </div>
614
- </a>
615
- </div>
616
- <div class="kCrYT">
617
- <div>
618
- <div class="BNeawe s3v9rd AP7Wnd">
619
- <div>
620
- <div>
621
- <div class="BNeawe s3v9rd AP7Wnd">
622
- <span class="r0bn4c rQMQod">
623
- 28 Dec 2023
624
- </span>
625
- <span class="r0bn4c rQMQod">
626
- ·
627
- </span>
628
- To deploy a Streamlit application on Azure App Service, follow these steps: Create a bash script run.sh, and write the following command in it.
629
- </div>
630
- </div>
631
- </div>
632
- </div>
633
- </div>
634
- </div>
635
- </div>
636
- </div>
637
- <div>
638
- <div class="Gx5Zad xpd EtOod pkphOe">
639
- <div class="egMi0 kCrYT">
640
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAYQAg" href="/url?q=https://discuss.streamlit.io/t/progressive-web-app/18892&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAYQAg&amp;usg=AOvVaw1UcKkC1KMSvO72MjHbn9Pz">
641
- <div class="DnJfK">
642
- <div class="j039Wc">
643
- <h3 class="zBAuLc l97dzf">
644
- <div class="BNeawe vvjwJb AP7Wnd">
645
- Progressive Web App - Using Streamlit
646
- </div>
647
- </h3>
648
- </div>
649
- <div class="sCuL3">
650
- <div class="BNeawe UPmit AP7Wnd lRVwie">
651
- discuss.streamlit.io › progressive-web-app
652
- </div>
653
- </div>
654
- </div>
655
- </a>
656
- </div>
657
- <div class="kCrYT">
658
- <div>
659
- <div class="BNeawe s3v9rd AP7Wnd">
660
- <div>
661
- <div>
662
- <div class="BNeawe s3v9rd AP7Wnd">
663
- <span class="r0bn4c rQMQod">
664
- 7 Nov 2021
665
- </span>
666
- <span class="r0bn4c rQMQod">
667
- ·
668
- </span>
669
- Is there any way to make Streamlit apps as PWAs?
670
- </div>
671
- </div>
672
- </div>
673
- </div>
674
- </div>
675
- </div>
676
- </div>
677
- </div>
678
- <div>
679
- <div class="Gx5Zad xpd EtOod pkphOe">
680
- <div class="egMi0 kCrYT">
681
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAcQAg" href="/url?q=https://medium.com/%40avikumart_/a-complete-guide-to-building-streamlit-data-web-apps-with-code-examples-6cc1e42b2397&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAcQAg&amp;usg=AOvVaw3YK6oq7zcMxUQEUutY-kbw">
682
- <div class="DnJfK">
683
- <div class="j039Wc">
684
- <h3 class="zBAuLc l97dzf">
685
- <div class="BNeawe vvjwJb AP7Wnd">
686
- A complete guide to building streamlit data web apps with code ...
687
- </div>
688
- </h3>
689
- </div>
690
- <div class="sCuL3">
691
- <div class="BNeawe UPmit AP7Wnd lRVwie">
692
- medium.com › a-complete-guide-to-building-streamlit-data-web-apps-with...
693
- </div>
694
- </div>
695
- </div>
696
- </a>
697
- </div>
698
- <div class="kCrYT">
699
- <div>
700
- <div class="BNeawe s3v9rd AP7Wnd">
701
- <div>
702
- <div>
703
- <div class="BNeawe s3v9rd AP7Wnd">
704
- <span class="r0bn4c rQMQod">
705
- 28 Dec 2022
706
- </span>
707
- <span class="r0bn4c rQMQod">
708
- ·
709
- </span>
710
- Streamlit is an open-source tool to build and deploy data applications with less coding compared to other technologies like HTML, CSS, and ...
711
- </div>
712
- </div>
713
- </div>
714
- </div>
715
- </div>
716
- </div>
717
- </div>
718
- </div>
719
- <div>
720
- <div class="Gx5Zad xpd EtOod pkphOe">
721
- <div class="egMi0 kCrYT">
722
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQtwJ6BAgFEAE" href="/url?q=https://www.youtube.com/watch%3Fv%3DZbt7rBt4H8s&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQtwJ6BAgFEAE&amp;usg=AOvVaw3HKb48_v35G3Ig_NbETxmF">
723
- <div class="DnJfK">
724
- <div class="j039Wc">
725
- <h3 class="zBAuLc l97dzf">
726
- <div class="BNeawe vvjwJb AP7Wnd">
727
- How to use Streamlit to create data-powered web apps in Python
728
- </div>
729
- </h3>
730
- </div>
731
- <div class="sCuL3">
732
- <div class="BNeawe UPmit AP7Wnd lRVwie">
733
- www.youtube.com › watch
734
- </div>
735
- </div>
736
- </div>
737
- </a>
738
- </div>
739
- <div class="kCrYT">
740
- <a data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQuAJ6BAgFEAI" href="/url?q=https://www.youtube.com/watch%3Fv%3DZbt7rBt4H8s&amp;sa=U&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQuAJ6BAgFEAI&amp;usg=AOvVaw3TMxZnSLLaBsrR22NkAmEE">
741
- <div class="lcJF1d Q6Xouf G6SP0b eeoFaf">
742
- <div style="width:120px;height:67px;position:static">
743
- <img alt="Video for streamlit app as pwa" class="h1hFNe" data-deferred="1" id="dimg_5" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="width:120px;height:67px"/>
744
- </div>
745
- <div class="S9HcI oz9fhd">
746
- </div>
747
- <div class="S9HcI UhWgBb" style="background-size:36px">
748
- </div>
749
- </div>
750
- </a>
751
- <div>
752
- <div class="BNeawe s3v9rd AP7Wnd">
753
- <div>
754
- <div>
755
- <div class="BNeawe s3v9rd AP7Wnd">
756
- <span class="r0bn4c rQMQod">
757
- 26 Mar 2024
758
- </span>
759
- <span class="r0bn4c rQMQod">
760
- ·
761
- </span>
762
- Writing a web app in Python isn't hard, as long as you understand the frontend components ...
763
- <br/>
764
- Duration:
765
- <span class="r0bn4c rQMQod">
766
- 5:39
767
- </span>
768
- <br/>
769
- Posted:
770
- <span class="r0bn4c rQMQod">
771
- 26 Mar 2024
772
- </span>
773
- </div>
774
- </div>
775
- </div>
776
- </div>
777
- </div>
778
- <div class="rl7ilb">
779
- </div>
780
- </div>
781
- </div>
782
- </div>
783
- <div>
784
- <div class="Gx5Zad xpd EtOod pkphOe">
785
- <div class="K8tyEc">
786
- <div class="mEUgP">
787
- <span>
788
- <div class="BNeawe">
789
- People also search for
790
- </div>
791
- </span>
792
- </div>
793
- </div>
794
- <div>
795
- <div class="gGQDvd iIWm4b">
796
- <a class="Q71vJc" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAI" href="/search?sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;q=Streamlit+app+as+pwa+example&amp;sa=X&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAI">
797
- <accordion-entry-search-icon class="toMBf">
798
- <span>
799
- <img alt="" class="OEaqif" data-deferred="1" id="dimg_1" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
800
- </span>
801
- </accordion-entry-search-icon>
802
- <div class="kjGX2">
803
- <span class="Xe4YD">
804
- <div class="BNeawe lRVwie">
805
- Streamlit app as pwa example
806
- </div>
807
- </span>
808
- </div>
809
- </a>
810
- </div>
811
- </div>
812
- <div class="x54gtf">
813
- </div>
814
- <div>
815
- <div class="gGQDvd iIWm4b">
816
- <a class="Q71vJc" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAQ" href="/search?sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;q=Streamlit+app+as+pwa+tutorial&amp;sa=X&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAQ">
817
- <accordion-entry-search-icon class="toMBf">
818
- <span>
819
- <img alt="" class="OEaqif" data-deferred="1" id="dimg_3" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
820
- </span>
821
- </accordion-entry-search-icon>
822
- <div class="kjGX2">
823
- <span class="Xe4YD">
824
- <div class="BNeawe lRVwie">
825
- Streamlit app as pwa tutorial
826
- </div>
827
- </span>
828
- </div>
829
- </a>
830
- </div>
831
- </div>
832
- <div class="x54gtf">
833
- </div>
834
- <div>
835
- <div class="gGQDvd iIWm4b">
836
- <a class="Q71vJc" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAY" href="/search?sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;q=Streamlit+app+as+pwa+android&amp;sa=X&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAY">
837
- <accordion-entry-search-icon class="toMBf">
838
- <span>
839
- <img alt="" class="OEaqif" data-deferred="1" id="dimg_7" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
840
- </span>
841
- </accordion-entry-search-icon>
842
- <div class="kjGX2">
843
- <span class="Xe4YD">
844
- <div class="BNeawe lRVwie">
845
- Streamlit app as pwa android
846
- </div>
847
- </span>
848
- </div>
849
- </a>
850
- </div>
851
- </div>
852
- <div class="x54gtf">
853
- </div>
854
- <div>
855
- <div class="gGQDvd iIWm4b">
856
- <a class="Q71vJc" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAg" href="/search?sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;q=Streamlit+app+as+pwa+github&amp;sa=X&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAg">
857
- <accordion-entry-search-icon class="toMBf">
858
- <span>
859
- <img alt="" class="OEaqif" data-deferred="1" id="dimg_9" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
860
- </span>
861
- </accordion-entry-search-icon>
862
- <div class="kjGX2">
863
- <span class="Xe4YD">
864
- <div class="BNeawe lRVwie">
865
- Streamlit app as pwa github
866
- </div>
867
- </span>
868
- </div>
869
- </a>
870
- </div>
871
- </div>
872
- <div class="x54gtf">
873
- </div>
874
- <div>
875
- <div class="gGQDvd iIWm4b">
876
- <a class="Q71vJc" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAo" href="/search?sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;q=Streamlit+PWA&amp;sa=X&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAo">
877
- <accordion-entry-search-icon class="toMBf">
878
- <span>
879
- <img alt="" class="OEaqif" data-deferred="1" id="dimg_11" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
880
- </span>
881
- </accordion-entry-search-icon>
882
- <div class="kjGX2">
883
- <span class="Xe4YD">
884
- <div class="BNeawe lRVwie">
885
- Streamlit PWA
886
- </div>
887
- </span>
888
- </div>
889
- </a>
890
- </div>
891
- </div>
892
- <div class="x54gtf">
893
- </div>
894
- <div>
895
- <div class="gGQDvd iIWm4b">
896
- <a class="Q71vJc" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAw" href="/search?sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;q=Streamlit+app+as+pwa+download&amp;sa=X&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEAw">
897
- <accordion-entry-search-icon class="toMBf">
898
- <span>
899
- <img alt="" class="OEaqif" data-deferred="1" id="dimg_13" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
900
- </span>
901
- </accordion-entry-search-icon>
902
- <div class="kjGX2">
903
- <span class="Xe4YD">
904
- <div class="BNeawe lRVwie">
905
- Streamlit app as pwa download
906
- </div>
907
- </span>
908
- </div>
909
- </a>
910
- </div>
911
- </div>
912
- <div class="x54gtf">
913
- </div>
914
- <div>
915
- <div class="gGQDvd iIWm4b">
916
- <a class="Q71vJc" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEA4" href="/search?sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;q=Streamlit+app+examples&amp;sa=X&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEA4">
917
- <accordion-entry-search-icon class="toMBf">
918
- <span>
919
- <img alt="" class="OEaqif" data-deferred="1" id="dimg_15" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
920
- </span>
921
- </accordion-entry-search-icon>
922
- <div class="kjGX2">
923
- <span class="Xe4YD">
924
- <div class="BNeawe lRVwie">
925
- Streamlit app examples
926
- </div>
927
- </span>
928
- </div>
929
- </a>
930
- </div>
931
- </div>
932
- <div class="x54gtf">
933
- </div>
934
- <div>
935
- <div class="gGQDvd iIWm4b">
936
- <a class="Q71vJc" data-ved="2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEBA" href="/search?sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;q=Streamlit+Cloud&amp;sa=X&amp;ved=2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ1QJ6BAgDEBA">
937
- <accordion-entry-search-icon class="toMBf">
938
- <span>
939
- <img alt="" class="OEaqif" data-deferred="1" id="dimg_17" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
940
- </span>
941
- </accordion-entry-search-icon>
942
- <div class="kjGX2">
943
- <span class="Xe4YD">
944
- <div class="BNeawe lRVwie">
945
- Streamlit Cloud
946
- </div>
947
- </span>
948
- </div>
949
- </a>
950
- </div>
951
- </div>
952
- </div>
953
- </div>
954
- <footer>
955
- <div>
956
- <div class="Gx5Zad xpd EtOod pkphOe OcpZAb">
957
- <div class="nMymef Va3FIb lVm3ye">
958
- <a aria-label="Next page" class="nBDE1b G5eFlf" href="/search?q=streamlit+app+as+pwa&amp;sca_esv=1ddba70af590f790&amp;sca_upv=1&amp;ie=UTF-8&amp;ei=hw31ZreEKpDL1sQPt4GgkAg&amp;start=10&amp;sa=N">
959
- Next &gt;
960
- </a>
961
- </div>
962
- </div>
963
- </div>
964
- <div id="EOlPnc">
965
- <div class="Srfpq">
966
- <div>
967
- <span class="EYqSq unknown_loc">
968
- </span>
969
- <span class="dfB0uf">
970
- 560068, Bengaluru, Karnataka
971
- </span>
972
- </div>
973
- <span>
974
- From your IP address
975
- </span>
976
- <span>
977
- -
978
- </span>
979
- <a aria-label="Learn more about this location" class="IffyKc" href="/url?q=https://support.google.com/websearch%3Fp%3Dws_settings_location%26hl%3Den-IN&amp;opi=89978449&amp;sa=U&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQty4Ieg&amp;usg=AOvVaw2cFhsxsxr4UNFAE_cbs8OE" tabindex="0">
980
- Learn more
981
- </a>
982
- </div>
983
- <div>
984
- <a href="/url?q=https://accounts.google.com/ServiceLogin%3Fcontinue%3Dhttps://www.google.com/search%253Fq%253Dstreamlit%252Bapp%252Bas%252Bpwa%26hl%3Den&amp;opi=89978449&amp;sa=U&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQxs8CCHs&amp;usg=AOvVaw2FNmHEE3kH1DKzgp_K1bqg">
985
- Sign in
986
- </a>
987
- </div>
988
- <div>
989
- <a class="xeDNfc" href="https://www.google.com/preferences?hl=en-IN&amp;fg=1&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQ5fUCCHw">
990
- Settings
991
- </a>
992
- <a class="xeDNfc" href="https://policies.google.com/privacy?hl=en-IN&amp;fg=1">
993
- Privacy
994
- </a>
995
- <a class="xeDNfc" href="https://policies.google.com/terms?hl=en-IN&amp;fg=1">
996
- Terms
997
- </a>
998
- <a class="xeDNfc" href="/setprefs?hl=en&amp;prev=https://www.google.com/search?q%3Dstreamlit%2Bapp%2Bas%2Bpwa%26pccc%3D1&amp;sig=0_ReyK0R6Ty5h50N4OqIHRR9gA_uo%3D&amp;cs=2&amp;sa=X&amp;ved=0ahUKEwj3486ti-CIAxWQpZUCHbcACIIQjcAJCH0">
999
- Dark theme: Off
1000
- </a>
1001
- </div>
1002
- </div>
1003
- </footer>
1004
- <script nonce="EK-zhWykiC0TIPIWA0_dDg">
1005
- (function(){var hl='en-IN';(function(){var g=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}},k=typeof Object.defineProperties=="function"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a},l=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("a");},m=l(this),n=function(a,b){if(b)a:{var c=m;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&b!=null&&k(c,a,{configurable:!0,writable:!0,value:b})}};n("Symbol",function(a){if(a)return a;var b=function(h,f){this.g=h;k(this,"description",{configurable:!0,writable:!0,value:f})};b.prototype.toString=function(){return this.g};var c="jscomp_symbol_"+(Math.random()*1E9>>>0)+"_",d=0,e=function(h){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new b(c+(h||"")+"_"+d++,h)};return e});n("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c<b.length;c++){var d=m[b[c]];typeof d==="function"&&typeof d.prototype[a]!="function"&&k(d.prototype,a,{configurable:!0,writable:!0,value:function(){return p(g(this))}})}return a});var p=function(a){a={next:a};a[Symbol.iterator]=function(){return this};return a},r=function(a){return q(a,a)},q=function(a,b){a.raw=b;Object.freeze&&(Object.freeze(a),Object.freeze(b));return a},t=function(){for(var a=Number(this),b=[],c=a;c<arguments.length;c++)b[c-a]=arguments[c];return b};n("globalThis",function(a){return a||m});var u=function(a,b){a instanceof String&&(a+="");var c=0,d=!1,e={next:function(){if(!d&&c<a.length){var h=c++;return{value:b(h,a[h]),done:!1}}d=!0;return{done:!0,value:void 0}}};e[Symbol.iterator]=function(){return e};return e};n("Array.prototype.entries",function(a){return a?a:function(){return u(this,function(b,c){return[b,c]})}});n("Object.entries",function(a){return a?a:function(b){var c=[],d;for(d in b)Object.prototype.hasOwnProperty.call(b,d)&&c.push([d,b[d]]);return c}});
1006
- var v=globalThis.trustedTypes,x;function y(){var a=null;if(!v)return a;try{var b=function(c){return c};a=v.createPolicy("goog#html",{createHTML:b,createScript:b,createScriptURL:b})}catch(c){}return a}function z(){x===void 0&&(x=y());return x};var A=function(a){this.g=a};A.prototype.toString=function(){return this.g+""};function B(a){var b=z();return new A(b?b.createScriptURL(a):a)}function C(a){if(a instanceof A)return a.g;throw Error("e");};var D=function(a){this.g=a};D.prototype.toString=function(){return this.g+""};function E(a){var b=t.apply(1,arguments);if(b.length===0)return B(a[0]);for(var c=a[0],d=0;d<b.length;d++)c+=encodeURIComponent(b[d])+a[d+1];return B(c)}function F(a,b,c,d){function e(f,w){f!=null&&(Array.isArray(f)?f.forEach(function(Z){return e(Z,w)}):(b+=h+encodeURIComponent(w)+"="+encodeURIComponent(f),h="&"))}var h=b.length?"&":"?";d.constructor===Object&&(d=Object.entries(d));Array.isArray(d)?d.forEach(function(f){return e(f[1],f[0])}):d.forEach(e);return B(a+b+c)};function aa(a,b){if(a.nodeType===1&&/^(script|style)$/i.test(a.tagName))throw Error("e");if(b instanceof D)b=b.g;else throw Error("e");a.innerHTML=b};function ba(a){a=a===null?"null":a===void 0?"undefined":a;var b=z();return new D(b?b.createHTML(a):a)};
1007
- var ca=r(["/complete/search"]),G=document.querySelector(".l"),H=document.querySelector("#sf"),I=H.querySelector(".sbc"),J=H.querySelector("[type=text]"),K=H.querySelector("[type=submit]"),L=H.querySelector(".sc"),M=H.querySelector(".x"),N=J.value,O=[],P=-1,Q=N,R,S,T;N||(M&&(M.style.display="none"),U(!1));function U(a){if(I.classList.contains("esbc")){var b=I.classList.contains("chsbc"),c=I.classList.contains("rtlsbc");a&&(L.style.display="block",b?(H.style.borderRadius="20px 20px 0 0",L.style.borderBottom="1px solid #DFE1E5",K.style.borderRadius=c?"20px 0 0 0":"0 20px 0 0"):I.style.borderRadius=c?"0 8px 0 0":"8px 0 0 0");a||(L.style.display="none",b?(H.style.borderRadius="20px",L.style.borderBottom="none",K.style.borderRadius=c?"20px 0 0 20px":"0 20px 20px 0"):I.style.borderRadius=c?"0 8px 8px 0":"8px 0 0 8px")}}function V(){H.querySelector("[name=oq]").value=Q;H.querySelector("[name=aqs]").value="heirloom-srp."+(P>=0?P:"")+"."+(O.length>0?"0l"+O.length:"")}
1008
- function W(){R=null;if(S){var a={client:"heirloom-srp",hl:hl,json:"t",callback:"hS",q:S};typeof ds!=="undefined"&&ds&&(a.ds=ds);var b=document;var c="SCRIPT";b.contentType==="application/xhtml+xml"&&(c=c.toLowerCase());c=b.createElement(c);b=E(ca);var d=C(b).toString();var e=d.split(/[?#]/),h=/[?]/.test(d)?"?"+e[1]:"";b=e[0];d=/[#]/.test(d)?"#"+(h?e[2]:e[1]):"";a=F(b,h,d,a);c.src=C(a);var f,w;(f=(a=(w=(f=(c.ownerDocument&&c.ownerDocument.defaultView||window).document).querySelector)==null?void 0:w.call(f,"script[nonce]"))?a.nonce||a.getAttribute("nonce")||"":"")&&c.setAttribute("nonce",f);document.body.appendChild(c);S=null;R=setTimeout(W,500)}}function X(){for(;L.firstChild;)L.removeChild(L.firstChild);O=[];P=-1;U(!1)}function Y(){var a=L.querySelector(".scs");a&&(a.className="");P>=0?(a=L.childNodes[P],a.className="scs",N=a.textContent):N=Q;J.value=N}J.addEventListener("focus",function(){G&&(G.style.display="none")},!1);J.addEventListener("blur",function(){X();G&&(G.style.display="")},!1);J.addEventListener("keyup",function(a){N=J.value;T=!1;a.which===13?V():a.which===27?(X(),G&&(G.style.display=""),N=Q,J.value=N):a.which===40?(P++,P>=O.length&&(P=-1),Y()):a.which===38?(P--,P<-1&&(P=O.length-1),Y()):(a=N)?(M&&(M.style.display=""),S=a,R||W(),Q=a):(M&&(M.style.display="none"),U(!1),X(),Q="",T=!0)},!1);K.addEventListener("click",V,!1);M.addEventListener("click",function(){J.value="";M.style.display="none";U(!1)},!1);I.addEventListener("click",function(){J.focus()},!1);window.hS=function(a){if(!T){X();a[1].length===0&&U(!1);for(var b=0;b<a[1].length;b++){var c=a[1][b][0],d=document.createElement("div");aa(d,ba(c));d.addEventListener("mousedown",function(e){e.preventDefault();return!1},!1);c=c.replace(/<\/?b>/g,"");d.addEventListener("click",function(e){return function(){P=e;V();Y();X();H.submit()}}(b),!1);d.addEventListener("mouseover",function(e){return function(){P!==e&&(P=e,Y())}}(b),!1);L.appendChild(d);U(!0);O.push(c)}}};}).call(this);})();(function(){function b(a){for(a=a.target||a.srcElement;a&&a.nodeName!=="A";)a=a.parentElement;a&&(a.href||"").match(/\/search.*[?&]tbm=isch/)&&(a.href+="&biw="+document.documentElement.clientWidth,a.href+="&bih="+document.documentElement.clientHeight)}document.addEventListener("click",b,!1);document.addEventListener("touchStart",b,!1);}).call(this);
1009
- </script>
1010
- </div>
1011
- <!-- cctlcm 5 cctlcm -->
1012
- <textarea class="csi" name="csi" style="display:none"></textarea>
1013
- <script nonce="EK-zhWykiC0TIPIWA0_dDg">
1014
- (function(){var e='hw31ZreEKpDL1sQPt4GgkAg';var sn='web';var timl=false;(function(){function C(a){if(!a||D(a))return 0;if(!a.getBoundingClientRect)return 1;var c=function(b){return b.getBoundingClientRect()};return E(a,c)?0:K(a,c)}function E(a,c){var b;a:{for(b=a;b&&b!==null;b=b.parentElement)if(b.style.overflow==="hidden"||b.tagName==="G-EXPANDABLE-CONTENT"&&getComputedStyle(b).getPropertyValue("overflow")==="hidden")break a;b=null}if(!b)return!1;a=c(a);c=c(b);return a.bottom<c.top||a.top>=c.bottom||a.right<c.left||a.left>=c.right}
1015
- function D(a){return a.style.display==="none"?!0:document.defaultView&&document.defaultView.getComputedStyle?(a=document.defaultView.getComputedStyle(a),!!a&&(a.visibility==="hidden"||a.height==="0px"&&a.width==="0px")):!1}
1016
- function K(a,c){var b=c(a);a=b.left+window.pageXOffset;c=b.top+window.pageYOffset;var d=b.width;b=b.height;var f=0;if(b<=0&&d<=0)return f;var q=window.innerHeight||document.documentElement.clientHeight;c+b<0?f=2:c>=q&&(f=4);if(a+d<0||a>=(window.innerWidth||document.documentElement.clientWidth))f|=8;f||(f=1,c+b>q&&(f|=4));return f};var L=e,M=sn,N=typeof de==="undefined"?!0:de!==!1,O=[];function P(a,c,b){a="/gen_204?atyp=csi&s="+M+"&t="+a+("&lite=1&ei="+L+"&conn="+(window.navigator&&window.navigator.connection?window.navigator.connection.type:-1)+c);c="&rt=";for(var d in b)a+=""+c+d+"."+b[d],c=",";return a}function Q(a){a={prt:a};window.wsrt&&(a.wsrt=window.wsrt);return a}function R(a){window.ping?window.ping(a):(new Image).src=a}
1017
- (function(){for(var a=(new Date).getTime()-window.start,c=Q(a),b=0,d=0,f=0,q=document.getElementsByTagName("img"),r=N?"&biw="+window.innerWidth+"&bih="+window.innerHeight:"",F=function(){r+="&ima="+f;c.aft=b;R(P("aft",r,c))},y=0,S=function(g,t,u){var n=g.src;g.onload=function(){u&&n&&n===g.src||(d=(new Date).getTime()-window.start,t&&++y===f&&(b=d,F()),g.onload=null)}},T=0,h=void 0;h=q[T++];){var v=C(h),p=!!(v&1);p&&++f;var l=h.hasAttribute("data-ilite"),w=h.hasAttribute("data-deferred"),G=h.hasAttribute("data-src")||
1018
- h.hasAttribute("data-lzysrc"),z=!w&&!l&&G;O.push([v,w||l,z,h.id,l&&G]);l=(v=h.complete&&!w&&!(p&&z))&&Number(h.getAttribute("data-iml"))||0;v&&l?(p&&++y,l&&(h=l-window.start,p&&(b=Math.max(b,h)),d=Math.max(d,h))):S(h,p,w||z)}b||(b=a);d||(d=b);y===f&&F();google.rglh&&google.rglh();window.addEventListener("load",function(){window.setTimeout(function(){c.ol=(new Date).getTime()-window.start;timl&&(c.iml=d);var g=window.performance&&window.performance.timing;g&&(c.rqst=g.responseEnd-g.requestStart,c.rspt=
1019
- g.responseEnd-g.responseStart);for(var t=g=0,u=0,n=0,H=0,I=0,U=0,k;k=O[U++];){var m=k[0],A=k[1],J=k[2],x=k[3];k=k[4]||google.ldi&&x&&google.ldi[x];x=m==0;var V=m&8,B=m&1;m=!B&&m&4;B&&(A&&!k||++u,J&&++I);A&&(B&&k&&++g,m&&!k&&++t);x||V?J||++H:A||++n}r+="&ime="+u+"&imel="+I+("&imex="+n+"&imeh="+H)+("&imea="+g+"&imeb="+t);R(P("all",r,c))},0)},!1)})();}).call(this);})();(function(){window.google=window.google||{};window.google.ishk=[];function a(){return window.scrollY+window.document.documentElement.clientHeight>=Math.max(document.body.scrollHeight,document.body.offsetHeight)}function b(){a()&&window.google.ishk.length===0&&(window.google.bs=!0,window.removeEventListener("scroll",b))}a()?window.google.bs=!0:(window.google.bs=!1,window.addEventListener("scroll",b));}).call(this);
1020
- </script>
1021
- <script nonce="EK-zhWykiC0TIPIWA0_dDg">
1022
- window._setImagesSrc=function(k,e,n){function l(b){b.onerror=function(){b.style.display="none"};b.setAttribute("data-deferred","2");e.substring(0,5)!=="data:"&&b.setAttribute("data-defe","1");b.src=e;var g;((g=google.c)==null?0:g.di)&&b.decode()}function m(b,g){google.iir=google.iir||{};google.iir[b]=g}for(var d={},h=0;h<k.length;d={g:void 0},++h){var f=k[h];d.g=document.getElementById(f)||document.querySelector('img[data-iid="'+f+'"]');if(d.g){var c=void 0,a=void 0;if((a=google.c)==null?0:a.setup)c=
1023
- google.c.setup(d.g);c=c!=null&&c&1;a=void 0;((a=google.c)==null?void 0:a.doiu)!==1||c?(a=void 0,((a=google.c)==null?void 0:a.doiu)!==2||n||c?(a=void 0,((a=google.c)==null?void 0:a.doiu)!==3||c?l(d.g):(google.doid=google.doid||{},google.doid[f]=e)):m(f,e)):google.caft(function(b){return function(){l(b.g)}}(d))}else m(f,e)}};typeof window.google==="undefined"&&(window.google={});
1024
- </script>
1025
- <script nonce="EK-zhWykiC0TIPIWA0_dDg">
1026
- (function(){var s='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5OjcBCgoKDQwNGg8PGjclHyU3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N//AABEIAEMAeAMBIgACEQEDEQH/xAAcAAACAwEBAQEAAAAAAAAAAAAABQIDBAEGBwj/xABEEAACAQMDAQQFBwgIBwAAAAABAgMABBEFEiExBhNBURQiYXGRBxYyUlaU0hUjQnKBosHRJFOVobHC4fA2VFViZXWS/8QAGAEBAQEBAQAAAAAAAAAAAAAAAAECAwT/xAAhEQEBAAIBBAIDAAAAAAAAAAAAAQIRAxIhMUEEoSIkMv/aAAwDAQACEQMRAD8A9QVaOMlkCgdcxyjH99eJ1r5RLGxnaDT4Vu2XgyCR1TPs5ya3fKDeSaf2WmaNRE87LEp7t1PJ5x62OgNeW0HsvZmxhnvIzLM67ipPA9lea6xm69WGFzuob6V8pkcu46lad3noYpG/nXqdA7UafrbOlsWjkUZ2STkEivLpoumvIYhaoA3kKT9m7J9C7fR2aOdg5U7gPVZT4nimNmS8nFcPL6yJB4OPvmK+N9ibW2vvleit723hubeS9uN8UyiRGGJDyDwa+vCSQ/RMp/VET18k7AEj5ZLdmBH9Nuc5GP0ZK64dnnyr9AL2N7LLnHZ3SDk55sIfh9Gj5n9l/s5pHH/j4ef3aZ977aW65ePbR2sgv4rJEnV5GkBIkUZynsz5+wV0Yc+Z/ZfP/Dej/wBnw/ho+Z/Zf7OaP9wh/DSY6pdxq7fl6E26AOW7slmyGJGdvPKMMDpgjyAuXVrkxxQtr1kblpQD+Z42FRjAwOc+fGM+RqhqOx/ZX7NaN9wi/DQOyPZYjI7NaLj/ANfF+GksesXX5yCbWLfv1fMeyI4YbCT+ifVwUO7HUHwIzObU7tXkRddssyxRsBtOVyiZZcDoxzjn9MYwRgg2+aHZX7NaN9wi/DXPmd2X+zuj+70CHn92o9nbiaS0kafUEvjvAWSPoPVHHQe/x69abd57ag/KXym21vZ9u9Zt7O3it4I58JFEgVVG0dAOBRVnyqnPyha2R/zH+UUUD7V2kv7eNbhtyxSBwNgAzyPD31Wuo30b7BM5XywOPdUZZU2lQeT5Afwqp3wMk8VzsjrhbJ2XnUruJ1EcpBPiRmtHf3LatHqTyZuFi2btgJA58Dx4msG/dt68U50a0jvlvEdV7xLYyRu7hFVg6jkk46E9aSRc8rfKxtVvj1mP7YVH+FIuz1tPDryataMsUqXMv5zOCDsZjxjHSvUvptpY6XFeXEaTMFG5YZ8q7s7hcspICgRnpySwGRWHSdJtdR7m6sO+tp5p/VhaQuq4dYpCD4qe/iPPIw4yRW5NOOW9dno11vX2laMX75UgN6q4Gf2VTcaxq01uJZ7tZohyA8aHBzjoVrNqsVraQyXNu8nd3Eym0LMciPuw5z5kb0H7DU4Vsb+GzhhtjDLfXL2qyekMxjOI8NjoTmTJHjjHHWruMTe/K70vVXZk72A7gGIMSc4wAT6v/dj41GXUNWtY+9d419cciFM55wfo+w0sVbe+guRZCe2NvCZo5GuWfeoIBDjpkg9VwMgDHPHbK0jYaSZJZG9KmaGX1id2HXkA9DhsU3F1fPUvOsXh3MWiJPU+jx5PP6tck1O6lcM7RltuzPcoDjAGPo+QA91MLa1064ntUhhEsL3MUUrLcEPEXfaQy+C5OFYeQyecUlv5IA6LHHFEdvr9zcCZWOeoIJx4cZ8PCm12Zw9oNUgBWC77tSckJEig/AVP5z6z/wBQk/8Alf5Uh75fOgSgnGaG3mO0IF9rd7c3QEs8sm53bqTiuUamc6jcHzb+FFFXBsDqc1IsGGGzVGTQWqNS6aI9q9B7K3wXjRrKsTgd7H3b5X6S5Bx8QPhSpXByc84ru7HQUN7OrfWLqBUWJ8okZiEbqjKULbiCrAg+tzz08MYFY7XWNR/LC3KXBVxE8ISKNECxNnKqoAUdSeMc89eazxSKMlmIJ9tZbVh6aMDgkiuf5vb+tL3n2a6jqlzLDbQmYmKDcsSsowgJyR8f98VkN/fdyiCciOORpEAUAqx2gnOM/oL8PfULvauwc4Hl41n3rjGOMVJczLj+L6ppc69qlzG8Us8QEhDStHbxo0pByN7KoLc88+PPXmiw1nVreIJbTRlUbvEZ4I2MTHHrIWXKn1RyPIHqBSzvTnrx7q0WbnY20jGAp3DrVlz9mXH8W/xTay1nUrdEj3IDEyOjpbxBjsIK7mC5YAgHBz0GegqdzeTXIQSLCqp9FYoEiA/YoGawbzuU8cDnmp97WsZfbyc+PFddEW5PlQGww9tV957RUC43LzV04dGirUDm9mbwLV2oXnNzIR512tNsnpj+S/Cs8+pSIhAAycY4rJ3tZpX3EDyqLW2PU5944TH6v+tajfyHHC8+yk8bAMCat39ffxQPbW5lk28qPrEDwrNY3rtq6xNtCb2GQOcDNYllZMGN9rA8eVU2Un9OWQ+JJoh9q92Yu72YPrHOeaW/lKT6ifCrZpUl+mqn3jNV7bf+rX4Ul0xLoflOX6ifCmuh3XfpMZRj1hjbxSrbb/1a/AVdBOkIIT1QfIYq7Xq29Fvj8z8aO8i+sfjSH0xfrGj0xfOqu4e95F5t8ag0qbl5b40l9MX6xrhu8kHJ4qVLds+pahLHqE6oEKqeNwopfftvu5W8zRRpXk1BvpUUUgBUsmiiipg1BDhxj20UURoLN513J86KKiObm86N7edFFFc3N50bm86KKINzeddDt50UUGZzlzmiiiqr/9k\x3d';var i=['dimg_5'];_setImagesSrc(i,s);})();
1027
- </script>
1028
- <script nonce="EK-zhWykiC0TIPIWA0_dDg">
1029
- (function(){var s='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABAUlEQVR4AWMYesChoYElLjkzPj4lY3d8csZjIL4MxPNjUzPcSTYsISFLAqj5NBD/h+LPQPwbiT87NCuLh2gDgRr2QzXuT0jNMoBYksARn5zuHJ+UcR0kB6RXE2VYXHJGOlTDZmzyIJcB5e+D1CSkZDgQNBAaZv+jU1JkcKpJygiGeZ0I76a/Byq8jU9NZFqaCNTA48SE33/iDcw8TIyBt0GKQTFN0Msp6f2EIyUpo57YSIlLSrMhIg0WCIBcCfXSdlzJBsheTHQ6jEnOUgEFOLaEDbMIlhZBOYrorAdJk+nroVnvPsSgdGdoOF7HZyhZ2XPoGQoqjbCpIbt0AiejIQMArVLI7k/DXFkAAAAASUVORK5CYII\x3d';var i=['dimg_1','dimg_3','dimg_7','dimg_9','dimg_11','dimg_13','dimg_15','dimg_17'];_setImagesSrc(i,s);})();
1030
- </script>
1031
- <script nonce="EK-zhWykiC0TIPIWA0_dDg">
1032
- (function(){var e='hw31ZreEKpDL1sQPt4GgkAg';(function(){var a=e;if((window.performance&&window.performance.navigation&&window.performance.navigation.type)===2){var b="",c=[],d=window.google!==void 0&&window.google.kOPI!==void 0&&window.google.kOPI!==0?window.google.kOPI:null;d!=null&&c.push(["opi",d.toString()]);for(var f=0;f<c.length;f++){if(f===0||f>0)b+="&";b+=c[f][0]+"="+c[f][1]}window.ping("/gen_204?ct=backbutton&ei="+a+b)};}).call(this);})();(function(){function b(){for(var a=google.drc.shift();a;)a(),a=google.drc.shift()};google.drc=[function(){google.tick&&google.tick("load","dcl")}];google.dclc=function(a){google.drc.length?google.drc.push(a):a()};window.addEventListener?(document.addEventListener("DOMContentLoaded",b,!1),window.addEventListener("load",b,!1)):window.attachEvent&&window.attachEvent("onload",b);}).call(this);(function(){var b=function(a){var c=0;return function(){return c<a.length?{done:!1,value:a[c++]}:{done:!0}}};
1033
- var e=this||self;var g,h;a:{for(var k=["CLOSURE_FLAGS"],l=e,n=0;n<k.length;n++)if(l=l[k[n]],l==null){h=null;break a}h=l}var p=h&&h[610401301];g=p!=null?p:!1;var q,r=e.navigator;q=r?r.userAgentData||null:null;function t(a){return g?q?q.brands.some(function(c){return(c=c.brand)&&c.indexOf(a)!=-1}):!1:!1}function u(a){var c;a:{if(c=e.navigator)if(c=c.userAgent)break a;c=""}return c.indexOf(a)!=-1};function v(){return g?!!q&&q.brands.length>0:!1}function w(){return u("Safari")&&!(x()||(v()?0:u("Coast"))||(v()?0:u("Opera"))||(v()?0:u("Edge"))||(v()?t("Microsoft Edge"):u("Edg/"))||(v()?t("Opera"):u("OPR"))||u("Firefox")||u("FxiOS")||u("Silk")||u("Android"))}function x(){return v()?t("Chromium"):(u("Chrome")||u("CriOS"))&&!(v()?0:u("Edge"))||u("Silk")}function y(){return u("Android")&&!(x()||u("Firefox")||u("FxiOS")||(v()?0:u("Opera"))||u("Silk"))};var z=v()?!1:u("Trident")||u("MSIE");y();x();w();var A=!z&&!w(),D=function(a){if(/-[a-z]/.test("ved"))return null;if(A&&a.dataset){if(y()&&!("ved"in a.dataset))return null;a=a.dataset.ved;return a===void 0?null:a}return a.getAttribute("data-"+"ved".replace(/([A-Z])/g,"-$1").toLowerCase())};var E=[],F=null;function G(a){a=a.target;var c=performance.now(),f=[],H=f.concat,d=E;if(!(d instanceof Array)){var m=typeof Symbol!="undefined"&&Symbol.iterator&&d[Symbol.iterator];if(m)d=m.call(d);else if(typeof d.length=="number")d={next:b(d)};else throw Error("b`"+String(d));for(var B=[];!(m=d.next()).done;)B.push(m.value);d=B}E=H.call(f,d,[c]);if(a&&a instanceof HTMLElement)if(a===F){if(c=E.length>=4)c=(E[E.length-1]-E[E.length-4])/1E3<5;if(c){c=google.getEI(a);a.hasAttribute("data-ved")?f=a?D(a)||"":"":f=(f=
1034
- a.closest("[data-ved]"))?D(f)||"":"";f=f||"";if(a.hasAttribute("jsname"))a=a.getAttribute("jsname");else{var C;a=(C=a.closest("[jsname]"))==null?void 0:C.getAttribute("jsname")}google.log("rcm","&ei="+c+"&tgtved="+f+"&jsname="+(a||""))}}else F=a,E=[c]}window.document.addEventListener("DOMContentLoaded",function(){document.body.addEventListener("click",G)});}).call(this);var w=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};window.jsl=window.jsl||{};window.jsl.dh=function(a,b,m){try{var h=document.getElementById(a),e;if(!h&&((e=google.stvsc)==null?0:e.dds)){e=[];var f=e.concat,c=google.stvsc.dds;if(c instanceof Array)var n=c;else{var p=typeof Symbol!="undefined"&&Symbol.iterator&&c[Symbol.iterator];if(p)var g=p.call(c);else if(typeof c.length=="number")g={next:w(c)};else throw Error(String(c)+" is not an iterable or ArrayLike");c=g;var q;for(g=[];!(q=c.next()).done;)g.push(q.value);n=g}var r=f.call(e,n);for(f=0;f<r.length&&!(h=r[f].getElementById(a));f++);}if(h)h.innerHTML=b,m&&m();else{var d={id:a,script:String(!!m),milestone:String(google.jslm||0)};google.jsla&&(d.async=google.jsla);var t=a.indexOf("_"),k=t>0?a.substring(0,t):"",u=document.createElement("div");u.innerHTML=b;var l=u.children[0];if(l&&(d.tag=l.tagName,d["class"]=String(l.className||null),d.name=String(l.getAttribute("jsname")),k)){a=[];var v=document.querySelectorAll('[id^="'+k+'_"]');for(b=0;b<v.length;++b)a.push(v[b].id);d.ids=a.join(",")}google.ml(Error(k?"Missing ID with prefix "+
1035
- k:"Missing ID"),!1,d)}}catch(x){google.ml(x,!0,{"jsl.dh":!0})}};(function(){var x=false;google.jslm=x?2:1;})();(function(){(function(){google.csct={};google.csct.ps='AOvVaw0Cm2vEm8JdOnaA04xMGvXk\x26ust\x3d1727422215713262';})();})();(function(){(function(){google.csct.rd=true;})();})();(function(){window.xp=function(b){function f(k,g,h){return"xp"+(g=="x"?"c":"x")+h}for(var c=/\bxp(x|c)(\d?)\b/,a=b;a;){var e=a.className,d=e.match(c);if(d){d=d[1]=="c";a.className=e.replace(c,f);b&&b.setAttribute("aria-expanded",d);if(d)for(b=a.getElementsByTagName("img"),c=0;c<b.length;++c)if(a=b[c],e=a.getAttribute("data-ll"))a.src=e,a.removeAttribute("data-ll");break}a=a.parentElement}};})();(function(){(function(){window.logVe=function(a){a&&a.attributes["data-ved"]&&window.ping("/gen_204?ved="+a.attributes["data-ved"].value)};}).call(this);})();(function(){(function(){var id='tsuid_1';var lve=true;(function(){
1036
- var e=typeof navigator!=="undefined"&&!/Opera/.test(navigator.userAgent)&&/WebKit/.test(navigator.userAgent),f={A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},g={Enter:13," ":32},h={A:13,BUTTON:0,CHECKBOX:32,COMBOBOX:13,FILE:0,GRIDCELL:13,LINK:13,LISTBOX:13,MENU:0,MENUBAR:0,MENUITEM:0,MENUITEMCHECKBOX:0,MENUITEMRADIO:0,OPTION:0,RADIO:32,RADIOGROUP:32,RESET:0,SUBMIT:0,SWITCH:32,TAB:0,TREE:13,TREEITEM:13},k={CHECKBOX:!0,FILE:!0,OPTION:!0,RADIO:!0},l={COLOR:!0,DATE:!0,DATETIME:!0,"DATETIME-LOCAL":!0,EMAIL:!0,MONTH:!0,NUMBER:!0,PASSWORD:!0,RANGE:!0,SEARCH:!0,TEL:!0,TEXT:!0,TEXTAREA:!0,TIME:!0,URL:!0,WEEK:!0};document.getElementById(id).onclick=function(){window.xp(this);lve&&window.logVe(this)};document.getElementById(id).onkeydown=function(d){var c=d.which||d.keyCode;!c&&d.key&&(c=g[d.key]);e&&c===3&&(c=13);if(c!==13&&c!==32)c=!1;else{var a=d.target;!a.getAttribute&&a.parentNode&&(a=a.parentNode);var b;if(!(b=d.type!=="keydown")){if(b="getAttribute"in a)b=!((a.getAttribute("type")||a.tagName).toUpperCase()in l);b=!(b&&!(a.tagName.toUpperCase()==="BUTTON"||a.type&&a.type.toUpperCase()==="FILE")&&!a.isContentEditable)}(b=b||d.ctrlKey||d.shiftKey||d.altKey||d.metaKey||(a.getAttribute("type")||
1037
- a.tagName).toUpperCase()in k&&c===32)||((b=a.tagName in f)||(b=a.getAttributeNode("tabindex"),b=b!=null&&b.specified),b=!(b&&!a.disabled));if(b)c=!1;else{b=(a.getAttribute("role")||a.type||a.tagName).toUpperCase();var m=!(b in h)&&c===13;a=a.tagName.toUpperCase()!=="INPUT"||!!a.type;c=(h[b]%c===0||m)&&a}}c&&(d.preventDefault(),window.xp(this),lve&&window.logVe(this))};}).call(this);})();})();(function(){window.jsl=window.jsl||{};window.jsl.dh=window.jsl.dh||function(i,c,d){try{var e=document.getElementById(i);if(e){e.innerHTML=c;if(d){d();}}else{if(window.jsl.el){window.jsl.el(new Error('Missing ID.'),{'id':i});}}}catch(e){if(window.jsl.el){window.jsl.el(new Error('jsl.dh'));}}};})();(function(){window.jsl.dh('accdef_1','\x3cdiv\x3e\x3cdiv style\x3d\x22padding-bottom:12px;padding-top:0px\x22 class\x3d\x22hwc kCrYT\x22\x3e\x3cdiv class\x3d\x22yStFkb\x22\x3e\x3cdiv class\x3d\x22Gx5Zad xpd EtOod pkphOe\x22\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3cdiv class\x3d\x22PqksIc nRlVm\x22\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3eWhen your app has everything it needs, deploying is easy. Just \x3cspan class\x3d\x22FCUp0c rQMQod\x22\x3ego to your workspace and click \x22Create app\x22 in the upper-right corner.\x3c/span\x3e \x3cspan class\x3d\x22FCUp0c rQMQod\x22\x3eFollow the prompts to fill in your app\x27s information, and then click \x22Deploy.\x22\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22x54gtf\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3ca href\x3d\x22/url?q\x3dhttps://docs.streamlit.io/deploy/streamlit-community-cloud/deploy-your-app\x26amp;sa\x3dU\x26amp;ved\x3d2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAQQBg\x26amp;usg\x3dAOvVaw3gVIJj2TrPN553e62-IQpj\x22 data-ved\x3d\x222ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAQQBg\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe vvjwJb AP7Wnd\x22\x3e\x3cspan class\x3d\x22rQMQod Xb5VRe\x22\x3ePrep and deploy your app on Community Cloud - Streamlit Docs\x3c/span\x3e\x3c/div\x3e\x3c/span\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe UPmit AP7Wnd\x22\x3edocs.streamlit.io \u203a deploy \u203a streamlit-community-cloud \u203a deploy-your-app\x3c/div\x3e\x3c/span\x3e\x3c/a\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22P1NWSe\x22\x3e\x3cdiv class\x3d\x22wOMIed nkPlDb\x22\x3e\x3cspan class\x3d\x22JhFlyf VQFmSd\x22\x3e\x3ca class\x3d\x22f4J0H\x22 href\x3d\x22https://www.google.com/search?sca_esv\x3d1ddba70af590f790\x26amp;sca_upv\x3d1\x26amp;ie\x3dUTF-8\x26amp;ei\x3dhw31ZreEKpDL1sQPt4GgkAg\x26amp;q\x3dHow+do+I+deploy+Streamlit+app+to+the+Internet?\x26amp;sa\x3dX\x26amp;ved\x3d2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQzmd6BAgEEAc\x22 data-ved\x3d\x222ahUKEwj3486ti-CIAxWQpZUCHbcACIIQzmd6BAgEEAc\x22\x3eMore results\x3c/a\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');})();(function(){(function(){var id='tsuid_2';var lve=true;(function(){
1038
- var e=typeof navigator!=="undefined"&&!/Opera/.test(navigator.userAgent)&&/WebKit/.test(navigator.userAgent),f={A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},g={Enter:13," ":32},h={A:13,BUTTON:0,CHECKBOX:32,COMBOBOX:13,FILE:0,GRIDCELL:13,LINK:13,LISTBOX:13,MENU:0,MENUBAR:0,MENUITEM:0,MENUITEMCHECKBOX:0,MENUITEMRADIO:0,OPTION:0,RADIO:32,RADIOGROUP:32,RESET:0,SUBMIT:0,SWITCH:32,TAB:0,TREE:13,TREEITEM:13},k={CHECKBOX:!0,FILE:!0,OPTION:!0,RADIO:!0},l={COLOR:!0,DATE:!0,DATETIME:!0,"DATETIME-LOCAL":!0,EMAIL:!0,MONTH:!0,NUMBER:!0,PASSWORD:!0,RANGE:!0,SEARCH:!0,TEL:!0,TEXT:!0,TEXTAREA:!0,TIME:!0,URL:!0,WEEK:!0};document.getElementById(id).onclick=function(){window.xp(this);lve&&window.logVe(this)};document.getElementById(id).onkeydown=function(d){var c=d.which||d.keyCode;!c&&d.key&&(c=g[d.key]);e&&c===3&&(c=13);if(c!==13&&c!==32)c=!1;else{var a=d.target;!a.getAttribute&&a.parentNode&&(a=a.parentNode);var b;if(!(b=d.type!=="keydown")){if(b="getAttribute"in a)b=!((a.getAttribute("type")||a.tagName).toUpperCase()in l);b=!(b&&!(a.tagName.toUpperCase()==="BUTTON"||a.type&&a.type.toUpperCase()==="FILE")&&!a.isContentEditable)}(b=b||d.ctrlKey||d.shiftKey||d.altKey||d.metaKey||(a.getAttribute("type")||
1039
- a.tagName).toUpperCase()in k&&c===32)||((b=a.tagName in f)||(b=a.getAttributeNode("tabindex"),b=b!=null&&b.specified),b=!(b&&!a.disabled));if(b)c=!1;else{b=(a.getAttribute("role")||a.type||a.tagName).toUpperCase();var m=!(b in h)&&c===13;a=a.tagName.toUpperCase()!=="INPUT"||!!a.type;c=(h[b]%c===0||m)&&a}}c&&(d.preventDefault(),window.xp(this),lve&&window.logVe(this))};}).call(this);})();})();(function(){window.jsl.dh('accdef_3','\x3cdiv\x3e\x3cdiv style\x3d\x22padding-bottom:12px;padding-top:0px\x22 class\x3d\x22hwc kCrYT\x22\x3e\x3cdiv class\x3d\x22yStFkb\x22\x3e\x3cdiv class\x3d\x22Gx5Zad xpd EtOod pkphOe\x22\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3cdiv class\x3d\x22PqksIc nRlVm\x22\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3e\x3cspan class\x3d\x22FCUp0c rQMQod\x22\x3eStreamlit is gaining traction among developers working with large language models (LLMs) for its ability to streamline web application development\x3c/span\x3e. In response to this trend, Dataquest added \x22Designing Dynamic Python Applications with Streamlit\x22, positioning learners at the forefront of generative AI technology.\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22x54gtf\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3ca href\x3d\x22/url?q\x3dhttps://www.dataquest.io/blog/why-should-you-learn-streamlit/\x26amp;sa\x3dU\x26amp;ved\x3d2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAQQDQ\x26amp;usg\x3dAOvVaw1rwOtI7wnyl1_BQf3yVkT8\x22 data-ved\x3d\x222ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAQQDQ\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe vvjwJb AP7Wnd\x22\x3e\x3cspan class\x3d\x22rQMQod Xb5VRe\x22\x3eWhy Should You Learn Streamlit in 2024? - DataQuest IO\x3c/span\x3e\x3c/div\x3e\x3c/span\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe UPmit AP7Wnd\x22\x3ewww.dataquest.io \u203a blog \u203a why-should-you-learn-streamlit\x3c/div\x3e\x3c/span\x3e\x3c/a\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22P1NWSe\x22\x3e\x3cdiv class\x3d\x22wOMIed nkPlDb\x22\x3e\x3cspan class\x3d\x22JhFlyf VQFmSd\x22\x3e\x3ca class\x3d\x22f4J0H\x22 href\x3d\x22https://www.google.com/search?sca_esv\x3d1ddba70af590f790\x26amp;sca_upv\x3d1\x26amp;ie\x3dUTF-8\x26amp;ei\x3dhw31ZreEKpDL1sQPt4GgkAg\x26amp;q\x3dIs+Streamlit+good+for+web+development?\x26amp;sa\x3dX\x26amp;ved\x3d2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQzmd6BAgEEA4\x22 data-ved\x3d\x222ahUKEwj3486ti-CIAxWQpZUCHbcACIIQzmd6BAgEEA4\x22\x3eMore results\x3c/a\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');})();(function(){(function(){var id='tsuid_3';var lve=true;(function(){
1040
- var e=typeof navigator!=="undefined"&&!/Opera/.test(navigator.userAgent)&&/WebKit/.test(navigator.userAgent),f={A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},g={Enter:13," ":32},h={A:13,BUTTON:0,CHECKBOX:32,COMBOBOX:13,FILE:0,GRIDCELL:13,LINK:13,LISTBOX:13,MENU:0,MENUBAR:0,MENUITEM:0,MENUITEMCHECKBOX:0,MENUITEMRADIO:0,OPTION:0,RADIO:32,RADIOGROUP:32,RESET:0,SUBMIT:0,SWITCH:32,TAB:0,TREE:13,TREEITEM:13},k={CHECKBOX:!0,FILE:!0,OPTION:!0,RADIO:!0},l={COLOR:!0,DATE:!0,DATETIME:!0,"DATETIME-LOCAL":!0,EMAIL:!0,MONTH:!0,NUMBER:!0,PASSWORD:!0,RANGE:!0,SEARCH:!0,TEL:!0,TEXT:!0,TEXTAREA:!0,TIME:!0,URL:!0,WEEK:!0};document.getElementById(id).onclick=function(){window.xp(this);lve&&window.logVe(this)};document.getElementById(id).onkeydown=function(d){var c=d.which||d.keyCode;!c&&d.key&&(c=g[d.key]);e&&c===3&&(c=13);if(c!==13&&c!==32)c=!1;else{var a=d.target;!a.getAttribute&&a.parentNode&&(a=a.parentNode);var b;if(!(b=d.type!=="keydown")){if(b="getAttribute"in a)b=!((a.getAttribute("type")||a.tagName).toUpperCase()in l);b=!(b&&!(a.tagName.toUpperCase()==="BUTTON"||a.type&&a.type.toUpperCase()==="FILE")&&!a.isContentEditable)}(b=b||d.ctrlKey||d.shiftKey||d.altKey||d.metaKey||(a.getAttribute("type")||
1041
- a.tagName).toUpperCase()in k&&c===32)||((b=a.tagName in f)||(b=a.getAttributeNode("tabindex"),b=b!=null&&b.specified),b=!(b&&!a.disabled));if(b)c=!1;else{b=(a.getAttribute("role")||a.type||a.tagName).toUpperCase();var m=!(b in h)&&c===13;a=a.tagName.toUpperCase()!=="INPUT"||!!a.type;c=(h[b]%c===0||m)&&a}}c&&(d.preventDefault(),window.xp(this),lve&&window.logVe(this))};}).call(this);})();})();(function(){window.jsl.dh('accdef_5','\x3cdiv\x3e\x3cdiv style\x3d\x22padding-bottom:12px;padding-top:0px\x22 class\x3d\x22hwc kCrYT\x22\x3e\x3cdiv class\x3d\x22yStFkb\x22\x3e\x3cdiv class\x3d\x22Gx5Zad xpd EtOod pkphOe\x22\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3cdiv class\x3d\x22PqksIc nRlVm\x22\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3eToday, native apps remain an essential part of the mobile app ecosystem, but PWA has become more pronounced in the software industry. \x3cspan class\x3d\x22FCUp0c rQMQod\x22\x3eBoth PWA and native apps are not mutually exclusive\x3c/span\x3e. The former is not designed to supersede the latter.\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22x54gtf\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3ca href\x3d\x22/url?q\x3dhttps://www.sommo.io/blog/pwa-vs-native-app-which-is-better-in-2024\x26amp;sa\x3dU\x26amp;ved\x3d2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAQQFA\x26amp;usg\x3dAOvVaw0XWXCEbZQO7Oyi8V7rDnW7\x22 data-ved\x3d\x222ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAQQFA\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe vvjwJb AP7Wnd\x22\x3e\x3cspan class\x3d\x22rQMQod Xb5VRe\x22\x3ePWA vs. Native App - Which is better in 2024? - Sommo\x3c/span\x3e\x3c/div\x3e\x3c/span\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe UPmit AP7Wnd\x22\x3ewww.sommo.io \u203a blog \u203a pwa-vs-native-app-which-is-better-in-2024\x3c/div\x3e\x3c/span\x3e\x3c/a\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22P1NWSe\x22\x3e\x3cdiv class\x3d\x22wOMIed nkPlDb\x22\x3e\x3cspan class\x3d\x22JhFlyf VQFmSd\x22\x3e\x3ca class\x3d\x22f4J0H\x22 href\x3d\x22https://www.google.com/search?sca_esv\x3d1ddba70af590f790\x26amp;sca_upv\x3d1\x26amp;ie\x3dUTF-8\x26amp;ei\x3dhw31ZreEKpDL1sQPt4GgkAg\x26amp;q\x3dCan+PWA+replace+mobile+apps?\x26amp;sa\x3dX\x26amp;ved\x3d2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQzmd6BAgEEBU\x22 data-ved\x3d\x222ahUKEwj3486ti-CIAxWQpZUCHbcACIIQzmd6BAgEEBU\x22\x3eMore results\x3c/a\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');})();(function(){(function(){var id='tsuid_4';var lve=true;(function(){
1042
- var e=typeof navigator!=="undefined"&&!/Opera/.test(navigator.userAgent)&&/WebKit/.test(navigator.userAgent),f={A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},g={Enter:13," ":32},h={A:13,BUTTON:0,CHECKBOX:32,COMBOBOX:13,FILE:0,GRIDCELL:13,LINK:13,LISTBOX:13,MENU:0,MENUBAR:0,MENUITEM:0,MENUITEMCHECKBOX:0,MENUITEMRADIO:0,OPTION:0,RADIO:32,RADIOGROUP:32,RESET:0,SUBMIT:0,SWITCH:32,TAB:0,TREE:13,TREEITEM:13},k={CHECKBOX:!0,FILE:!0,OPTION:!0,RADIO:!0},l={COLOR:!0,DATE:!0,DATETIME:!0,"DATETIME-LOCAL":!0,EMAIL:!0,MONTH:!0,NUMBER:!0,PASSWORD:!0,RANGE:!0,SEARCH:!0,TEL:!0,TEXT:!0,TEXTAREA:!0,TIME:!0,URL:!0,WEEK:!0};document.getElementById(id).onclick=function(){window.xp(this);lve&&window.logVe(this)};document.getElementById(id).onkeydown=function(d){var c=d.which||d.keyCode;!c&&d.key&&(c=g[d.key]);e&&c===3&&(c=13);if(c!==13&&c!==32)c=!1;else{var a=d.target;!a.getAttribute&&a.parentNode&&(a=a.parentNode);var b;if(!(b=d.type!=="keydown")){if(b="getAttribute"in a)b=!((a.getAttribute("type")||a.tagName).toUpperCase()in l);b=!(b&&!(a.tagName.toUpperCase()==="BUTTON"||a.type&&a.type.toUpperCase()==="FILE")&&!a.isContentEditable)}(b=b||d.ctrlKey||d.shiftKey||d.altKey||d.metaKey||(a.getAttribute("type")||
1043
- a.tagName).toUpperCase()in k&&c===32)||((b=a.tagName in f)||(b=a.getAttributeNode("tabindex"),b=b!=null&&b.specified),b=!(b&&!a.disabled));if(b)c=!1;else{b=(a.getAttribute("role")||a.type||a.tagName).toUpperCase();var m=!(b in h)&&c===13;a=a.tagName.toUpperCase()!=="INPUT"||!!a.type;c=(h[b]%c===0||m)&&a}}c&&(d.preventDefault(),window.xp(this),lve&&window.logVe(this))};}).call(this);})();})();(function(){window.jsl.dh('accdef_7','\x3cdiv\x3e\x3cdiv style\x3d\x22padding-bottom:12px;padding-top:0px\x22 class\x3d\x22hwc kCrYT\x22\x3e\x3cdiv class\x3d\x22yStFkb\x22\x3e\x3cdiv class\x3d\x22Gx5Zad xpd EtOod pkphOe\x22\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3cdiv class\x3d\x22q4vBJc\x22\x3e\x3c/div\x3e\x3cspan\x3e\x3ch2 class\x3d\x22zBAuLc l97dzf\x22\x3e\x3cdiv class\x3d\x22BNeawe deIvCb AP7Wnd\x22\x3e\x3cspan class\x3d\x22FCUp0c rQMQod\x22\x3eStreamlit as a web page\x3c/span\x3e\x3c/div\x3e\x3c/h2\x3e\x3c/span\x3e\x3c/div\x3e\x3cdiv class\x3d\x22Q0HXG\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22X7NTVe\x22\x3e\x3cdiv class\x3d\x22tHmfQe\x22\x3e\x3cdiv class\x3d\x22am3QBf\x22\x3e\x3cdiv class\x3d\x22pkr8ib\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe deIvCb AP7Wnd\x22\x3e1\x3c/div\x3e\x3c/span\x3e\x3c/div\x3e\x3cdiv\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe deIvCb AP7Wnd\x22\x3eCreate a github repository with your code and with a requirements. txt file (where you\x27ll add your app dependencies)\x3c/div\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22Q0HXG\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22X7NTVe\x22\x3e\x3cdiv class\x3d\x22tHmfQe\x22\x3e\x3cdiv class\x3d\x22am3QBf\x22\x3e\x3cdiv class\x3d\x22pkr8ib\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe deIvCb AP7Wnd\x22\x3e2\x3c/div\x3e\x3c/span\x3e\x3c/div\x3e\x3cdiv\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe deIvCb AP7Wnd\x22\x3eConnect the github repo with your streamlit account.\x3c/div\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22Q0HXG\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22X7NTVe\x22\x3e\x3cdiv class\x3d\x22tHmfQe\x22\x3e\x3cdiv class\x3d\x22am3QBf\x22\x3e\x3cdiv class\x3d\x22pkr8ib\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe deIvCb AP7Wnd\x22\x3e3\x3c/div\x3e\x3c/span\x3e\x3c/div\x3e\x3cdiv\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe deIvCb AP7Wnd\x22\x3eDeploy your app linking to the github repo where you stored the code.\x3c/div\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22Q0HXG\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22X7NTVe\x22\x3e\x3cdiv class\x3d\x22tHmfQe\x22\x3e\x3cdiv class\x3d\x22am3QBf\x22\x3e\x3cdiv class\x3d\x22pkr8ib\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe deIvCb AP7Wnd\x22\x3e4\x3c/div\x3e\x3c/span\x3e\x3c/div\x3e\x3cdiv\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe deIvCb AP7Wnd\x22\x3eYou\x27ve done!\x3c/div\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe uEec3 AP7Wnd\x22\x3e\x3cspan class\x3d\x22BNeawe\x22\x3e\x3ca href\x3d\x22/url?q\x3dhttps://discuss.streamlit.io/t/streamlit-as-a-web-page/39112\x26amp;sa\x3dU\x26amp;ved\x3d2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAQQGw\x26amp;usg\x3dAOvVaw37bYQrjp2LylSejwq0lVh4\x22 data-ved\x3d\x222ahUKEwj3486ti-CIAxWQpZUCHbcACIIQFnoECAQQGw\x22\x3e\x3cspan class\x3d\x22uEec3 AP7Wnd\x22\x3e\x3cspan class\x3d\x22rQMQod Xb5VRe\x22\x3eStreamlit as a web page\x3c/span\x3e\x3c/span\x3e\x3c/a\x3e\x3c/span\x3e\n\x3cspan class\x3d\x22BNeawe\x22\x3e\x3ca href\x3d\x22/url?q\x3dhttps://discuss.streamlit.io/t/streamlit-as-a-web-page/39112\x26amp;sa\x3dU\x26amp;ved\x3d2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQlqUEegQIBBAc\x26amp;usg\x3dAOvVaw0ujK9Vp7eZ8K2pFOoqY3k-\x22 data-ved\x3d\x222ahUKEwj3486ti-CIAxWQpZUCHbcACIIQlqUEegQIBBAc\x22\x3e\x3cspan class\x3d\x22uEec3 AP7Wnd\x22\x3e\x3cspan class\x3d\x22rQMQod aJyiOc\x22\x3ediscuss.streamlit.io \u203a streamlit-as-a-web-page\x3c/span\x3e\x3c/span\x3e\x3c/a\x3e\x3c/span\x3e\x3c/div\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22P1NWSe\x22\x3e\x3cdiv class\x3d\x22wOMIed nkPlDb\x22\x3e\x3cspan class\x3d\x22JhFlyf VQFmSd\x22\x3e\x3ca class\x3d\x22f4J0H\x22 href\x3d\x22https://www.google.com/search?sca_esv\x3d1ddba70af590f790\x26amp;sca_upv\x3d1\x26amp;ie\x3dUTF-8\x26amp;ei\x3dhw31ZreEKpDL1sQPt4GgkAg\x26amp;q\x3dHow+do+I+create+a+Web+page+using+Streamlit?\x26amp;sa\x3dX\x26amp;ved\x3d2ahUKEwj3486ti-CIAxWQpZUCHbcACIIQzmd6BAgEEB0\x22 data-ved\x3d\x222ahUKEwj3486ti-CIAxWQpZUCHbcACIIQzmd6BAgEEB0\x22\x3eMore results\x3c/a\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');})();if (!google.stvsc){google.drty && google.drty(undefined,true);}
1044
- </script>
1045
- </body>
1046
- </html>