diff --git a/frontends/stapp.py b/frontends/stapp.py index ab680160..8fcf4b20 100644 --- a/frontends/stapp.py +++ b/frontends/stapp.py @@ -21,6 +21,19 @@ from export_cmd import last_assistant_text, export_to_temp, wrap_for_clipboard st.set_page_config(page_title="Cowork", layout="wide", initial_sidebar_state="collapsed") +st.markdown(""" + +""", unsafe_allow_html=True) + LANG = os.environ.get('GA_LANG', 'zh') if LANG not in ('zh', 'en'): LANG = 'zh' I18N = { @@ -233,20 +246,6 @@ try: _embed_html = lambda html, **kw: _st_iframe(html, **{k: max(v, 1) if isinstance(v, int) else v for k, v in kw.items()}) except (ImportError, AttributeError): from streamlit.components.v1 import html as _embed_html # ≤1.55 -_js_scroll_fix = ( - "!function(){var p=window.parent;if(p.__sfx2)return;p.__sfx2=1;var d=p.document;" - "var pending=0;" - "function f(){pending=0;var m=d.querySelector('section.main');if(!m)return;" - "var s=m.scrollTop,h=m.scrollHeight;" - "m.style.minHeight=h+1+'px';void m.offsetHeight;" - "m.style.minHeight='';void m.offsetHeight;" - "m.scrollTop=s}" - "function schedule(){if(!pending){pending=1;requestAnimationFrame(f)}}" - "d.addEventListener('transitionend',function(e){" - "e.target.closest&&e.target.closest('details')&&setTimeout(schedule,60)},!0);" - "new MutationObserver(function(){setTimeout(schedule,80)})" - ".observe(d.body,{subtree:1,attributes:1,attributeFilter:['open']})}()" -) # IME composition fix (macOS only) - prevents Enter from submitting during CJK input _js_ime_fix = ("" if os.name == 'nt' else "!function(){if(window.parent.__imeFix)return;window.parent.__imeFix=1;" diff --git a/llmcore.py b/llmcore.py index aec286af..3f22a78a 100644 --- a/llmcore.py +++ b/llmcore.py @@ -1,4 +1,4 @@ -import os, json, re, time, requests, sys, threading, urllib3, base64, importlib, uuid +import os, json, re, time, requests, sys, threading, urllib3, base64, importlib, uuid, pathlib from datetime import datetime urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) _RESP_CACHE_KEY = str(uuid.uuid4()) @@ -386,6 +386,7 @@ def _stream_with_retry(sess, url, headers, payload, parse_fn): if not e.value and not streamed: raise requests.ConnectionError("empty response") return e.value or [] except (requests.Timeout, requests.ConnectionError) as e: + #pathlib.Path(__file__).parent.joinpath('temp','bad_requests.json').write_text(json.dumps({"url":url,"headers":headers,"payload":payload,"err":str(e),"t":time.time()},ensure_ascii=False),encoding='utf-8') err = f"!!!Error: {type(e).__name__}" if attempt < sess.max_retries: d = _delay(None, attempt) @@ -534,7 +535,7 @@ class BaseSession: self.max_retries = max(0, int(cfg.get('max_retries', 4))) self.verify = cfg.get('verify', True) self.stream = cfg.get('stream', True) - default_ct, default_rt = (5, 30) if self.stream else (10, 240) + default_ct, default_rt = (5, 40) if self.stream else (10, 240) self.connect_timeout = max(1, int(cfg.get('timeout', default_ct))) self.read_timeout = max(5, int(cfg.get('read_timeout', default_rt))) def _enum(key, valid):