IPF commited on
Commit
9a387e0
ยท
verified ยท
1 Parent(s): 0b0f244

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -3
app.py CHANGED
@@ -447,6 +447,7 @@ html:not(.dark) .log-tname { color: #C2860A; font-weight: 600; }
447
  .lb-final { background: rgba(61,214,140,.18); color: #3DD68C; }
448
  .lb-info { background: rgba(140,140,180,.10); color: #6B6B8A; }
449
  .lb-misc { background: rgba(140,140,180,.10); color: #6B6B8A; }
 
450
 
451
  /* โ”€โ”€ Status box โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
452
  .status-box textarea {
@@ -785,8 +786,24 @@ def _fmt_event(event: Dict[str, Any]) -> str:
785
  ts = _ts()
786
  tss = f'<span class="log-ts">[{ts}]</span> '
787
 
788
- if et in ("turn_start", "message_start"):
 
 
789
  return ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
790
  if et == "message_update":
791
  ame = event.get("assistantMessageEvent", {})
792
  if ame.get("type") == "text_delta":
@@ -794,6 +811,8 @@ def _fmt_event(event: Dict[str, Any]) -> str:
794
  if delta:
795
  return f'<span class="log-text">{_esc(delta)}</span>'
796
  return ""
 
 
797
  if et == "message_end":
798
  content = event.get("content", "") or event.get("text", "")
799
  if content:
@@ -802,6 +821,23 @@ def _fmt_event(event: Dict[str, Any]) -> str:
802
  f'<span class="log-text">{_esc(content)}</span></div>'
803
  )
804
  return ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
805
  if et == "tool_execution_start":
806
  name = event.get("toolName", "unknown")
807
  args = event.get("args", {})
@@ -812,6 +848,8 @@ def _fmt_event(event: Dict[str, Any]) -> str:
812
  f' <span class="log-tname">{_esc(name)}</span>'
813
  f'<span class="log-args"> {astr}</span></div>'
814
  )
 
 
815
  if et == "tool_execution_end":
816
  name = event.get("toolName", "unknown")
817
  is_err = event.get("isError", False)
@@ -822,9 +860,11 @@ def _fmt_event(event: Dict[str, Any]) -> str:
822
  return (
823
  f'<div class="log-row">{tss}'
824
  f'<span class="lbadge {badge}">{label}</span>'
825
- f' <span class="log-tname">{_esc(name)}</span></div>'
826
- f'<span class="log-result">โ†ณ {prev}</span>'
827
  )
 
 
828
  if et == "agent_end":
829
  note = event.get("note", "")
830
  extra = f' <span class="log-text">{_esc(note)}</span>' if note else ""
@@ -832,17 +872,26 @@ def _fmt_event(event: Dict[str, Any]) -> str:
832
  f'<div class="log-row">{tss}'
833
  f'<span class="lbadge lb-done">AGENT END</span>{extra}</div>'
834
  )
 
 
835
  if et == "error":
836
  return (
837
  f'<div class="log-row">{tss}'
838
  f'<span class="lbadge lb-err">ERROR</span>'
839
  f' <span class="log-text" style="color:#FC8181">{_esc(event.get("error","?"))}</span></div>'
840
  )
 
 
841
  if et == "__final__":
842
  return (
843
  f'<div class="log-row">{tss}'
844
  f'<span class="lbadge lb-final">โœ“ FINAL ANSWER RECEIVED</span></div>'
845
  )
 
 
 
 
 
846
  content = _esc(json.dumps(event, ensure_ascii=False, default=str)[:200])
847
  return (
848
  f'<div class="log-row">{tss}'
 
447
  .lb-final { background: rgba(61,214,140,.18); color: #3DD68C; }
448
  .lb-info { background: rgba(140,140,180,.10); color: #6B6B8A; }
449
  .lb-misc { background: rgba(140,140,180,.10); color: #6B6B8A; }
450
+ .lb-think { background: rgba(196,191,255,.16); color: #C4BFFF; }
451
 
452
  /* โ”€โ”€ Status box โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */
453
  .status-box textarea {
 
786
  ts = _ts()
787
  tss = f'<span class="log-ts">[{ts}]</span> '
788
 
789
+ # โ”€โ”€ drop noisy / always-empty events โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
790
+ if et in ("turn_start", "message_start", "agent_start",
791
+ "provider_request_context", "response"):
792
  return ""
793
+
794
+ # โ”€โ”€ turn_end: show thinking if present, else skip โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
795
+ if et == "turn_end":
796
+ thinking = event.get("thinking", "")
797
+ if not thinking:
798
+ return ""
799
+ preview = _esc(thinking[:300].replace("\n", " ")) + (" โ€ฆ" if len(thinking) > 300 else "")
800
+ return (
801
+ f'<div class="log-row">{tss}'
802
+ f'<span class="lbadge lb-think">THINKING</span>'
803
+ f'<span class="log-result">โ†ณ {preview}</span></div>'
804
+ )
805
+
806
+ # โ”€โ”€ streaming text delta โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
807
  if et == "message_update":
808
  ame = event.get("assistantMessageEvent", {})
809
  if ame.get("type") == "text_delta":
 
811
  if delta:
812
  return f'<span class="log-text">{_esc(delta)}</span>'
813
  return ""
814
+
815
+ # โ”€โ”€ message_end โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
816
  if et == "message_end":
817
  content = event.get("content", "") or event.get("text", "")
818
  if content:
 
821
  f'<span class="log-text">{_esc(content)}</span></div>'
822
  )
823
  return ""
824
+
825
+ # โ”€โ”€ tool update: only show if there is actual partial output โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
826
+ if et == "tool_execution_update":
827
+ output = (event.get("output") or event.get("partialOutput")
828
+ or event.get("delta") or "")
829
+ if not output:
830
+ return ""
831
+ name = event.get("toolName", "")
832
+ preview = _esc(str(output)[:200].replace("\n", " ")) + (" โ€ฆ" if len(str(output)) > 200 else "")
833
+ return (
834
+ f'<div class="log-row">{tss}'
835
+ f'<span class="lbadge lb-ts">TOOL โ€ฆ</span>'
836
+ f' <span class="log-tname">{_esc(name)}</span>'
837
+ f'<span class="log-result">โ†ณ {preview}</span></div>'
838
+ )
839
+
840
+ # โ”€โ”€ tool start โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
841
  if et == "tool_execution_start":
842
  name = event.get("toolName", "unknown")
843
  args = event.get("args", {})
 
848
  f' <span class="log-tname">{_esc(name)}</span>'
849
  f'<span class="log-args"> {astr}</span></div>'
850
  )
851
+
852
+ # โ”€โ”€ tool end โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
853
  if et == "tool_execution_end":
854
  name = event.get("toolName", "unknown")
855
  is_err = event.get("isError", False)
 
860
  return (
861
  f'<div class="log-row">{tss}'
862
  f'<span class="lbadge {badge}">{label}</span>'
863
+ f' <span class="log-tname">{_esc(name)}</span>'
864
+ f'<span class="log-result">โ†ณ {prev}</span></div>'
865
  )
866
+
867
+ # โ”€โ”€ agent end โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
868
  if et == "agent_end":
869
  note = event.get("note", "")
870
  extra = f' <span class="log-text">{_esc(note)}</span>' if note else ""
 
872
  f'<div class="log-row">{tss}'
873
  f'<span class="lbadge lb-done">AGENT END</span>{extra}</div>'
874
  )
875
+
876
+ # โ”€โ”€ error โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
877
  if et == "error":
878
  return (
879
  f'<div class="log-row">{tss}'
880
  f'<span class="lbadge lb-err">ERROR</span>'
881
  f' <span class="log-text" style="color:#FC8181">{_esc(event.get("error","?"))}</span></div>'
882
  )
883
+
884
+ # โ”€โ”€ final sentinel โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
885
  if et == "__final__":
886
  return (
887
  f'<div class="log-row">{tss}'
888
  f'<span class="lbadge lb-final">โœ“ FINAL ANSWER RECEIVED</span></div>'
889
  )
890
+
891
+ # โ”€โ”€ unknown: only show if there is something meaningful โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
892
+ keys = {k for k in event if k != "type"}
893
+ if not keys:
894
+ return ""
895
  content = _esc(json.dumps(event, ensure_ascii=False, default=str)[:200])
896
  return (
897
  f'<div class="log-row">{tss}'