diff --git a/packages/gui-extensions/src/debug/bar.tsx b/packages/gui-extensions/src/debug/bar.tsx index 1febe3017007..fb6019043ff5 100644 --- a/packages/gui-extensions/src/debug/bar.tsx +++ b/packages/gui-extensions/src/debug/bar.tsx @@ -5,14 +5,9 @@ import { Icon } from "@opencode/ui/icon" import { IconButton } from "@opencode/ui/icon-button" import { Tooltip } from "@opencode/ui/tooltip" import { createKeyed, useExtension } from "../sdk" -import { - applyProviderMetricEvent, - isProviderMetricEvent, - projectedProviderMetrics, - type ProviderMetrics, - type ProviderMetricState, -} from "./metrics" import { motionGlobals, motionTuning } from "@opencode/ui/motion-tuning" +import { duration } from "@opencode/util/duration" +import { SessionTurn } from "@opencode/util/session-turn" type Mem = Performance & { memory?: { @@ -75,14 +70,6 @@ const mb = (n?: number) => { return `${v >= 1024 ? v.toFixed(0) : v.toFixed(1)}MB` } -const duration = (n?: number) => { - if (n === undefined || Number.isNaN(n)) return - - if (n < 1_000) return `${Math.round(n)}ms` - - return `${(n / 1_000).toFixed(n < 10_000 ? 1 : 0)}s` -} - const bad = (n: number | undefined, limit: number, low = false) => { if (n === undefined || Number.isNaN(n)) return false @@ -241,43 +228,37 @@ export default function DebugBar(props: { { equals: (a, b) => a?.data === b?.data && a?.id === b?.id }, ) - // History comes from the already-loaded message projection; live requests refine it in place. - const projected = createMemo(() => { + // The numbers on the TUI's latest assistant footer, which follows a step that ended the turn, failed, or is retrying. + const turn = createMemo(() => { const current = target() if (!current) return - return projectedProviderMetrics(current.data.session.message.list(current.id)) + const messages = current.data.session.message.list(current.id) + + const index = messages.findLastIndex( + (item) => + item.type === "assistant" && + Boolean(item.retry || item.error || (item.finish && !["tool-calls", "unknown"].includes(item.finish))), + ) + + if (index === -1) return + + const options = { index, legacy: SessionTurn.legacy(messages) } + // The TUI hides a zero duration, which means the step has not completed. + const elapsed = SessionTurn.duration(messages, messages[index], options) + + return { + duration: elapsed ? duration(elapsed) : undefined, + tps: SessionTurn.tokensPerSecond(messages, messages[index], options), + } }) - // Missed events during an outage are never replayed, so live metrics hold only for the target and the outage count - // they were measured under: after a disconnect the refreshed projection wins until the next live request. - const outages = createMemo((count: number = 0) => (target()?.server.connected ? count : count + 1)) // The Motion workspace's global speed, kept in view while tuning. const [globals, setGlobals] = createSignal({ speed: motionGlobals.speed.value, slow: motionGlobals.slow.value }) onCleanup( motionTuning.subscribe(() => setGlobals({ speed: motionGlobals.speed.value, slow: motionGlobals.slow.value })), ) - const [live, setLive] = createSignal<{ target: object; outages: number; metrics: ProviderMetrics }>() - - const metrics = () => { - const current = live() - - return current && current.target === target() && current.outages === outages() ? current.metrics : projected() - } - - createKeyed(target, (current) => { - const accumulator: ProviderMetricState = {} - - onCleanup( - current.data.listen(({ details }) => { - if (!isProviderMetricEvent(details) || details.data.sessionID !== current.id) return - applyProviderMetricEvent(accumulator, details) - - if (accumulator.latest) setLive({ target: current, outages: outages(), metrics: accumulator.latest }) - }), - ) - }) const na = () => ctx.t("na").toUpperCase() const heap = () => (state.heap.limit ? (state.heap.used ?? 0) / state.heap.limit : undefined) @@ -627,31 +608,17 @@ export default function DebugBar(props: { - - diff --git a/packages/gui-extensions/src/debug/i18n/am.ts b/packages/gui-extensions/src/debug/i18n/am.ts index 8ca5c81c7703..2fdb058d67d1 100644 --- a/packages/gui-extensions/src/debug/i18n/am.ts +++ b/packages/gui-extensions/src/debug/i18n/am.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "የልማት አፈጻጸም ምርመራዎች", providerAriaLabel: "የአቅራቢ አፈጻጸም ምርመራ", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "የአቅራቢው ጥያቄ ከተላከበት ጊዜ እስከ ሞዴሉ የመጀመሪያ ውጤት ድረስ ያለው ጊዜ።", - "ttfa.label": "TTFA", - "ttfa.tip": "የአቅራቢው ጥያቄ ከተላከበት ጊዜ እስከ የመጀመሪያው የመልስ ጽሑፍ ድረስ ያለው ጊዜ።", + "duration.label": "TIME", + "duration.tip": "የመጨረሻውን ዙር ከጀመረው ጥያቄ እስከ ምላሹ መጠናቀቅ ድረስ ያለው ጊዜ።", "tps.label": "TPS", - "tps.tip": "ከሞዴሉ የመጀመሪያ ውጤት በኋላ በሰከንድ የሚወጡ ቶከኖች።", - "e2e.label": "E2E", - "e2e.tip": "የአቅራቢው ጥያቄ ከተላከበት ጊዜ እስከ የምላሽ ዥረቱ መጨረሻ ድረስ ያለው ጊዜ።", + "tps.tip": "በመጨረሻው ዙር የሞዴል ጥያቄዎች ውስጥ በሰከንድ የሚወጡ የውጤት እና የማሰብ ቶከኖች፣ የመሳሪያ ጊዜን ሳይጨምር።", "nav.label": "NAV", "nav.tip": "የክፍለ ጊዜ ገጽን የነካው የመጨረሻው የተጠናቀቀ የመንገድ ሽግግር፣ ከራውተር ጅምር እስከ ከተረጋጋ በኋላ የመጀመሪያው ስዕል ድረስ የሚለካ።", "fps.label": "FPS", diff --git a/packages/gui-extensions/src/debug/i18n/ar.ts b/packages/gui-extensions/src/debug/i18n/ar.ts index eacd5950e841..a2523fd91ead 100644 --- a/packages/gui-extensions/src/debug/i18n/ar.ts +++ b/packages/gui-extensions/src/debug/i18n/ar.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "تشخيص أداء التطوير", providerAriaLabel: "تشخيص أداء المزوّد", na: "غير متاح", - "ttft.label": "TTFT", - "ttft.tip": "الوقت من إرسال طلب المزوّد إلى أول مخرجات للنموذج.", - "ttfa.label": "TTFA", - "ttfa.tip": "الوقت من إرسال طلب المزوّد إلى أول نص في الإجابة.", + "duration.label": "TIME", + "duration.tip": "الوقت من الطلب الذي بدأ الدورة الأخيرة حتى اكتمال استجابتها.", "tps.label": "TPS", - "tps.tip": "رموز الإخراج في الثانية بعد أول مخرجات للنموذج.", - "e2e.label": "E2E", - "e2e.tip": "الوقت من إرسال طلب المزوّد حتى انتهاء تدفق استجابته.", + "tps.tip": "رموز الإخراج والاستدلال في الثانية عبر طلبات النموذج في الدورة الأخيرة، باستثناء وقت الأدوات.", "nav.label": "NAV", "nav.tip": "آخر انتقال مكتمل للمسار يتضمن صفحة جلسة، مُقاسًا من بدء التوجيه حتى أول رسم بعد استقراره.", "fps.label": "FPS", diff --git a/packages/gui-extensions/src/debug/i18n/az.ts b/packages/gui-extensions/src/debug/i18n/az.ts index 9ca687ad78c6..5485732522fc 100644 --- a/packages/gui-extensions/src/debug/i18n/az.ts +++ b/packages/gui-extensions/src/debug/i18n/az.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Tərtibatçı performans diaqnostikası", providerAriaLabel: "Provayder performansının diaqnostikası", na: "yox", - "ttft.label": "TTFT", - "ttft.tip": "Provayder sorğusunun göndərilməsindən modelin ilk çıxışına qədər olan vaxt.", - "ttfa.label": "TTFA", - "ttfa.tip": "Provayder sorğusunun göndərilməsindən cavabın ilk mətninə qədər olan vaxt.", + "duration.label": "TIME", + "duration.tip": "Son növbəni başladan sorğudan cavabının tamamlanmasına qədər keçən vaxt.", "tps.label": "TPS", - "tps.tip": "Modelin ilk çıxışından sonra saniyədə çıxış tokenlərinin sayı.", - "e2e.label": "E2E", - "e2e.tip": "Provayder sorğusunun göndərilməsindən cavab axınının bitməsinə qədər olan vaxt.", + "tps.tip": "Son növbənin model sorğuları üzrə saniyədə çıxış və düşünmə tokenləri, alət vaxtı istisna olmaqla.", "nav.label": "NAV", "nav.tip": "Sessiya səhifəsinə aid son tamamlanmış marşrut keçidi; marşrutlaşdırıcının başladığı andan keçid tamamlandıqdan sonrakı ilk göstərilməyədək ölçülür.", diff --git a/packages/gui-extensions/src/debug/i18n/bg.ts b/packages/gui-extensions/src/debug/i18n/bg.ts index 45288e68ae94..e53894499db6 100644 --- a/packages/gui-extensions/src/debug/i18n/bg.ts +++ b/packages/gui-extensions/src/debug/i18n/bg.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Диагностика на ефективността на разработката", providerAriaLabel: "Диагностика на производителността на доставчика", na: "няма", - "ttft.label": "TTFT", - "ttft.tip": "Време от изпращането на заявката към доставчика до първия изход от модела.", - "ttfa.label": "TTFA", - "ttfa.tip": "Време от изпращането на заявката към доставчика до първия текст на отговора.", + "duration.label": "TIME", + "duration.tip": "Време от заявката, започнала последния ход, до завършването на отговора.", "tps.label": "TPS", - "tps.tip": "Изходни токени в секунда след първия изход от модела.", - "e2e.label": "E2E", - "e2e.tip": "Време от изпращането на заявката към доставчика до края на потока с отговора.", + "tps.tip": + "Изходни токени и токени за разсъждение в секунда за заявките към модела в последния ход, без времето на инструментите.", "nav.label": "NAV", "nav.tip": "Последен завършен преход на маршрута, докосващ страница на сесия, измерен от началото на рутера до първото боядисване след установяването му.", diff --git a/packages/gui-extensions/src/debug/i18n/bn.ts b/packages/gui-extensions/src/debug/i18n/bn.ts index f93c036216e3..27f10c1ed9b0 100644 --- a/packages/gui-extensions/src/debug/i18n/bn.ts +++ b/packages/gui-extensions/src/debug/i18n/bn.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "উন্নয়ন কর্মক্ষমতা ডায়গনিস্টিক", providerAriaLabel: "প্রদানকারীর কর্মক্ষমতা নির্ণয়", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "প্রদানকারীর অনুরোধ পাঠানো থেকে মডেলের প্রথম আউটপুট পর্যন্ত সময়।", - "ttfa.label": "TTFA", - "ttfa.tip": "প্রদানকারীর অনুরোধ পাঠানো থেকে উত্তরের প্রথম লেখা পর্যন্ত সময়।", + "duration.label": "TIME", + "duration.tip": "সর্বশেষ টার্ন শুরু করা প্রম্পট থেকে তার উত্তর সম্পূর্ণ হওয়া পর্যন্ত সময়।", "tps.label": "TPS", - "tps.tip": "মডেলের প্রথম আউটপুটের পর প্রতি সেকেন্ডে আউটপুট টোকেনের সংখ্যা।", - "e2e.label": "E2E", - "e2e.tip": "প্রদানকারীর অনুরোধ পাঠানো থেকে তার প্রতিক্রিয়া স্ট্রিম শেষ হওয়া পর্যন্ত সময়।", + "tps.tip": "সর্বশেষ টার্নের মডেল অনুরোধগুলিতে প্রতি সেকেন্ডে আউটপুট ও রিজনিং টোকেন, টুলের সময় বাদে।", "nav.label": "এনএভি", "nav.tip": "একটি সেশন পৃষ্ঠা স্পর্শ করে শেষ সম্পন্ন রুট ট্রানজিশন, রাউটার শুরু থেকে এটি স্থির হওয়ার পরে প্রথম পেইন্ট পর্যন্ত পরিমাপ করা হয়।", diff --git a/packages/gui-extensions/src/debug/i18n/br.ts b/packages/gui-extensions/src/debug/i18n/br.ts index 71b61e4ad3a9..9262b063e83d 100644 --- a/packages/gui-extensions/src/debug/i18n/br.ts +++ b/packages/gui-extensions/src/debug/i18n/br.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnóstico de desempenho de desenvolvimento", providerAriaLabel: "Diagnóstico de desempenho do provedor", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Tempo entre o envio da solicitação ao provedor e a primeira saída do modelo.", - "ttfa.label": "TTFA", - "ttfa.tip": "Tempo entre o envio da solicitação ao provedor e o primeiro texto da resposta.", + "duration.label": "TIME", + "duration.tip": "Tempo entre o prompt que iniciou o último turno e a conclusão da resposta.", "tps.label": "TPS", - "tps.tip": "Tokens de saída por segundo após a primeira saída do modelo.", - "e2e.label": "E2E", - "e2e.tip": "Tempo entre o envio da solicitação ao provedor e o fim do fluxo de resposta.", + "tps.tip": + "Tokens de saída e de raciocínio por segundo nas requisições ao modelo do último turno, sem contar o tempo das ferramentas.", "nav.label": "NAV", "nav.tip": "Última transição de rota concluída tocando em uma página de sessão, medida desde o início do roteador até a primeira pintura após o estabelecimento.", diff --git a/packages/gui-extensions/src/debug/i18n/bs.ts b/packages/gui-extensions/src/debug/i18n/bs.ts index 3c54d9d17e75..7acf306248b5 100644 --- a/packages/gui-extensions/src/debug/i18n/bs.ts +++ b/packages/gui-extensions/src/debug/i18n/bs.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Dijagnostika performansi razvoja", providerAriaLabel: "Dijagnostika performansi pružaoca usluge", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Vrijeme od slanja zahtjeva pružaocu do prvog izlaza modela.", - "ttfa.label": "TTFA", - "ttfa.tip": "Vrijeme od slanja zahtjeva pružaocu do prvog teksta odgovora.", + "duration.label": "TIME", + "duration.tip": "Vrijeme od upita koji je započeo posljednji potez do završetka odgovora.", "tps.label": "TPS", - "tps.tip": "Izlazni tokeni u sekundi nakon prvog izlaza modela.", - "e2e.label": "E2E", - "e2e.tip": "Vrijeme od slanja zahtjeva pružaocu do završetka toka odgovora.", + "tps.tip": + "Izlazni tokeni i tokeni rasuđivanja u sekundi kroz zahtjeve modelu u posljednjem potezu, bez vremena alata.", "nav.label": "NAV", "nav.tip": "Posljednji završeni prelazak rute koji dotiče stranicu sesije, mjeren od početka rutera do prvog iscrtavanja nakon smirivanja.", diff --git a/packages/gui-extensions/src/debug/i18n/ca.ts b/packages/gui-extensions/src/debug/i18n/ca.ts index f6129cd5ca1a..b4eba5b361d3 100644 --- a/packages/gui-extensions/src/debug/i18n/ca.ts +++ b/packages/gui-extensions/src/debug/i18n/ca.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnòstic de rendiment del desenvolupament", providerAriaLabel: "Diagnòstic del rendiment del proveïdor", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Temps des de l’enviament de la sol·licitud al proveïdor fins a la primera sortida del model.", - "ttfa.label": "TTFA", - "ttfa.tip": "Temps des de l’enviament de la sol·licitud al proveïdor fins al primer text de resposta.", + "duration.label": "TIME", + "duration.tip": "Temps des de la sol·licitud que va iniciar l'últim torn fins que la resposta va acabar.", "tps.label": "TPS", - "tps.tip": "Fitxes de sortida per segon després de la primera sortida del model.", - "e2e.label": "E2E", - "e2e.tip": "Temps des de l’enviament de la sol·licitud al proveïdor fins que finalitza el flux de resposta.", + "tps.tip": + "Fitxes de sortida i de raonament per segon en les peticions al model de l'últim torn, sense comptar el temps de les eines.", "nav.label": "NAV", "nav.tip": "L'última transició de ruta completada tocant una pàgina de sessió, mesurada des de l'inici de l'encaminador fins a la primera pintura després que s'instal·li.", diff --git a/packages/gui-extensions/src/debug/i18n/cs.ts b/packages/gui-extensions/src/debug/i18n/cs.ts index 5dee10ec2b3c..fcf3b9cce6d9 100644 --- a/packages/gui-extensions/src/debug/i18n/cs.ts +++ b/packages/gui-extensions/src/debug/i18n/cs.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnostika vývoje výkonnosti", providerAriaLabel: "Diagnostika výkonu poskytovatele", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Doba od odeslání požadavku poskytovateli do prvního výstupu modelu.", - "ttfa.label": "TTFA", - "ttfa.tip": "Doba od odeslání požadavku poskytovateli do prvního textu odpovědi.", + "duration.label": "TIME", + "duration.tip": "Doba od výzvy, která zahájila poslední tah, do dokončení odpovědi.", "tps.label": "TPS", - "tps.tip": "Počet výstupních tokenů za sekundu po prvním výstupu modelu.", - "e2e.label": "E2E", - "e2e.tip": "Doba od odeslání požadavku poskytovateli do ukončení proudu odpovědi.", + "tps.tip": + "Výstupní tokeny a tokeny uvažování za sekundu napříč požadavky na model v posledním tahu, bez času nástrojů.", "nav.label": "NAV", "nav.tip": "Poslední dokončený přechod trasy dotykem stránky relace, měřeno od spuštění routeru do prvního nátěru po jeho usazení.", diff --git a/packages/gui-extensions/src/debug/i18n/da.ts b/packages/gui-extensions/src/debug/i18n/da.ts index 858267f3cad9..8cf8da5b36de 100644 --- a/packages/gui-extensions/src/debug/i18n/da.ts +++ b/packages/gui-extensions/src/debug/i18n/da.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Udviklingsydelsesdiagnostik", providerAriaLabel: "Diagnosticering af udbyderens ydeevne", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Tid fra afsendelse af udbyderanmodningen til modellens første output.", - "ttfa.label": "TTFA", - "ttfa.tip": "Tid fra afsendelse af udbyderanmodningen til den første svartekst.", + "duration.label": "TIME", + "duration.tip": "Tid fra prompten, der startede den seneste tur, til svaret var færdigt.", "tps.label": "TPS", - "tps.tip": "Outputtokens pr. sekund efter modellens første output.", - "e2e.label": "E2E", - "e2e.tip": "Tid fra afsendelse af udbyderanmodningen, til dens svarstream sluttede.", + "tps.tip": + "Output- og ræsonneringstokens pr. sekund på tværs af den seneste turs modelforespørgsler, uden værktøjstid.", "nav.label": "NAV", "nav.tip": "Sidste gennemførte ruteovergang, der berører en sessionsside, målt fra routerstart til den første optegning efter den falder til ro.", diff --git a/packages/gui-extensions/src/debug/i18n/de.ts b/packages/gui-extensions/src/debug/i18n/de.ts index 4cf06ac31f86..fdac71917120 100644 --- a/packages/gui-extensions/src/debug/i18n/de.ts +++ b/packages/gui-extensions/src/debug/i18n/de.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Leistungsdiagnose für die Entwicklung", providerAriaLabel: "Leistungsdiagnose des Anbieters", na: "n.v.", - "ttft.label": "TTFT", - "ttft.tip": "Zeit vom Senden der Anbieteranfrage bis zur ersten Modellausgabe.", - "ttfa.label": "TTFA", - "ttfa.tip": "Zeit vom Senden der Anbieteranfrage bis zum ersten Antworttext.", + "duration.label": "TIME", + "duration.tip": "Zeit vom Prompt, der die letzte Runde gestartet hat, bis zum Abschluss der Antwort.", "tps.label": "TPS", - "tps.tip": "Ausgabetokens pro Sekunde nach der ersten Modellausgabe.", - "e2e.label": "E2E", - "e2e.tip": "Zeit vom Senden der Anbieteranfrage bis zum Ende ihres Antwortstreams.", + "tps.tip": "Ausgabe- und Reasoning-Tokens pro Sekunde über die Modellanfragen der letzten Runde, ohne Werkzeugzeit.", "nav.label": "NAV", "nav.tip": "Letzter abgeschlossener Routenübergang zu einer Sitzungsseite, gemessen vom Start des Routers bis zum ersten Rendering nach Abschluss des Übergangs.", diff --git a/packages/gui-extensions/src/debug/i18n/dv.ts b/packages/gui-extensions/src/debug/i18n/dv.ts index 4d62c9b8238e..e9b8c563f873 100644 --- a/packages/gui-extensions/src/debug/i18n/dv.ts +++ b/packages/gui-extensions/src/debug/i18n/dv.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "ޑިވެލޮޕްމަންޓް ޕާފޯމަންސް ޑައިގްނޯސްޓިކްސް", providerAriaLabel: "ޕްރޮވައިޑަރ ޕަފޯމަންސް ޑައިއަގްނޮސްޓިކްސް", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "ޕްރޮވައިޑަރ ރިކުއެސްޓް ފޮނުވުނު ގަޑީން ފުރަތަމަ މޮޑެލް އައުޓްޕުޓް ލިބެންދެން ދާ ވަގުތު۔", - "ttfa.label": "TTFA", - "ttfa.tip": "ޕްރޮވައިޑަރ ރިކުއެސްޓް ފޮނުވުނު ގަޑީން ޖަވާބުގެ ފުރަތަމަ ލިޔުން ލިބެންދެން ދާ ވަގުތު।", + "duration.label": "TIME", + "duration.tip": "އެންމެ ފަހުގެ ޓާރން ފެށި ޕްރޮމްޕްޓުން ފެށިގެން ޖަވާބު ނިމެންދެން ދާ ވަގުތު.", "tps.label": "TPS", - "tps.tip": "ފުރަތަމަ މޮޑެލް އައުޓްޕުޓަށްފަހު ސިކުންތަކަށް އައުޓްޕުޓް ޓޯކަންތައް۔", - "e2e.label": "E2E", - "e2e.tip": "ޕްރޮވައިޑަރ ރިކުއެސްޓް ފޮނުވުނު ގަޑީން ޖަވާބުގެ ސްޓްރީމް ނިމެންދެން ދާ ވަގުތު۔", + "tps.tip": + "އެންމެ ފަހުގެ ޓާރންގެ މޮޑެލް ރިކުއެސްޓްތަކުގައި ސިކުންތަކަށް އައުޓްޕުޓް އަދި ރީޒަނިންގ ޓޯކަންތައް، ޓޫލްގެ ވަގުތު ނުހިމަނައި.", "nav.label": "NAV އެވެ", "nav.tip": "އެންމެ ފަހުން ފުރިހަމަ ކުރެވުނު ރޫޓް ޓްރާންސިޝަން ސެޝަން ޕޭޖެއްގައި އަތްލުމުން، ރައުޓަރ ފެށުނީއްސުރެ ސެޓްލްވުމަށްފަހު ފުރަތަމަ ކުލަ ޖެހުމާ ހަމައަށް މިންކުރެވެއެވެ.", diff --git a/packages/gui-extensions/src/debug/i18n/dz.ts b/packages/gui-extensions/src/debug/i18n/dz.ts index 0e9491e400d3..105fa695aea5 100644 --- a/packages/gui-extensions/src/debug/i18n/dz.ts +++ b/packages/gui-extensions/src/debug/i18n/dz.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "གོང་འཕེལ་གྱི་ལས་དོན་བརྟག་དཔྱད།", providerAriaLabel: "བྱིན་མིའི་ལཱ་ཤུགས་བརྟག་དཔྱད།", na: "ན/ཨེ།", - "ttft.label": "TTFT", - "ttft.tip": "བྱིན་མི་ལུ་ཞུ་བ་བཏང་བ་ལས་དཔེ་ཚད་ཀྱི་ཐོན་འབྲས་དང་པ་ཚུན་གྱི་དུས་ཚོད།", - "ttfa.label": "TTFA", - "ttfa.tip": "བྱིན་མི་ལུ་ཞུ་བ་བཏང་བ་ལས་ལན་གྱི་ཚིག་ཡིག་དང་པ་ཚུན་གྱི་དུས་ཚོད།", + "duration.label": "TIME", + "duration.tip": "མཐའ་མཇུག་གི་རིམ་པ་འགོ་བཙུགས་མི་ཞུ་བ་ལས་ ལན་མཇུག་བསྡུ་ཚུན་གྱི་དུས་ཚོད།", "tps.label": "TPS", - "tps.tip": "དཔེ་ཚད་ཀྱི་ཐོན་འབྲས་དང་པའི་ཤུལ་ལས་སྐར་ཆ་རེར་ཐོན་འབྲས་ཊོ་ཀེན།", - "e2e.label": "E2E", - "e2e.tip": "བྱིན་མི་ལུ་ཞུ་བ་བཏང་བ་ལས་ལན་གྱི་རྒྱུན་ལམ་མཇུག་བསྡུ་ཚུན་གྱི་དུས་ཚོད།", + "tps.tip": + "མཐའ་མཇུག་གི་རིམ་པའི་དཔེ་ཚད་ཞུ་བ་ཚུ་ནང་ སྐར་ཆ་རེར་ཐོན་འབྲས་དང་བསམ་གཞིགས་ཊོ་ཀེན་ ལག་ཆའི་དུས་ཚོད་མ་བརྩིས་པར།", "nav.label": "NAV", "nav.tip": "མཐའ་མཇུག་མཇུག་བསྡུ་ཡོད་པའི་འགྲུལ་ལམ་འགྱུར་བ་འདི་ ལཱ་ཡུན་ཤོག་ལེབ་ཅིག་ལུ་ལགཔ་བརྐྱབ་སྟེ་ རའུ་ཊར་འགོ་བཙུགས་ལས་ དེ་གཞི་ཆགས་པའི་ཤུལ་ལས་ ཚོས་གཞི་འགོ་དང་པ་ཚུན་ཚོད་ འཇལ་ཡོདཔ་ཨིན།", diff --git a/packages/gui-extensions/src/debug/i18n/el.ts b/packages/gui-extensions/src/debug/i18n/el.ts index 43f5c6e1b020..74d92aa12fd4 100644 --- a/packages/gui-extensions/src/debug/i18n/el.ts +++ b/packages/gui-extensions/src/debug/i18n/el.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Διαγνωστικά απόδοσης ανάπτυξης", providerAriaLabel: "Διαγνωστικά απόδοσης παρόχου", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Χρόνος από την αποστολή του αιτήματος στον πάροχο έως την πρώτη έξοδο του μοντέλου.", - "ttfa.label": "TTFA", - "ttfa.tip": "Χρόνος από την αποστολή του αιτήματος στον πάροχο έως το πρώτο κείμενο απάντησης.", + "duration.label": "TIME", + "duration.tip": "Χρόνος από την προτροπή που ξεκίνησε τον τελευταίο γύρο έως την ολοκλήρωση της απάντησης.", "tps.label": "TPS", - "tps.tip": "Διακριτικά εξόδου ανά δευτερόλεπτο μετά την πρώτη έξοδο του μοντέλου.", - "e2e.label": "E2E", - "e2e.tip": "Χρόνος από την αποστολή του αιτήματος στον πάροχο έως τη λήξη της ροής απάντησης.", + "tps.tip": + "Διακριτικά εξόδου και συλλογισμού ανά δευτερόλεπτο στα αιτήματα προς το μοντέλο του τελευταίου γύρου, χωρίς τον χρόνο των εργαλείων.", "nav.label": "NAV", "nav.tip": "Τελευταία ολοκληρωμένη μετάβαση διαδρομής που αγγίζει μια σελίδα συνεδρίας, μετρημένη από την έναρξη του δρομολογητή μέχρι την πρώτη βαφή μετά την καθίζηση.", diff --git a/packages/gui-extensions/src/debug/i18n/en.ts b/packages/gui-extensions/src/debug/i18n/en.ts index 2f397cbccdcc..fb604820fd63 100644 --- a/packages/gui-extensions/src/debug/i18n/en.ts +++ b/packages/gui-extensions/src/debug/i18n/en.ts @@ -5,14 +5,10 @@ export default { ariaLabel: "Development performance diagnostics", providerAriaLabel: "Provider performance diagnostics", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Time from provider request dispatch to the first model output.", - "ttfa.label": "TTFA", - "ttfa.tip": "Time from provider request dispatch to the first answer text.", + "duration.label": "TIME", + "duration.tip": "Time from the prompt that started the latest turn until its response completed.", "tps.label": "TPS", - "tps.tip": "Output tokens per second after the first model output.", - "e2e.label": "E2E", - "e2e.tip": "Time from provider request dispatch until its response stream ended.", + "tps.tip": "Output and reasoning tokens per second across the latest turn's model requests, excluding tool time.", "nav.label": "NAV", "nav.tip": "Last completed route transition touching a session page, measured from router start until the first paint after it settles.", diff --git a/packages/gui-extensions/src/debug/i18n/es.ts b/packages/gui-extensions/src/debug/i18n/es.ts index 8874a29c1931..56dc112afcbb 100644 --- a/packages/gui-extensions/src/debug/i18n/es.ts +++ b/packages/gui-extensions/src/debug/i18n/es.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnóstico de rendimiento de desarrollo", providerAriaLabel: "Diagnóstico del rendimiento del proveedor", na: "n/d", - "ttft.label": "TTFT", - "ttft.tip": "Tiempo desde el envío de la solicitud al proveedor hasta la primera salida del modelo.", - "ttfa.label": "TTFA", - "ttfa.tip": "Tiempo desde el envío de la solicitud al proveedor hasta el primer texto de respuesta.", + "duration.label": "TIME", + "duration.tip": "Tiempo desde la instrucción que inició el último turno hasta que terminó la respuesta.", "tps.label": "TPS", - "tps.tip": "Tókenes de salida por segundo después de la primera salida del modelo.", - "e2e.label": "E2E", - "e2e.tip": "Tiempo desde el envío de la solicitud al proveedor hasta que finaliza el flujo de respuesta.", + "tps.tip": + "Tókenes de salida y de razonamiento por segundo en las solicitudes al modelo del último turno, sin contar el tiempo de las herramientas.", "nav.label": "NAV", "nav.tip": "Última transición de ruta completada que afecta a una página de sesión, medida desde el inicio del enrutador hasta el primer renderizado tras estabilizarse.", diff --git a/packages/gui-extensions/src/debug/i18n/et.ts b/packages/gui-extensions/src/debug/i18n/et.ts index b284a61eed3c..bf3eefce6dcd 100644 --- a/packages/gui-extensions/src/debug/i18n/et.ts +++ b/packages/gui-extensions/src/debug/i18n/et.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Arendustegevuse diagnostika", providerAriaLabel: "Pakkuja jõudluse diagnostika", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Aeg pakkujale päringu saatmisest mudeli esimese väljundini.", - "ttfa.label": "TTFA", - "ttfa.tip": "Aeg pakkujale päringu saatmisest esimese vastusetekstini.", + "duration.label": "TIME", + "duration.tip": "Aeg viimase käigu alustanud viibast kuni vastuse valmimiseni.", "tps.label": "TPS", - "tps.tip": "Väljundmärke sekundis pärast mudeli esimest väljundit.", - "e2e.label": "E2E", - "e2e.tip": "Aeg pakkujale päringu saatmisest vastusevoo lõppemiseni.", + "tps.tip": "Väljund- ja arutlusmärgid sekundis viimase käigu mudelipäringute lõikes, ilma tööriistade ajata.", "nav.label": "NAV", "nav.tip": "Viimane lõpetatud marsruudi üleminek, mis puudutab seansi lehte, mõõdetuna ruuteri algusest kuni esimese värvimiseni pärast selle settimist.", diff --git a/packages/gui-extensions/src/debug/i18n/fa.ts b/packages/gui-extensions/src/debug/i18n/fa.ts index 90ff09402ee8..febf5ff2899a 100644 --- a/packages/gui-extensions/src/debug/i18n/fa.ts +++ b/packages/gui-extensions/src/debug/i18n/fa.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "تشخیص عملکرد توسعه", providerAriaLabel: "عیب‌یابی عملکرد ارائه‌دهنده", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "زمان بین ارسال درخواست ارائه‌دهنده و نخستین خروجی مدل.", - "ttfa.label": "TTFA", - "ttfa.tip": "زمان بین ارسال درخواست ارائه‌دهنده و نخستین متن پاسخ.", + "duration.label": "TIME", + "duration.tip": "زمان از درخواستی که آخرین نوبت را آغاز کرد تا تکمیل پاسخ آن.", "tps.label": "TPS", - "tps.tip": "توکن‌های خروجی در ثانیه پس از نخستین خروجی مدل.", - "e2e.label": "E2E", - "e2e.tip": "زمان بین ارسال درخواست ارائه‌دهنده و پایان جریان پاسخ آن.", + "tps.tip": "توکن‌های خروجی و استدلال در ثانیه در درخواست‌های مدل در آخرین نوبت، بدون احتساب زمان ابزارها.", "nav.label": "NAV", "nav.tip": "آخرین تغییر مسیر تکمیل شده با لمس صفحه جلسه، از شروع روتر تا اولین رنگ پس از ته نشین شدن اندازه گیری می شود.", diff --git a/packages/gui-extensions/src/debug/i18n/fi.ts b/packages/gui-extensions/src/debug/i18n/fi.ts index d22a8e0f48b2..81af95eefa14 100644 --- a/packages/gui-extensions/src/debug/i18n/fi.ts +++ b/packages/gui-extensions/src/debug/i18n/fi.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Kehityksen suorituskyvyn diagnostiikka", providerAriaLabel: "Palveluntarjoajan suorituskyvyn diagnostiikka", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Aika palveluntarjoajapyynnön lähettämisestä mallin ensimmäiseen tulosteeseen.", - "ttfa.label": "TTFA", - "ttfa.tip": "Aika palveluntarjoajapyynnön lähettämisestä ensimmäiseen vastaustekstiin.", + "duration.label": "TIME", + "duration.tip": "Aika viimeisimmän vuoron aloittaneesta kehotteesta vastauksen valmistumiseen.", "tps.label": "TPS", - "tps.tip": "Tulostokeneita sekunnissa mallin ensimmäisen tulosteen jälkeen.", - "e2e.label": "E2E", - "e2e.tip": "Aika palveluntarjoajapyynnön lähettämisestä vastausvirran päättymiseen.", + "tps.tip": "Tuloste- ja päättelytokeneita sekunnissa viimeisimmän vuoron mallipyynnöissä, ilman työkalujen aikaa.", "nav.label": "NAV", "nav.tip": "Viimeisin valmis reittisiirtymä, joka koskee istuntosivua, mitattuna reitityksen alusta ensimmäiseen piirtoon siirtymän valmistumisen jälkeen.", diff --git a/packages/gui-extensions/src/debug/i18n/fo.ts b/packages/gui-extensions/src/debug/i18n/fo.ts index 3d1a4fc6c47a..8f436f1268b9 100644 --- a/packages/gui-extensions/src/debug/i18n/fo.ts +++ b/packages/gui-extensions/src/debug/i18n/fo.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Menningar avriksdiagnostikk", providerAriaLabel: "Avriksgreining hjá veitara", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Tíð frá tí at fyrispurningurin verður sendur veitaranum, til fyrsta úttakið frá modellinum.", - "ttfa.label": "TTFA", - "ttfa.tip": "Tíð frá tí at fyrispurningurin verður sendur veitaranum, til fyrsti svarteksturin.", + "duration.label": "TIME", + "duration.tip": "Tíð frá fyrispurninginum, sum byrjaði seinasta umfar, til svarið var liðugt.", "tps.label": "TPS", - "tps.tip": "Útflutningsmerki um sekundið eftir fyrsta úttakið frá modellinum.", - "e2e.label": "E2E", - "e2e.tip": "Tíð frá tí at fyrispurningurin verður sendur veitaranum, til svarstreymurin endar.", + "tps.tip": "Úttaks- og hugsunarmerki um sekundið í seinasta umfarsins fyrispurningum til modellið, uttan amboðstíð.", "nav.label": "NAV", "nav.tip": "Seinast liðugt leiðsluskifti nertir við eina setu síðu, mált frá router byrjan til fyrstu málingina eftir at hon setur seg.", diff --git a/packages/gui-extensions/src/debug/i18n/fr.ts b/packages/gui-extensions/src/debug/i18n/fr.ts index 3134b5c8fa77..a8b64597713a 100644 --- a/packages/gui-extensions/src/debug/i18n/fr.ts +++ b/packages/gui-extensions/src/debug/i18n/fr.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnostics de performance de développement", providerAriaLabel: "Diagnostic des performances du fournisseur", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Temps entre l’envoi de la requête au fournisseur et la première sortie du modèle.", - "ttfa.label": "TTFA", - "ttfa.tip": "Temps entre l’envoi de la requête au fournisseur et le premier texte de réponse.", + "duration.label": "TIME", + "duration.tip": "Temps entre l'invite qui a lancé le dernier tour et la fin de la réponse.", "tps.label": "TPS", - "tps.tip": "Jetons de sortie par seconde après la première sortie du modèle.", - "e2e.label": "E2E", - "e2e.tip": "Temps entre l’envoi de la requête au fournisseur et la fin du flux de réponse.", + "tps.tip": + "Jetons de sortie et de raisonnement par seconde sur les requêtes au modèle du dernier tour, hors temps des outils.", "nav.label": "NAV", "nav.tip": "Dernière transition de route terminée touchant une page de session, mesurée du début du routeur jusqu'au premier affichage après stabilisation.", diff --git a/packages/gui-extensions/src/debug/i18n/he.ts b/packages/gui-extensions/src/debug/i18n/he.ts index 623565a1e41a..da15d40b14c3 100644 --- a/packages/gui-extensions/src/debug/i18n/he.ts +++ b/packages/gui-extensions/src/debug/i18n/he.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "אבחון ביצועי פיתוח", providerAriaLabel: "אבחון ביצועי הספק", na: "לא זמין", - "ttft.label": "TTFT", - "ttft.tip": "הזמן משליחת בקשת הספק עד לפלט הראשון של הדגם.", - "ttfa.label": "TTFA", - "ttfa.tip": "הזמן משליחת בקשת הספק עד לטקסט הראשון בתשובה.", + "duration.label": "TIME", + "duration.tip": "הזמן מההנחיה שפתחה את התור האחרון ועד להשלמת התשובה.", "tps.label": "TPS", - "tps.tip": "אסימוני פלט לשנייה לאחר הפלט הראשון של הדגם.", - "e2e.label": "E2E", - "e2e.tip": "הזמן משליחת בקשת הספק עד לסיום זרם התגובה שלו.", + "tps.tip": "אסימוני פלט וחשיבה לשנייה בבקשות למודל בתור האחרון, ללא זמן הכלים.", "nav.label": "NAV", "nav.tip": "מעבר המסלול האחרון שהושלם ונגע בדף הפעלה, מתחילת פעולת הנתב ועד לציור הראשון לאחר שהתייצב.", "fps.label": "FPS", diff --git a/packages/gui-extensions/src/debug/i18n/hi.ts b/packages/gui-extensions/src/debug/i18n/hi.ts index 902efc1c0425..fbfa1cb7253a 100644 --- a/packages/gui-extensions/src/debug/i18n/hi.ts +++ b/packages/gui-extensions/src/debug/i18n/hi.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "विकास प्रदर्शन निदान", providerAriaLabel: "प्रोवाइडर के प्रदर्शन का निदान", na: "एन/ए", - "ttft.label": "TTFT", - "ttft.tip": "प्रोवाइडर अनुरोध भेजे जाने से मॉडल का पहला आउटपुट मिलने तक का समय।", - "ttfa.label": "TTFA", - "ttfa.tip": "प्रोवाइडर अनुरोध भेजे जाने से उत्तर का पहला टेक्स्ट मिलने तक का समय।", + "duration.label": "TIME", + "duration.tip": "नवीनतम टर्न शुरू करने वाले प्रॉम्प्ट से उसके उत्तर के पूरा होने तक का समय।", "tps.label": "TPS", - "tps.tip": "मॉडल के पहले आउटपुट के बाद प्रति सेकंड आउटपुट टोकन।", - "e2e.label": "E2E", - "e2e.tip": "प्रोवाइडर अनुरोध भेजे जाने से उसकी रिस्पॉन्स स्ट्रीम समाप्त होने तक का समय।", + "tps.tip": "नवीनतम टर्न के मॉडल अनुरोधों में प्रति सेकंड आउटपुट और रीज़निंग टोकन, टूल के समय को छोड़कर।", "nav.label": "NAV", "nav.tip": "सेशन पृष्ठ को छूते हुए अंतिम पूर्ण मार्ग परिवर्तन, राउटर प्रारंभ से लेकर उसके व्यवस्थित होने के बाद पहले पेंट तक मापा जाता है।", diff --git a/packages/gui-extensions/src/debug/i18n/hr.ts b/packages/gui-extensions/src/debug/i18n/hr.ts index 5d559185533d..6fd12807fceb 100644 --- a/packages/gui-extensions/src/debug/i18n/hr.ts +++ b/packages/gui-extensions/src/debug/i18n/hr.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Dijagnostika izvedbe razvoja", providerAriaLabel: "Dijagnostika performansi pružatelja usluge", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Vrijeme od slanja zahtjeva pružatelju do prvog izlaza modela.", - "ttfa.label": "TTFA", - "ttfa.tip": "Vrijeme od slanja zahtjeva pružatelju do prvog teksta odgovora.", + "duration.label": "TIME", + "duration.tip": "Vrijeme od upita koji je započeo posljednji potez do završetka odgovora.", "tps.label": "TPS", - "tps.tip": "Izlazni tokeni u sekundi nakon prvog izlaza modela.", - "e2e.label": "E2E", - "e2e.tip": "Vrijeme od slanja zahtjeva pružatelju do završetka toka odgovora.", + "tps.tip": + "Izlazni tokeni i tokeni rasuđivanja u sekundi kroz zahtjeve modelu u posljednjem potezu, bez vremena alata.", "nav.label": "NAV", "nav.tip": "Zadnji dovršeni prijelaz rute koji dodiruje stranicu sesije, mjereno od početka usmjerivača do prve boje nakon što se slegne.", diff --git a/packages/gui-extensions/src/debug/i18n/hu.ts b/packages/gui-extensions/src/debug/i18n/hu.ts index 5b40e5b4ff70..abdd103173a0 100644 --- a/packages/gui-extensions/src/debug/i18n/hu.ts +++ b/packages/gui-extensions/src/debug/i18n/hu.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Fejlesztési teljesítmény diagnosztika", providerAriaLabel: "Szolgáltatói teljesítménydiagnosztika", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "A szolgáltatói kérés elküldésétől a modell első kimenetéig eltelt idő.", - "ttfa.label": "TTFA", - "ttfa.tip": "A szolgáltatói kérés elküldésétől az első válaszszövegig eltelt idő.", + "duration.label": "TIME", + "duration.tip": "A legutóbbi kört indító kéréstől a válasz befejezéséig eltelt idő.", "tps.label": "TPS", - "tps.tip": "Kimeneti tokenek másodpercenként a modell első kimenete után.", - "e2e.label": "E2E", - "e2e.tip": "A szolgáltatói kérés elküldésétől a válaszfolyam végéig eltelt idő.", + "tps.tip": "Kimeneti és gondolkodási tokenek másodpercenként a legutóbbi kör modellkérésein, az eszközidő nélkül.", "nav.label": "NAV", "nav.tip": "Utolsó befejezett útvonal-átmenet, amely egy munkamenet-oldalt érint, az útválasztó indulásától az első festésig mérve.", diff --git a/packages/gui-extensions/src/debug/i18n/hy.ts b/packages/gui-extensions/src/debug/i18n/hy.ts index c8b54b8c8a57..12c762945c62 100644 --- a/packages/gui-extensions/src/debug/i18n/hy.ts +++ b/packages/gui-extensions/src/debug/i18n/hy.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Զարգացման կատարողականի ախտորոշում", providerAriaLabel: "Մատակարարի արդյունավետության ախտորոշում", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Մատակարարին հարցումն ուղարկելուց մինչև մոդելի առաջին ելքը ընկած ժամանակը։", - "ttfa.label": "TTFA", - "ttfa.tip": "Մատակարարին հարցումն ուղարկելուց մինչև պատասխանի առաջին տեքստը ընկած ժամանակը։", + "duration.label": "TIME", + "duration.tip": "Վերջին հերթը սկսած հարցումից մինչև պատասխանի ավարտն ընկած ժամանակը։", "tps.label": "TPS", - "tps.tip": "Ելքային տոկենների քանակը վայրկյանում՝ մոդելի առաջին ելքից հետո։", - "e2e.label": "E2E", - "e2e.tip": "Մատակարարին հարցումն ուղարկելուց մինչև պատասխանի հոսքի ավարտը ընկած ժամանակը։", + "tps.tip": + "Ելքային և դատողության տոկենների քանակը վայրկյանում՝ վերջին հերթի մոդելային հարցումներում, առանց գործիքների ժամանակի։", "nav.label": "NAV", "nav.tip": "Վերջին ավարտված երթուղու անցումը հպվելով աշխատաշրջանի էջին, որը չափվում է երթուղիչի սկզբից մինչև այն նստելուց հետո առաջին ներկը:", diff --git a/packages/gui-extensions/src/debug/i18n/id.ts b/packages/gui-extensions/src/debug/i18n/id.ts index 81a924567156..eb42512799cf 100644 --- a/packages/gui-extensions/src/debug/i18n/id.ts +++ b/packages/gui-extensions/src/debug/i18n/id.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnostik kinerja pengembangan", providerAriaLabel: "Diagnostik kinerja penyedia", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Waktu sejak permintaan dikirim ke penyedia hingga keluaran pertama model.", - "ttfa.label": "TTFA", - "ttfa.tip": "Waktu sejak permintaan dikirim ke penyedia hingga teks jawaban pertama.", + "duration.label": "TIME", + "duration.tip": "Waktu dari prompt yang memulai giliran terakhir hingga responsnya selesai.", "tps.label": "TPS", - "tps.tip": "Jumlah token keluaran per detik setelah keluaran pertama model.", - "e2e.label": "E2E", - "e2e.tip": "Waktu sejak permintaan dikirim ke penyedia hingga aliran responsnya berakhir.", + "tps.tip": + "Token keluaran dan penalaran per detik di seluruh permintaan model pada giliran terakhir, tanpa waktu alat.", "nav.label": "NAV", "nav.tip": "Transisi rute terakhir yang mencapai halaman sesi, diukur sejak perute dimulai hingga render pertama setelah stabil.", diff --git a/packages/gui-extensions/src/debug/i18n/is.ts b/packages/gui-extensions/src/debug/i18n/is.ts index 336055d2588a..d084f2031b86 100644 --- a/packages/gui-extensions/src/debug/i18n/is.ts +++ b/packages/gui-extensions/src/debug/i18n/is.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Þróunarárangursgreiningar", providerAriaLabel: "Afkastagreining þjónustuveitu", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Tími frá því að beiðni er send til þjónustuveitu þar til fyrsta úttak líkansins berst.", - "ttfa.label": "TTFA", - "ttfa.tip": "Tími frá því að beiðni er send til þjónustuveitu þar til fyrsti svartextinn berst.", + "duration.label": "TIME", + "duration.tip": "Tími frá kvaðningunni sem hóf síðustu umferð þar til svarinu lauk.", "tps.label": "TPS", - "tps.tip": "Úttakstókar á sekúndu eftir fyrsta úttak líkansins.", - "e2e.label": "E2E", - "e2e.tip": "Tími frá því að beiðni er send til þjónustuveitu þar til svarstraumnum lýkur.", + "tps.tip": "Úttaks- og rökhugsunartókar á sekúndu í líkansbeiðnum síðustu umferðar, án tíma verkfæra.", "nav.label": "NAV", "nav.tip": "Síðasta lokið leiðarskipti sem snertir lotusíðu, mæld frá byrjun beinis þar til fyrsta málningin eftir að hún sest.", diff --git a/packages/gui-extensions/src/debug/i18n/it.ts b/packages/gui-extensions/src/debug/i18n/it.ts index b4040a5cc9f3..39fc89635638 100644 --- a/packages/gui-extensions/src/debug/i18n/it.ts +++ b/packages/gui-extensions/src/debug/i18n/it.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnostica delle prestazioni di sviluppo", providerAriaLabel: "Diagnostica delle prestazioni del provider", na: "n/d", - "ttft.label": "TTFT", - "ttft.tip": "Tempo dall’invio della richiesta al provider al primo output del modello.", - "ttfa.label": "TTFA", - "ttfa.tip": "Tempo dall’invio della richiesta al provider al primo testo della risposta.", + "duration.label": "TIME", + "duration.tip": "Tempo dal prompt che ha avviato l'ultimo turno al completamento della risposta.", "tps.label": "TPS", - "tps.tip": "Token di output al secondo dopo il primo output del modello.", - "e2e.label": "E2E", - "e2e.tip": "Tempo dall’invio della richiesta al provider alla fine del flusso di risposta.", + "tps.tip": + "Token di output e di ragionamento al secondo nelle richieste al modello dell'ultimo turno, escluso il tempo degli strumenti.", "nav.label": "NAV", "nav.tip": "Ultima transizione completata relativa a una pagina di sessione, misurata dall'avvio del router fino al primo rendering dopo la stabilizzazione.", diff --git a/packages/gui-extensions/src/debug/i18n/ja.ts b/packages/gui-extensions/src/debug/i18n/ja.ts index 18b29b3b47cf..6f2eb22dc68e 100644 --- a/packages/gui-extensions/src/debug/i18n/ja.ts +++ b/packages/gui-extensions/src/debug/i18n/ja.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "開発パフォーマンス診断", providerAriaLabel: "プロバイダーのパフォーマンス診断", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "プロバイダーへのリクエスト送信からモデルの最初の出力までの時間。", - "ttfa.label": "TTFA", - "ttfa.tip": "プロバイダーへのリクエスト送信から最初の回答テキストまでの時間。", + "duration.label": "TIME", + "duration.tip": "直近のターンを開始したプロンプトから応答が完了するまでの時間。", "tps.label": "TPS", - "tps.tip": "モデルの最初の出力後に生成される1秒あたりの出力トークン数。", - "e2e.label": "E2E", - "e2e.tip": "プロバイダーへのリクエスト送信から応答ストリームの終了までの時間。", + "tps.tip": "直近のターンのモデルリクエスト全体での1秒あたりの出力・推論トークン数(ツールの実行時間を除く)。", "nav.label": "NAV", "nav.tip": "セッションページに関係する最後に完了したルート遷移。ルーターの開始から処理完了後の最初の描画までを測定。", "fps.label": "FPS", diff --git a/packages/gui-extensions/src/debug/i18n/ka.ts b/packages/gui-extensions/src/debug/i18n/ka.ts index c25062a428e0..0261783024cb 100644 --- a/packages/gui-extensions/src/debug/i18n/ka.ts +++ b/packages/gui-extensions/src/debug/i18n/ka.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "განვითარების შესრულების დიაგნოსტიკა", providerAriaLabel: "პროვაიდერის წარმადობის დიაგნოსტიკა", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "დრო პროვაიდერისთვის მოთხოვნის გაგზავნიდან მოდელის პირველ გამომავალ მონაცემამდე.", - "ttfa.label": "TTFA", - "ttfa.tip": "დრო პროვაიდერისთვის მოთხოვნის გაგზავნიდან პასუხის პირველ ტექსტამდე.", + "duration.label": "TIME", + "duration.tip": "დრო ბოლო სვლის დამწყები მოთხოვნიდან პასუხის დასრულებამდე.", "tps.label": "TPS", - "tps.tip": "გამომავალი ტოკენების რაოდენობა წამში მოდელის პირველი გამომავალი მონაცემის შემდეგ.", - "e2e.label": "E2E", - "e2e.tip": "დრო პროვაიდერისთვის მოთხოვნის გაგზავნიდან პასუხის ნაკადის დასრულებამდე.", + "tps.tip": "გამომავალი და მსჯელობის ტოკენები წამში ბოლო სვლის მოდელის მოთხოვნებში, ხელსაწყოების დროის გარეშე.", "nav.label": "NAV", "nav.tip": "ბოლო დასრულებული მარშრუტის გადასვლა სესიის გვერდთან შეხებით, გაზომილი როუტერის დაწყებიდან პირველ შეღებვამდე მისი დალაგების შემდეგ.", diff --git a/packages/gui-extensions/src/debug/i18n/km.ts b/packages/gui-extensions/src/debug/i18n/km.ts index eb48543699fe..66942e3ca8af 100644 --- a/packages/gui-extensions/src/debug/i18n/km.ts +++ b/packages/gui-extensions/src/debug/i18n/km.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "ការវិនិច្ឆ័យដំណើរការអភិវឌ្ឍន៍", providerAriaLabel: "ការវិនិច្ឆ័យដំណើរការរបស់អ្នកផ្តល់សេវា", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "ពេលវេលាចាប់ពីផ្ញើសំណើទៅអ្នកផ្តល់សេវា រហូតដល់លទ្ធផលដំបូងរបស់ម៉ូដែល។", - "ttfa.label": "TTFA", - "ttfa.tip": "ពេលវេលាចាប់ពីផ្ញើសំណើទៅអ្នកផ្តល់សេវា រហូតដល់អត្ថបទចម្លើយដំបូង។", + "duration.label": "TIME", + "duration.tip": "ពេលវេលាចាប់ពីប្រអប់បញ្ចូលដែលចាប់ផ្តើមវេនចុងក្រោយ រហូតដល់ការឆ្លើយតបបានបញ្ចប់។", "tps.label": "TPS", - "tps.tip": "ចំនួនថូខឹនលទ្ធផលក្នុងមួយវិនាទី បន្ទាប់ពីលទ្ធផលដំបូងរបស់ម៉ូដែល។", - "e2e.label": "E2E", - "e2e.tip": "ពេលវេលាចាប់ពីផ្ញើសំណើទៅអ្នកផ្តល់សេវា រហូតដល់ស្ទ្រីមឆ្លើយតបបញ្ចប់។", + "tps.tip": "ថូខឹនលទ្ធផល និងការវែកញែកក្នុងមួយវិនាទី លើសំណើម៉ូដែលនៃវេនចុងក្រោយ ដោយមិនរាប់ពេលវេលាឧបករណ៍។", "nav.label": "NAV", "nav.tip": "ការផ្លាស់ប្តូរផ្លូវដែលបានបញ្ចប់ចុងក្រោយដោយប៉ះទំព័រសម័យមួយ ដែលវាស់វែងពីការចាប់ផ្តើមរ៉ោតទ័រ រហូតដល់ការលាបពណ៌ដំបូងបន្ទាប់ពីវាដោះស្រាយ។", diff --git a/packages/gui-extensions/src/debug/i18n/ko.ts b/packages/gui-extensions/src/debug/i18n/ko.ts index 35fcc093734b..27604e4f9db2 100644 --- a/packages/gui-extensions/src/debug/i18n/ko.ts +++ b/packages/gui-extensions/src/debug/i18n/ko.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "개발 성능 진단", providerAriaLabel: "공급자 성능 진단", na: "해당 없음", - "ttft.label": "TTFT", - "ttft.tip": "공급자 요청 전송부터 모델의 첫 출력까지 걸린 시간입니다.", - "ttfa.label": "TTFA", - "ttfa.tip": "공급자 요청 전송부터 첫 답변 텍스트까지 걸린 시간입니다.", + "duration.label": "TIME", + "duration.tip": "최근 턴을 시작한 프롬프트부터 응답이 완료될 때까지 걸린 시간입니다.", "tps.label": "TPS", - "tps.tip": "모델의 첫 출력 이후 초당 출력 토큰 수입니다.", - "e2e.label": "E2E", - "e2e.tip": "공급자 요청 전송부터 응답 스트림이 끝날 때까지 걸린 시간입니다.", + "tps.tip": "최근 턴의 모델 요청 전체에서 초당 출력 및 추론 토큰 수입니다. 도구 시간은 제외됩니다.", "nav.label": "NAV", "nav.tip": "세션 페이지에 닿은 마지막 완료된 라우트 전환. 라우터 시작부터 정착 후 첫 번째 페인트까지 측정됨.", "fps.label": "FPS", diff --git a/packages/gui-extensions/src/debug/i18n/lo.ts b/packages/gui-extensions/src/debug/i18n/lo.ts index 657a6c5198ca..6a1743c2e073 100644 --- a/packages/gui-extensions/src/debug/i18n/lo.ts +++ b/packages/gui-extensions/src/debug/i18n/lo.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "ການວິນິດໄສປະສິດທິພາບການພັດທະນາ", providerAriaLabel: "ການວິນິດໄສປະສິດທິພາບຜູ້ໃຫ້ບໍລິການ", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "ເວລາຕັ້ງແຕ່ສົ່ງຄຳຂໍໄປຫາຜູ້ໃຫ້ບໍລິການ ຈົນເຖິງຜົນລັບທຳອິດຈາກໂມເດວ.", - "ttfa.label": "TTFA", - "ttfa.tip": "ເວລາຕັ້ງແຕ່ສົ່ງຄຳຂໍໄປຫາຜູ້ໃຫ້ບໍລິການ ຈົນເຖິງຂໍ້ຄວາມຄຳຕອບທຳອິດ.", + "duration.label": "TIME", + "duration.tip": "ເວລາຕັ້ງແຕ່ຄຳສັ່ງທີ່ເລີ່ມຮອບຫຼ້າສຸດ ຈົນເຖິງການຕອບກັບສຳເລັດ.", "tps.label": "TPS", - "tps.tip": "ຈຳນວນໂທເຄັນຜົນລັບຕໍ່ວິນາທີ ຫຼັງຈາກຜົນລັບທຳອິດຂອງໂມເດວ.", - "e2e.label": "E2E", - "e2e.tip": "ເວລາຕັ້ງແຕ່ສົ່ງຄຳຂໍໄປຫາຜູ້ໃຫ້ບໍລິການ ຈົນກະແສການຕອບກັບສິ້ນສຸດ.", + "tps.tip": "ໂທເຄັນຜົນລັບ ແລະ ການໃຫ້ເຫດຜົນຕໍ່ວິນາທີ ໃນຄຳຮ້ອງຂໍໂມເດວຂອງຮອບຫຼ້າສຸດ ໂດຍບໍ່ນັບເວລາຂອງເຄື່ອງມື.", "nav.label": "NAV", "nav.tip": "ການປ່ຽນເສັ້ນທາງທີ່ສຳເລັດຫຼ້າສຸດໂດຍແຕະໃສ່ໜ້າເຊສຊັນ, ວັດແທກຈາກການເລີ່ມຕົ້ນຂອງເຣົາເຕີຈົນຮອດສີທຳອິດຫຼັງຈາກທີ່ມັນຕົກລົງ.", diff --git a/packages/gui-extensions/src/debug/i18n/lt.ts b/packages/gui-extensions/src/debug/i18n/lt.ts index a532a86414f2..8f11e194992a 100644 --- a/packages/gui-extensions/src/debug/i18n/lt.ts +++ b/packages/gui-extensions/src/debug/i18n/lt.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Vystymosi veiklos diagnostika", providerAriaLabel: "Teikėjo našumo diagnostika", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Laikas nuo užklausos išsiuntimo teikėjui iki pirmosios modelio išvesties.", - "ttfa.label": "TTFA", - "ttfa.tip": "Laikas nuo užklausos išsiuntimo teikėjui iki pirmojo atsakymo teksto.", + "duration.label": "TIME", + "duration.tip": "Laikas nuo užklausos, pradėjusios paskutinį ėjimą, iki atsakymo pabaigos.", "tps.label": "TPS", - "tps.tip": "Išvesties žetonai per sekundę po pirmosios modelio išvesties.", - "e2e.label": "E2E", - "e2e.tip": "Laikas nuo užklausos išsiuntimo teikėjui iki atsakymo srauto pabaigos.", + "tps.tip": + "Išvesties ir samprotavimo žetonai per sekundę per paskutinio ėjimo modelio užklausas, neįskaitant įrankių laiko.", "nav.label": "NAV", "nav.tip": "Paskutinis baigtas maršruto perėjimas, liečiant seanso puslapį, matuojant nuo maršrutizatoriaus pradžios iki pirmojo dažymo po to, kai jis nusistovi.", diff --git a/packages/gui-extensions/src/debug/i18n/lv.ts b/packages/gui-extensions/src/debug/i18n/lv.ts index d302a665788f..7e0653d60783 100644 --- a/packages/gui-extensions/src/debug/i18n/lv.ts +++ b/packages/gui-extensions/src/debug/i18n/lv.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Izstrādes veiktspējas diagnostika", providerAriaLabel: "Pakalpojumu sniedzēja veiktspējas diagnostika", na: "nav", - "ttft.label": "TTFT", - "ttft.tip": "Laiks no pieprasījuma nosūtīšanas pakalpojumu sniedzējam līdz pirmajai modeļa izvadei.", - "ttfa.label": "TTFA", - "ttfa.tip": "Laiks no pieprasījuma nosūtīšanas pakalpojumu sniedzējam līdz pirmajam atbildes tekstam.", + "duration.label": "TIME", + "duration.tip": "Laiks no uzvednes, kas sāka pēdējo gājienu, līdz atbildes pabeigšanai.", "tps.label": "TPS", - "tps.tip": "Izvades žetoni sekundē pēc pirmās modeļa izvades.", - "e2e.label": "E2E", - "e2e.tip": "Laiks no pieprasījuma nosūtīšanas pakalpojumu sniedzējam līdz atbildes straumes beigām.", + "tps.tip": "Izvades un spriešanas žetoni sekundē pēdējā gājiena modeļa pieprasījumos, neskaitot rīku laiku.", "nav.label": "NAV", "nav.tip": "Pēdējā pabeigtā maršruta pāreja, kas skar sesijas lapu, mērīts no maršrutētāja sākuma līdz pirmajam attēlojumam pēc stabilizācijas.", diff --git a/packages/gui-extensions/src/debug/i18n/mk.ts b/packages/gui-extensions/src/debug/i18n/mk.ts index 6a5c03bdb459..05eae87c8819 100644 --- a/packages/gui-extensions/src/debug/i18n/mk.ts +++ b/packages/gui-extensions/src/debug/i18n/mk.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Дијагностика на перформансите на развојот", providerAriaLabel: "Дијагностика на перформансите на давателот", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Време од испраќањето на барањето до давателот до првиот излез од моделот.", - "ttfa.label": "TTFA", - "ttfa.tip": "Време од испраќањето на барањето до давателот до првиот текст на одговорот.", + "duration.label": "TIME", + "duration.tip": "Време од барањето што го започна последниот потег до завршувањето на одговорот.", "tps.label": "TPS", - "tps.tip": "Излезни токени во секунда по првиот излез од моделот.", - "e2e.label": "E2E", - "e2e.tip": "Време од испраќањето на барањето до давателот до завршувањето на текот на одговорот.", + "tps.tip": + "Излезни токени и токени за расудување во секунда низ барањата до моделот во последниот потег, без времето на алатките.", "nav.label": "NAV", "nav.tip": "Последна завршена транзиција на маршрута со допирање на страница со сесија, мерена од почетокот на рутерот до првата боја откако ќе се среди.", diff --git a/packages/gui-extensions/src/debug/i18n/mn.ts b/packages/gui-extensions/src/debug/i18n/mn.ts index b2d765050f2c..2ce8a2ddcc78 100644 --- a/packages/gui-extensions/src/debug/i18n/mn.ts +++ b/packages/gui-extensions/src/debug/i18n/mn.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Хөгжлийн гүйцэтгэлийн оношлогоо", providerAriaLabel: "Үйлчилгээ үзүүлэгчийн гүйцэтгэлийн оношилгоо", na: "үгүй", - "ttft.label": "TTFT", - "ttft.tip": "Үйлчилгээ үзүүлэгч рүү хүсэлт илгээснээс загварын эхний гаралт хүртэлх хугацаа.", - "ttfa.label": "TTFA", - "ttfa.tip": "Үйлчилгээ үзүүлэгч рүү хүсэлт илгээснээс хариултын эхний бичвэр хүртэлх хугацаа.", + "duration.label": "TIME", + "duration.tip": "Сүүлийн ээлжийг эхлүүлсэн хүсэлтээс хариулт дуусах хүртэлх хугацаа.", "tps.label": "TPS", - "tps.tip": "Загварын эхний гаралтын дараах секунд тутмын гаралтын токены тоо.", - "e2e.label": "E2E", - "e2e.tip": "Үйлчилгээ үзүүлэгч рүү хүсэлт илгээснээс хариултын урсгал дуусах хүртэлх хугацаа.", + "tps.tip": + "Сүүлийн ээлжийн загварын хүсэлтүүд дэх секунд тутмын гаралтын болон сэтгэлгээний токен, хэрэгслийн хугацааг оруулахгүй.", "nav.label": "NAV", "nav.tip": "Чиглүүлэгчийн эхлэлээс эхлээд тогтсоны дараа анхны будалт хүртэл хэмжсэн хамгийн сүүлд дууссан маршрутын шилжилтийг сессийн хуудсанд хүрнэ.", diff --git a/packages/gui-extensions/src/debug/i18n/ms.ts b/packages/gui-extensions/src/debug/i18n/ms.ts index 3dadfd4668e0..96c74fd0ef30 100644 --- a/packages/gui-extensions/src/debug/i18n/ms.ts +++ b/packages/gui-extensions/src/debug/i18n/ms.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnostik prestasi pembangunan", providerAriaLabel: "Diagnostik prestasi penyedia", na: "tiada", - "ttft.label": "TTFT", - "ttft.tip": "Masa dari penghantaran permintaan penyedia hingga output pertama model.", - "ttfa.label": "TTFA", - "ttfa.tip": "Masa dari penghantaran permintaan penyedia hingga teks jawapan pertama.", + "duration.label": "TIME", + "duration.tip": "Masa dari gesaan yang memulakan giliran terakhir sehingga responsnya selesai.", "tps.label": "TPS", - "tps.tip": "Token output sesaat selepas output pertama model.", - "e2e.label": "E2E", - "e2e.tip": "Masa dari penghantaran permintaan penyedia hingga strim responsnya tamat.", + "tps.tip": + "Token output dan penaakulan sesaat merentas permintaan model dalam giliran terakhir, tidak termasuk masa alat.", "nav.label": "NAV", "nav.tip": "Peralihan laluan terakhir yang melibatkan halaman sesi, diukur dari permulaan router hingga cat pertama selepas ia stabil.", diff --git a/packages/gui-extensions/src/debug/i18n/my.ts b/packages/gui-extensions/src/debug/i18n/my.ts index da8dcb22664b..f4b1fb4e82b2 100644 --- a/packages/gui-extensions/src/debug/i18n/my.ts +++ b/packages/gui-extensions/src/debug/i18n/my.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "ဖွံ့ဖြိုးတိုးတက်မှု စွမ်းဆောင်ရည် အဖြေရှာခြင်း", providerAriaLabel: "ဝန်ဆောင်မှုပေးသူ စွမ်းဆောင်ရည် အဖြေရှာခြင်း", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "ဝန်ဆောင်မှုပေးသူထံ တောင်းဆိုချက်ပို့ချိန်မှ မော်ဒယ်၏ ပထမဆုံးအထွက်ရရှိချိန်အထိ ကြာချိန်။", - "ttfa.label": "TTFA", - "ttfa.tip": "ဝန်ဆောင်မှုပေးသူထံ တောင်းဆိုချက်ပို့ချိန်မှ ပထမဆုံးအဖြေစာသားရရှိချိန်အထိ ကြာချိန်။", + "duration.label": "TIME", + "duration.tip": "နောက်ဆုံးအလှည့်ကို စတင်ခဲ့သော ညွှန်ကြားချက်မှ တုံ့ပြန်မှု ပြီးဆုံးချိန်အထိ ကြာချိန်။", "tps.label": "TPS", - "tps.tip": "မော်ဒယ်၏ ပထမဆုံးအထွက်နောက်ပိုင်း တစ်စက္ကန့်လျှင် ထွက်ရှိသည့် တိုကင်အရေအတွက်။", - "e2e.label": "E2E", - "e2e.tip": "ဝန်ဆောင်မှုပေးသူထံ တောင်းဆိုချက်ပို့ချိန်မှ တုံ့ပြန်မှုစီးကြောင်း ပြီးဆုံးချိန်အထိ ကြာချိန်။", + "tps.tip": + "နောက်ဆုံးအလှည့်၏ မော်ဒယ်တောင်းဆိုမှုများတစ်လျှောက် တစ်စက္ကန့်လျှင် ထွက်ရှိမှုနှင့် ဆင်ခြင်မှု တိုကင်များ၊ ကိရိယာအချိန် မပါဝင်ပါ။", "nav.label": "NAV", "nav.tip": "နောက်ဆုံးပြီးစီးခဲ့သော လမ်းကြောင်းအပြောင်းအရွှေ့သည် အခြေချပြီးနောက် ပထမဆေးခြယ်ခြင်းအထိ တိုင်းတာသည့် စက်ရှင်စာမျက်နှာကိုထိခြင်း၊", diff --git a/packages/gui-extensions/src/debug/i18n/ne.ts b/packages/gui-extensions/src/debug/i18n/ne.ts index c7e07de22bce..8517d63c0b70 100644 --- a/packages/gui-extensions/src/debug/i18n/ne.ts +++ b/packages/gui-extensions/src/debug/i18n/ne.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "विकास प्रदर्शन निदान", providerAriaLabel: "प्रदायकको कार्यसम्पादन निदान", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "प्रदायक अनुरोध पठाइएदेखि मोडेलको पहिलो आउटपुट आउँदासम्मको समय।", - "ttfa.label": "TTFA", - "ttfa.tip": "प्रदायक अनुरोध पठाइएदेखि उत्तरको पहिलो पाठ आउँदासम्मको समय।", + "duration.label": "TIME", + "duration.tip": "पछिल्लो पालो सुरु गर्ने प्रम्प्टदेखि त्यसको जवाफ पूरा हुँदासम्मको समय।", "tps.label": "TPS", - "tps.tip": "मोडेलको पहिलो आउटपुटपछि प्रति सेकेन्ड आउटपुट टोकन।", - "e2e.label": "E2E", - "e2e.tip": "प्रदायक अनुरोध पठाइएदेखि यसको प्रतिक्रिया स्ट्रिम समाप्त हुँदासम्मको समय।", + "tps.tip": "पछिल्लो पालोका मोडेल अनुरोधहरूमा प्रति सेकेन्ड आउटपुट र तर्क टोकन, उपकरणको समय बाहेक।", "nav.label": "NAV", "nav.tip": "अन्तिम सम्पन्न भएको रुट ट्रान्जिसन सत्र पृष्ठलाई छुँदै, राउटर स्टार्टबाट पहिलो पेन्ट सेटल भएपछि मापन गरिन्छ।", diff --git a/packages/gui-extensions/src/debug/i18n/nl.ts b/packages/gui-extensions/src/debug/i18n/nl.ts index b442772a291f..c7ea26008b0e 100644 --- a/packages/gui-extensions/src/debug/i18n/nl.ts +++ b/packages/gui-extensions/src/debug/i18n/nl.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Diagnostiek voor ontwikkelprestaties", providerAriaLabel: "Prestatiediagnose van provider", na: "n.v.t.", - "ttft.label": "TTFT", - "ttft.tip": "Tijd vanaf het verzenden van de provideraanvraag tot de eerste modeluitvoer.", - "ttfa.label": "TTFA", - "ttfa.tip": "Tijd vanaf het verzenden van de provideraanvraag tot de eerste antwoordtekst.", + "duration.label": "TIME", + "duration.tip": "Tijd vanaf de prompt die de laatste beurt startte tot het antwoord klaar was.", "tps.label": "TPS", - "tps.tip": "Uitvoertokens per seconde na de eerste modeluitvoer.", - "e2e.label": "E2E", - "e2e.tip": "Tijd vanaf het verzenden van de provideraanvraag tot het einde van de antwoordstream.", + "tps.tip": "Uitvoer- en redeneertokens per seconde over de modelverzoeken van de laatste beurt, zonder tooltijd.", "nav.label": "NAV", "nav.tip": "Laatst voltooide routenavigatie naar of binnen een sessiepagina, gemeten vanaf het starten van de router tot de eerste render nadat de navigatie is voltooid.", diff --git a/packages/gui-extensions/src/debug/i18n/no.ts b/packages/gui-extensions/src/debug/i18n/no.ts index 1bcd21626577..af9e6b5c0540 100644 --- a/packages/gui-extensions/src/debug/i18n/no.ts +++ b/packages/gui-extensions/src/debug/i18n/no.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Utviklingsytelsesdiagnostikk", providerAriaLabel: "Ytelsesdiagnostikk for leverandør", na: "i/t", - "ttft.label": "TTFT", - "ttft.tip": "Tid fra leverandørforespørselen sendes til den første modellutdataen.", - "ttfa.label": "TTFA", - "ttfa.tip": "Tid fra leverandørforespørselen sendes til den første svarteksten.", + "duration.label": "TIME", + "duration.tip": "Tid fra ledeteksten som startet siste tur, til svaret var ferdig.", "tps.label": "TPS", - "tps.tip": "Utdatatokener per sekund etter den første modellutdataen.", - "e2e.label": "E2E", - "e2e.tip": "Tid fra leverandørforespørselen sendes til svarstrømmen er avsluttet.", + "tps.tip": "Utdata- og resonneringstokener per sekund på tvers av modellforespørslene i siste tur, uten verktøytid.", "nav.label": "NAV", "nav.tip": "Siste fullførte ruteovergang som berører en sesjonsside, målt fra ruterstart til første gjengivelse etter at den har roet seg.", diff --git a/packages/gui-extensions/src/debug/i18n/pa.ts b/packages/gui-extensions/src/debug/i18n/pa.ts index 0e5a1a4dc22e..5b4b3cd85a88 100644 --- a/packages/gui-extensions/src/debug/i18n/pa.ts +++ b/packages/gui-extensions/src/debug/i18n/pa.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "ترقی دی کارکردگی دی تشخیص", providerAriaLabel: "فراہم کنندہ دی کارکردگی دی تشخیص", na: "لاگو نئیں", - "ttft.label": "TTFT", - "ttft.tip": "فراہم کنندہ دی درخواست بھیجن توں ماڈل دی پہلی آؤٹ پٹ تک دا سماں۔", - "ttfa.label": "TTFA", - "ttfa.tip": "فراہم کنندہ دی درخواست بھیجن توں جواب دے پہلے متن تک دا سماں۔", + "duration.label": "TIME", + "duration.tip": "ਤਾਜ਼ਾ ਵਾਰੀ ਸ਼ੁਰੂ ਕਰਨ ਵਾਲੇ ਪ੍ਰੌਂਪਟ ਤੋਂ ਉਸਦੇ ਜਵਾਬ ਦੇ ਪੂਰਾ ਹੋਣ ਤੱਕ ਦਾ ਸਮਾਂ।", "tps.label": "TPS", - "tps.tip": "ماڈل دی پہلی آؤٹ پٹ توں بعد فی سیکنڈ آؤٹ پٹ ٹوکن۔", - "e2e.label": "E2E", - "e2e.tip": "فراہم کنندہ دی درخواست بھیجن توں اوہدے جواب دی سٹریم ختم ہون تک دا سماں۔", + "tps.tip": "ਤਾਜ਼ਾ ਵਾਰੀ ਦੀਆਂ ਮਾਡਲ ਬੇਨਤੀਆਂ ਵਿੱਚ ਪ੍ਰਤੀ ਸਕਿੰਟ ਆਉਟਪੁੱਟ ਅਤੇ ਤਰਕ ਟੋਕਨ, ਟੂਲ ਦੇ ਸਮੇਂ ਤੋਂ ਬਿਨਾਂ।", "nav.label": "NAV", "nav.tip": "سیشن دے صفحے نو چھون آلے آخری مکمل روٹ ٹرانزیشن، روٹر دے آغاز توں لے کے اس دے ٹک جان دے بعد پہلے پینٹ تک ماپیا جاندا اے۔", diff --git a/packages/gui-extensions/src/debug/i18n/pl.ts b/packages/gui-extensions/src/debug/i18n/pl.ts index c469ac616621..35cb68befe93 100644 --- a/packages/gui-extensions/src/debug/i18n/pl.ts +++ b/packages/gui-extensions/src/debug/i18n/pl.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnostyka wydajności w środowisku deweloperskim", providerAriaLabel: "Diagnostyka wydajności dostawcy", na: "n.d.", - "ttft.label": "TTFT", - "ttft.tip": "Czas od wysłania żądania do dostawcy do pierwszego wyniku modelu.", - "ttfa.label": "TTFA", - "ttfa.tip": "Czas od wysłania żądania do dostawcy do pierwszego tekstu odpowiedzi.", + "duration.label": "TIME", + "duration.tip": "Czas od polecenia, które rozpoczęło ostatnią turę, do zakończenia odpowiedzi.", "tps.label": "TPS", - "tps.tip": "Liczba tokenów wyjściowych na sekundę po pierwszym wyniku modelu.", - "e2e.label": "E2E", - "e2e.tip": "Czas od wysłania żądania do dostawcy do zakończenia strumienia odpowiedzi.", + "tps.tip": + "Tokeny wyjściowe i rozumowania na sekundę we wszystkich żądaniach do modelu w ostatniej turze, bez czasu narzędzi.", "nav.label": "NAV", "nav.tip": "Ostatnie zakończone przejście między trasami obejmujące stronę sesji, mierzone od uruchomienia routera do pierwszego odrysowania po ustabilizowaniu widoku.", diff --git a/packages/gui-extensions/src/debug/i18n/ro.ts b/packages/gui-extensions/src/debug/i18n/ro.ts index 4c30a1830ca6..d42f8f14759d 100644 --- a/packages/gui-extensions/src/debug/i18n/ro.ts +++ b/packages/gui-extensions/src/debug/i18n/ro.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnosticare performanță dezvoltare", providerAriaLabel: "Diagnosticarea performanței furnizorului", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Timpul de la trimiterea cererii către furnizor până la prima ieșire a modelului.", - "ttfa.label": "TTFA", - "ttfa.tip": "Timpul de la trimiterea cererii către furnizor până la primul text al răspunsului.", + "duration.label": "TIME", + "duration.tip": "Timpul de la solicitarea care a început ultima tură până la finalizarea răspunsului.", "tps.label": "TPS", - "tps.tip": "Tokenuri de ieșire pe secundă după prima ieșire a modelului.", - "e2e.label": "E2E", - "e2e.tip": "Timpul de la trimiterea cererii către furnizor până la încheierea fluxului de răspuns.", + "tps.tip": + "Tokenuri de ieșire și de raționament pe secundă în cererile către model din ultima tură, fără timpul instrumentelor.", "nav.label": "NAV", "nav.tip": "Ultima tranziție de rută finalizată care implică o pagină de sesiune, măsurată de la pornirea routerului până la primul paint după stabilizare.", diff --git a/packages/gui-extensions/src/debug/i18n/ru.ts b/packages/gui-extensions/src/debug/i18n/ru.ts index 5b76f6e52953..1d32063c4fed 100644 --- a/packages/gui-extensions/src/debug/i18n/ru.ts +++ b/packages/gui-extensions/src/debug/i18n/ru.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Диагностика производительности разработки", providerAriaLabel: "Диагностика производительности поставщика", na: "н/д", - "ttft.label": "TTFT", - "ttft.tip": "Время от отправки запроса поставщику до первого вывода модели.", - "ttfa.label": "TTFA", - "ttfa.tip": "Время от отправки запроса поставщику до первого текста ответа.", + "duration.label": "TIME", + "duration.tip": "Время от запроса, начавшего последний ход, до завершения ответа.", "tps.label": "TPS", - "tps.tip": "Количество выходных токенов в секунду после первого вывода модели.", - "e2e.label": "E2E", - "e2e.tip": "Время от отправки запроса поставщику до завершения потока ответа.", + "tps.tip": + "Выходные токены и токены рассуждений в секунду по запросам к модели за последний ход, без учёта времени инструментов.", "nav.label": "NAV", "nav.tip": "Последний завершённый переход по маршруту, затрагивающий страницу сессии: от запуска маршрутизатора до первой отрисовки после стабилизации.", diff --git a/packages/gui-extensions/src/debug/i18n/si.ts b/packages/gui-extensions/src/debug/i18n/si.ts index 60ff1bb115d5..858a4f344dc3 100644 --- a/packages/gui-extensions/src/debug/i18n/si.ts +++ b/packages/gui-extensions/src/debug/i18n/si.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "සංවර්ධන කාර්ය සාධන රෝග විනිශ්චය", providerAriaLabel: "සපයන්නාගේ කාර්යසාධන රෝග නිර්ණය", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "සපයන්නාගේ ඉල්ලීම යැවූ මොහොතේ සිට පළමු මාදිලි ප්‍රතිදානය දක්වා කාලය.", - "ttfa.label": "TTFA", - "ttfa.tip": "සපයන්නාගේ ඉල්ලීම යැවූ මොහොතේ සිට පිළිතුරේ පළමු පෙළ දක්වා කාලය.", + "duration.label": "TIME", + "duration.tip": "අවසාන වාරය ආරම්භ කළ විමසුමේ සිට එහි ප්‍රතිචාරය සම්පූර්ණ වන තෙක් කාලය.", "tps.label": "TPS", - "tps.tip": "පළමු මාදිලි ප්‍රතිදානයෙන් පසු තත්පරයකට ලැබෙන ප්‍රතිදාන ටෝකන.", - "e2e.label": "E2E", - "e2e.tip": "සපයන්නාගේ ඉල්ලීම යැවූ මොහොතේ සිට එහි ප්‍රතිචාර ප්‍රවාහය අවසන් වන තෙක් කාලය.", + "tps.tip": "අවසාන වාරයේ මාදිලි ඉල්ලීම් පුරා තත්පරයකට ප්‍රතිදාන සහ තර්කන ටෝකන, මෙවලම් කාලය හැර.", "nav.label": "NAV", "nav.tip": "සැසි පිටුවක් ස්පර්ශ කරමින් අවසන් වරට සම්පුර්ණ කරන ලද මාර්ග සංක්‍රාන්තිය, රවුටරය ආරම්භයේ සිට එය නිරවුල් වූ පසු පළමු තීන්ත දක්වා මනිනු ලැබේ.", diff --git a/packages/gui-extensions/src/debug/i18n/sk.ts b/packages/gui-extensions/src/debug/i18n/sk.ts index 527332d19f95..e48c65a29c3d 100644 --- a/packages/gui-extensions/src/debug/i18n/sk.ts +++ b/packages/gui-extensions/src/debug/i18n/sk.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnostika výkonu vývoja", providerAriaLabel: "Diagnostika výkonu poskytovateľa", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Čas od odoslania požiadavky poskytovateľovi po prvý výstup modelu.", - "ttfa.label": "TTFA", - "ttfa.tip": "Čas od odoslania požiadavky poskytovateľovi po prvý text odpovede.", + "duration.label": "TIME", + "duration.tip": "Čas od výzvy, ktorá začala posledný ťah, po dokončenie odpovede.", "tps.label": "TPS", - "tps.tip": "Počet výstupných tokenov za sekundu po prvom výstupe modelu.", - "e2e.label": "E2E", - "e2e.tip": "Čas od odoslania požiadavky poskytovateľovi po ukončenie prúdu odpovede.", + "tps.tip": + "Výstupné tokeny a tokeny uvažovania za sekundu naprieč požiadavkami na model v poslednom ťahu, bez času nástrojov.", "nav.label": "NAV", "nav.tip": "Posledný dokončený prechod trasy dotýkajúci sa stránky relácie, merané od začiatku smerovača po prvé vykreslenie po ustálení.", diff --git a/packages/gui-extensions/src/debug/i18n/sl.ts b/packages/gui-extensions/src/debug/i18n/sl.ts index 1c0cf68a1a2a..2c320a8636c5 100644 --- a/packages/gui-extensions/src/debug/i18n/sl.ts +++ b/packages/gui-extensions/src/debug/i18n/sl.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Diagnostika uspešnosti razvoja", providerAriaLabel: "Diagnostika učinkovitosti ponudnika", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Čas od pošiljanja zahteve ponudniku do prvega izhoda modela.", - "ttfa.label": "TTFA", - "ttfa.tip": "Čas od pošiljanja zahteve ponudniku do prvega besedila odgovora.", + "duration.label": "TIME", + "duration.tip": "Čas od poziva, ki je začel zadnjo potezo, do dokončanja odgovora.", "tps.label": "TPS", - "tps.tip": "Število izhodnih žetonov na sekundo po prvem izhodu modela.", - "e2e.label": "E2E", - "e2e.tip": "Čas od pošiljanja zahteve ponudniku do konca toka odgovora.", + "tps.tip": "Izhodni žetoni in žetoni sklepanja na sekundo v zahtevah za model v zadnji potezi, brez časa orodij.", "nav.label": "NAV", "nav.tip": "Zadnji zaključen prehod poti, ki se je dotaknil strani seje, merjeno od začetka usmerjevalnika do prve barve po tem, ko se poravna.", diff --git a/packages/gui-extensions/src/debug/i18n/sq.ts b/packages/gui-extensions/src/debug/i18n/sq.ts index 3002f8c09a3d..a5f8b7855a6b 100644 --- a/packages/gui-extensions/src/debug/i18n/sq.ts +++ b/packages/gui-extensions/src/debug/i18n/sq.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Diagnostifikimi i performancës së zhvillimit", providerAriaLabel: "Diagnostikimi i performancës së ofruesit", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Koha nga dërgimi i kërkesës te ofruesi deri te dalja e parë e modelit.", - "ttfa.label": "TTFA", - "ttfa.tip": "Koha nga dërgimi i kërkesës te ofruesi deri te teksti i parë i përgjigjes.", + "duration.label": "TIME", + "duration.tip": "Koha nga kërkesa që nisi radhën e fundit deri në përfundimin e përgjigjes.", "tps.label": "TPS", - "tps.tip": "Shenjat e daljes për sekondë pas daljes së parë të modelit.", - "e2e.label": "E2E", - "e2e.tip": "Koha nga dërgimi i kërkesës te ofruesi deri në përfundimin e rrjedhës së përgjigjes.", + "tps.tip": + "Shenjat e daljes dhe të arsyetimit për sekondë në kërkesat ndaj modelit në radhën e fundit, pa kohën e mjeteve.", "nav.label": "NAV", "nav.tip": "Tranzicioni i fundit i përfunduar i rrugës duke prekur një faqe sesioni, i matur nga fillimi i routerit deri në bojën e parë pasi të vendoset.", diff --git a/packages/gui-extensions/src/debug/i18n/sr.ts b/packages/gui-extensions/src/debug/i18n/sr.ts index ccea9b416a87..8d7828455f40 100644 --- a/packages/gui-extensions/src/debug/i18n/sr.ts +++ b/packages/gui-extensions/src/debug/i18n/sr.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Дијагностика перформанси развоја", providerAriaLabel: "Дијагностика перформанси добављача", na: "н/а", - "ttft.label": "TTFT", - "ttft.tip": "Време од слања захтева добављачу до првог излаза модела.", - "ttfa.label": "TTFA", - "ttfa.tip": "Време од слања захтева добављачу до првог текста одговора.", + "duration.label": "TIME", + "duration.tip": "Време од упита који је започео последњи потез до завршетка одговора.", "tps.label": "TPS", - "tps.tip": "Излазни токени у секунди након првог излаза модела.", - "e2e.label": "E2E", - "e2e.tip": "Време од слања захтева добављачу до завршетка тока одговора.", + "tps.tip": "Излазни токени и токени резоновања у секунди кроз захтеве моделу у последњем потезу, без времена алата.", "nav.label": "NAV", "nav.tip": "Последњи довршени прелаз руте додирује страницу сесије, мерено од почетка рутера до прве боје након што се слегне.", diff --git a/packages/gui-extensions/src/debug/i18n/sv.ts b/packages/gui-extensions/src/debug/i18n/sv.ts index f103266c56df..a7fe97ee0122 100644 --- a/packages/gui-extensions/src/debug/i18n/sv.ts +++ b/packages/gui-extensions/src/debug/i18n/sv.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Utvecklingsprestandadiagnostik", providerAriaLabel: "Prestandadiagnostik för leverantör", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "Tid från att leverantörsbegäran skickas tills modellen ger sin första utdata.", - "ttfa.label": "TTFA", - "ttfa.tip": "Tid från att leverantörsbegäran skickas tills den första svarstexten visas.", + "duration.label": "TIME", + "duration.tip": "Tid från prompten som startade den senaste turen tills svaret var klart.", "tps.label": "TPS", - "tps.tip": "Utdatatoken per sekund efter modellens första utdata.", - "e2e.label": "E2E", - "e2e.tip": "Tid från att leverantörsbegäran skickas tills svarsströmmen avslutas.", + "tps.tip": + "Utdata- och resonemangstoken per sekund över modellförfrågningarna i den senaste turen, utan verktygstid.", "nav.label": "NAV", "nav.tip": "Senast slutförda ruttövergång som berör en sessionssida, mätt från routerns start till första bildrutans rendering efter att övergången har slutförts.", diff --git a/packages/gui-extensions/src/debug/i18n/tg.ts b/packages/gui-extensions/src/debug/i18n/tg.ts index 93ed2747fe4f..472912611e18 100644 --- a/packages/gui-extensions/src/debug/i18n/tg.ts +++ b/packages/gui-extensions/src/debug/i18n/tg.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Ташхиси самаранокии рушд", providerAriaLabel: "Ташхиси кори таъминкунанда", na: "не", - "ttft.label": "TTFT", - "ttft.tip": "Вақт аз фиристодани дархост ба таъминкунанда то баромади аввалини модел.", - "ttfa.label": "TTFA", - "ttfa.tip": "Вақт аз фиристодани дархост ба таъминкунанда то матни аввалини ҷавоб.", + "duration.label": "TIME", + "duration.tip": "Вақт аз дархосте, ки навбати охиринро оғоз кард, то анҷоми ҷавоб.", "tps.label": "TPS", - "tps.tip": "Шумораи токенҳои баромад дар як сония пас аз баромади аввалини модел.", - "e2e.label": "E2E", - "e2e.tip": "Вақт аз фиристодани дархост ба таъминкунанда то анҷоми ҷараёни ҷавоб.", + "tps.tip": "Токенҳои баромад ва муҳокима дар як сония дар дархостҳои модели навбати охирин, бе вақти абзорҳо.", "nav.label": "NAV", "nav.tip": "Гузариши охирини хатсайри анҷомёфта ба саҳифаи сеанс, аз оғози роутер то рангкунии аввал пас аз ҳал шудани он чен карда мешавад.", diff --git a/packages/gui-extensions/src/debug/i18n/th.ts b/packages/gui-extensions/src/debug/i18n/th.ts index 10dea647881b..7adcc4e0c723 100644 --- a/packages/gui-extensions/src/debug/i18n/th.ts +++ b/packages/gui-extensions/src/debug/i18n/th.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "การวินิจฉัยประสิทธิภาพการพัฒนา", providerAriaLabel: "การวินิจฉัยประสิทธิภาพผู้ให้บริการ", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "เวลาตั้งแต่ส่งคำขอไปยังผู้ให้บริการจนถึงเอาต์พุตแรกจากโมเดล", - "ttfa.label": "TTFA", - "ttfa.tip": "เวลาตั้งแต่ส่งคำขอไปยังผู้ให้บริการจนถึงข้อความคำตอบแรก", + "duration.label": "TIME", + "duration.tip": "เวลาตั้งแต่พรอมต์ที่เริ่มเทิร์นล่าสุดจนถึงการตอบกลับเสร็จสิ้น", "tps.label": "TPS", - "tps.tip": "จำนวนโทเค็นเอาต์พุตต่อวินาทีหลังจากเอาต์พุตแรกจากโมเดล", - "e2e.label": "E2E", - "e2e.tip": "เวลาตั้งแต่ส่งคำขอไปยังผู้ให้บริการจนกระทั่งสตรีมการตอบกลับสิ้นสุด", + "tps.tip": "โทเค็นเอาต์พุตและการให้เหตุผลต่อวินาทีในคำขอโมเดลของเทิร์นล่าสุด ไม่รวมเวลาของเครื่องมือ", "nav.label": "NAV", "nav.tip": "การเปลี่ยนเส้นทางที่เสร็จสมบูรณ์ล่าสุดที่สัมผัสหน้าเซสชัน วัดจากจุดเริ่มต้นเราเตอร์จนถึงการวาดครั้งแรกหลังจากที่นิ่ง", diff --git a/packages/gui-extensions/src/debug/i18n/tk.ts b/packages/gui-extensions/src/debug/i18n/tk.ts index f7a5e2869285..f0fa30fd6882 100644 --- a/packages/gui-extensions/src/debug/i18n/tk.ts +++ b/packages/gui-extensions/src/debug/i18n/tk.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Ösüş öndürijiligini anyklaýyş", providerAriaLabel: "Hyzmat üpjünçiniň öndürijilik diagnostikasy", na: "n / a", - "ttft.label": "TTFT", - "ttft.tip": "Hyzmat üpjünçä haýyş iberilenden modeliň ilkinji çykyşyna çenli wagt.", - "ttfa.label": "TTFA", - "ttfa.tip": "Hyzmat üpjünçä haýyş iberilenden jogabyň ilkinji tekstine çenli wagt.", + "duration.label": "TIME", + "duration.tip": "Soňky nobaty başlan haýyşdan jogabyň tamamlanmagyna çenli wagt.", "tps.label": "TPS", - "tps.tip": "Modeliň ilkinji çykyşyndan soň sekuntda çykyş tokenleriniň sany.", - "e2e.label": "E2E", - "e2e.tip": "Hyzmat üpjünçä haýyş iberilenden jogap akymynyň tamamlanmagyna çenli wagt.", + "tps.tip": + "Soňky nobatyň model haýyşlary boýunça sekuntda çykyş we pikirleniş tokenleri, gural wagty hasaba alynmazdan.", "nav.label": "NAV", "nav.tip": "Iň soňky tamamlanan marşrut geçiş, sessiýa sahypasyna degip, marşrutizatoryň başyndan başlap, birinji boýag kesgitlenýänçä ölçelýär.", diff --git a/packages/gui-extensions/src/debug/i18n/tr.ts b/packages/gui-extensions/src/debug/i18n/tr.ts index c0ccea3f1d64..261408782035 100644 --- a/packages/gui-extensions/src/debug/i18n/tr.ts +++ b/packages/gui-extensions/src/debug/i18n/tr.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Geliştirme performansı teşhisi", providerAriaLabel: "Sağlayıcı performansı tanılaması", na: "yok", - "ttft.label": "TTFT", - "ttft.tip": "Sağlayıcı isteğinin gönderilmesinden ilk model çıktısına kadar geçen süre.", - "ttfa.label": "TTFA", - "ttfa.tip": "Sağlayıcı isteğinin gönderilmesinden ilk yanıt metnine kadar geçen süre.", + "duration.label": "TIME", + "duration.tip": "Son turu başlatan istemden yanıtın tamamlanmasına kadar geçen süre.", "tps.label": "TPS", - "tps.tip": "İlk model çıktısından sonra saniye başına çıktı tokenı.", - "e2e.label": "E2E", - "e2e.tip": "Sağlayıcı isteğinin gönderilmesinden yanıt akışının sona ermesine kadar geçen süre.", + "tps.tip": "Son turun model isteklerinde saniye başına çıktı ve akıl yürütme tokeni, araç süresi hariç.", "nav.label": "NAV", "nav.tip": "Yönlendirici başlangıcından yerleşme sonrası ilk boyamaya kadar ölçülen, bir oturum sayfasına dokunan son tamamlanmış rota geçişi.", diff --git a/packages/gui-extensions/src/debug/i18n/uk.ts b/packages/gui-extensions/src/debug/i18n/uk.ts index 3a4bd0abf304..9f14cdefcdc7 100644 --- a/packages/gui-extensions/src/debug/i18n/uk.ts +++ b/packages/gui-extensions/src/debug/i18n/uk.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Діагностика продуктивності розробки", providerAriaLabel: "Діагностика продуктивності постачальника", na: "н/д", - "ttft.label": "TTFT", - "ttft.tip": "Час від надсилання запиту постачальнику до першого виводу моделі.", - "ttfa.label": "TTFA", - "ttfa.tip": "Час від надсилання запиту постачальнику до першого тексту відповіді.", + "duration.label": "TIME", + "duration.tip": "Час від запиту, що розпочав останній хід, до завершення відповіді.", "tps.label": "TPS", - "tps.tip": "Кількість вихідних токенів за секунду після першого виводу моделі.", - "e2e.label": "E2E", - "e2e.tip": "Час від надсилання запиту постачальнику до завершення потоку відповіді.", + "tps.tip": "Вихідні токени й токени міркувань за секунду в запитах до моделі за останній хід, без часу інструментів.", "nav.label": "NAV", "nav.tip": "Останній завершений перехід маршруту, що торкається сторінки сесії, виміряний від запуску маршрутизатора до першого відображення після стабілізації.", diff --git a/packages/gui-extensions/src/debug/i18n/ur.ts b/packages/gui-extensions/src/debug/i18n/ur.ts index 9283541531f5..123193941d8b 100644 --- a/packages/gui-extensions/src/debug/i18n/ur.ts +++ b/packages/gui-extensions/src/debug/i18n/ur.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "ترقیاتی کارکردگی کی تشخیص", providerAriaLabel: "فراہم کنندہ کی کارکردگی کی تشخیص", na: "n/a", - "ttft.label": "TTFT", - "ttft.tip": "فراہم کنندہ کی درخواست بھیجے جانے سے ماڈل کی پہلی آؤٹ پٹ تک کا وقت۔", - "ttfa.label": "TTFA", - "ttfa.tip": "فراہم کنندہ کی درخواست بھیجے جانے سے جواب کے پہلے متن تک کا وقت۔", + "duration.label": "TIME", + "duration.tip": "تازہ ترین باری شروع کرنے والے پرامپٹ سے اس کے جواب کے مکمل ہونے تک کا وقت۔", "tps.label": "TPS", - "tps.tip": "ماڈل کی پہلی آؤٹ پٹ کے بعد فی سیکنڈ آؤٹ پٹ ٹوکنز۔", - "e2e.label": "E2E", - "e2e.tip": "فراہم کنندہ کی درخواست بھیجے جانے سے اس کے جوابی سلسلے کے اختتام تک کا وقت۔", + "tps.tip": "تازہ ترین باری کی ماڈل درخواستوں میں فی سیکنڈ آؤٹ پٹ اور استدلال ٹوکن، ٹول کے وقت کے بغیر۔", "nav.label": "NAV", "nav.tip": "سیشن صفحے سے متعلق آخری مکمل روٹ منتقلی، جسے روٹر کے آغاز سے منتقلی مکمل ہونے کے بعد پہلی بار اسکرین بننے تک ناپا گیا ہے۔", diff --git a/packages/gui-extensions/src/debug/i18n/uz.ts b/packages/gui-extensions/src/debug/i18n/uz.ts index effc5bb1bc0e..9da6eb61639a 100644 --- a/packages/gui-extensions/src/debug/i18n/uz.ts +++ b/packages/gui-extensions/src/debug/i18n/uz.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "Rivojlanish samaradorligi diagnostikasi", providerAriaLabel: "Provayder unumdorligi diagnostikasi", na: "yo'q", - "ttft.label": "TTFT", - "ttft.tip": "Provayderga so‘rov yuborilganidan modelning birinchi chiqishigacha bo‘lgan vaqt.", - "ttfa.label": "TTFA", - "ttfa.tip": "Provayderga so‘rov yuborilganidan javobning birinchi matnigacha bo‘lgan vaqt.", + "duration.label": "TIME", + "duration.tip": "Oxirgi navbatni boshlagan so'rovdan javob tugaguncha o'tgan vaqt.", "tps.label": "TPS", - "tps.tip": "Modelning birinchi chiqishidan keyingi soniyada chiqish tokenlari soni.", - "e2e.label": "E2E", - "e2e.tip": "Provayderga so‘rov yuborilganidan javob oqimi tugagunigacha bo‘lgan vaqt.", + "tps.tip": "Oxirgi navbatdagi model so'rovlari bo'yicha soniyada chiqish va mulohaza tokenlari, vosita vaqtisiz.", "nav.label": "NAV", "nav.tip": "Seans sahifasiga tegib oxirgi tugallangan marshrutga o'tish, marshrutizator boshlanishidan boshlab u o'rnatgandan keyingi birinchi bo'yoqgacha o'lchanadi.", diff --git a/packages/gui-extensions/src/debug/i18n/vi.ts b/packages/gui-extensions/src/debug/i18n/vi.ts index d38195b1b066..e2158e86356d 100644 --- a/packages/gui-extensions/src/debug/i18n/vi.ts +++ b/packages/gui-extensions/src/debug/i18n/vi.ts @@ -3,14 +3,11 @@ export default { ariaLabel: "Chẩn đoán hiệu suất phát triển", providerAriaLabel: "Chẩn đoán hiệu suất nhà cung cấp", na: "không có", - "ttft.label": "TTFT", - "ttft.tip": "Thời gian từ khi gửi yêu cầu đến nhà cung cấp cho đến đầu ra đầu tiên của mô hình.", - "ttfa.label": "TTFA", - "ttfa.tip": "Thời gian từ khi gửi yêu cầu đến nhà cung cấp cho đến văn bản trả lời đầu tiên.", + "duration.label": "TIME", + "duration.tip": "Thời gian từ lời nhắc bắt đầu lượt gần nhất cho đến khi phản hồi hoàn tất.", "tps.label": "TPS", - "tps.tip": "Số token đầu ra mỗi giây sau đầu ra đầu tiên của mô hình.", - "e2e.label": "E2E", - "e2e.tip": "Thời gian từ khi gửi yêu cầu đến nhà cung cấp cho đến khi luồng phản hồi kết thúc.", + "tps.tip": + "Số token đầu ra và suy luận mỗi giây trên các yêu cầu mô hình của lượt gần nhất, không tính thời gian công cụ.", "nav.label": "NAV", "nav.tip": "Lần chuyển tuyến hoàn tất gần nhất có truy cập trang phiên, được đo từ lúc bộ định tuyến bắt đầu đến khung hình đầu tiên sau khi ổn định.", diff --git a/packages/gui-extensions/src/debug/i18n/zh.ts b/packages/gui-extensions/src/debug/i18n/zh.ts index 2a685b3f8fb8..2d2c9b8774cd 100644 --- a/packages/gui-extensions/src/debug/i18n/zh.ts +++ b/packages/gui-extensions/src/debug/i18n/zh.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "开发性能诊断", providerAriaLabel: "提供商性能诊断", na: "不适用", - "ttft.label": "TTFT", - "ttft.tip": "从发送提供商请求到模型首次输出所用的时间。", - "ttfa.label": "TTFA", - "ttfa.tip": "从发送提供商请求到首次输出回答文本所用的时间。", + "duration.label": "TIME", + "duration.tip": "从开启最近一轮的提示到其回复完成所用的时间。", "tps.label": "TPS", - "tps.tip": "模型首次输出后每秒生成的输出词元数。", - "e2e.label": "E2E", - "e2e.tip": "从发送提供商请求到其响应流结束所用的时间。", + "tps.tip": "最近一轮模型请求中每秒的输出与推理 token 数,不含工具耗时。", "nav.label": "NAV", "nav.tip": "最后一次完成的涉及会话页面的路由转换,从路由器启动到稳定后的第一次绘制。", "fps.label": "FPS", diff --git a/packages/gui-extensions/src/debug/i18n/zht.ts b/packages/gui-extensions/src/debug/i18n/zht.ts index 03bcf6189cbf..40654688bdd3 100644 --- a/packages/gui-extensions/src/debug/i18n/zht.ts +++ b/packages/gui-extensions/src/debug/i18n/zht.ts @@ -3,14 +3,10 @@ export default { ariaLabel: "開發效能診斷", providerAriaLabel: "提供者效能診斷", na: "不適用", - "ttft.label": "TTFT", - "ttft.tip": "從送出提供者要求到模型首次輸出所需的時間。", - "ttfa.label": "TTFA", - "ttfa.tip": "從送出提供者要求到首次輸出回答文字所需的時間。", + "duration.label": "TIME", + "duration.tip": "從開啟最近一輪的提示到其回覆完成所需的時間。", "tps.label": "TPS", - "tps.tip": "模型首次輸出後每秒產生的輸出權杖數。", - "e2e.label": "E2E", - "e2e.tip": "從送出提供者要求到其回應串流結束所需的時間。", + "tps.tip": "最近一輪模型請求中每秒的輸出與推理 token 數,不含工具耗時。", "nav.label": "NAV", "nav.tip": "最後一次完成的涉及工作階段頁面的路由轉換,從路由器啟動到穩定後的第一次繪製。", "fps.label": "FPS", diff --git a/packages/gui-extensions/src/debug/metrics.test.ts b/packages/gui-extensions/src/debug/metrics.test.ts deleted file mode 100644 index 11531bea2b04..000000000000 --- a/packages/gui-extensions/src/debug/metrics.test.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { expect, test } from "bun:test" -import type { SessionMessageAssistant, SessionMessageInfo } from "@opencode/client/promise" -import type { ProviderMetricEvent, ProviderMetricState } from "./metrics" -import { applyProviderMetricEvent, projectedProviderMetrics } from "./metrics" - -const durable = { aggregateID: "ses_test", seq: 0, version: 1 } as const - -const events: ProviderMetricEvent[] = [ - { - id: "evt_started", - created: 1_000, - type: "session.step.started", - durable, - data: { - sessionID: "ses_test", - assistantMessageID: "msg_assistant", - agent: "build", - model: { id: "model", providerID: "provider" }, - started: 1_000, - }, - }, - { - id: "evt_reasoning", - created: 1_300, - type: "session.reasoning.started", - durable: { ...durable, seq: 1 }, - data: { sessionID: "ses_test", assistantMessageID: "msg_assistant", ordinal: 0 }, - }, - { - id: "evt_text", - created: 1_800, - type: "session.text.started", - durable: { ...durable, seq: 2 }, - data: { sessionID: "ses_test", assistantMessageID: "msg_assistant", ordinal: 0 }, - }, - { - id: "evt_streamed", - created: 3_800, - type: "session.step.streamed", - durable: { ...durable, seq: 3 }, - data: { sessionID: "ses_test", assistantMessageID: "msg_assistant" }, - }, - { - id: "evt_ended", - created: 4_000, - type: "session.step.ended", - durable: { ...durable, seq: 4 }, - data: { - sessionID: "ses_test", - assistantMessageID: "msg_assistant", - finish: "stop", - cost: 0, - tokens: { input: 200, output: 100, reasoning: 20, cache: { read: 0, write: 0 } }, - }, - }, -] - -test("calculates provider response metrics from durable events", () => { - const state: ProviderMetricState = {} - events.forEach((event) => applyProviderMetricEvent(state, event)) - expect(state.latest).toEqual({ - tps: 50, - ttft: 300, - ttfa: 800, - e2e: 2_800, - }) -}) - -const assistant: SessionMessageAssistant = { - id: "msg_assistant", - type: "assistant", - agent: "build", - model: { id: "model", providerID: "provider" }, - content: [ - { type: "reasoning", text: "Think", time: { created: 1_300, completed: 1_700 } }, - { type: "text", text: "Answer" }, - ], - tokens: { input: 200, output: 100, reasoning: 20, cache: { read: 0, write: 0 } }, - time: { created: 1_000, streamed: 3_800, completed: 4_000 }, -} - -test("derives a baseline from the latest completed projected request", () => { - const messages: SessionMessageInfo[] = [ - { id: "msg_user", type: "user", text: "Hi", time: { created: 1 } }, - assistant, - { ...assistant, id: "msg_running", tokens: undefined, time: { created: 5_000 } }, - ] - // Reasoning ended at 1_700, so TPS spans 1_700 → 3_800 = 100 / 2.1s. - expect(projectedProviderMetrics(messages)).toEqual({ tps: 100 / 2.1, ttft: 300, ttfa: 700, e2e: 2_800 }) -}) diff --git a/packages/gui-extensions/src/debug/metrics.ts b/packages/gui-extensions/src/debug/metrics.ts deleted file mode 100644 index 3bcedbbf34db..000000000000 --- a/packages/gui-extensions/src/debug/metrics.ts +++ /dev/null @@ -1,129 +0,0 @@ -import type { - SessionLogItem, - SessionMessageAssistant, - SessionMessageInfo, - TokenUsageInfo, -} from "@opencode/client/promise" - -type ProviderMetricEventType = - | "session.step.started" - | "session.step.streamed" - | "session.step.ended" - | "session.step.failed" - | "session.text.started" - | "session.reasoning.started" - | "session.tool.input.started" - -const types: ReadonlySet = new Set([ - "session.step.started", - "session.step.streamed", - "session.step.ended", - "session.step.failed", - "session.text.started", - "session.reasoning.started", - "session.tool.input.started", -]) - -export type ProviderMetricEvent = Extract - -export type ProviderMetrics = { - tps?: number - ttft?: number - ttfa?: number - e2e?: number -} - -type Attempt = { - assistantMessageID: string - started: number - first?: number - answer?: number - streamed?: number - tokens?: TokenUsageInfo -} - -export type ProviderMetricState = { attempt?: Attempt; latest?: ProviderMetrics } - -export function isProviderMetricEvent(event: { type: string }): event is ProviderMetricEvent { - return types.has(event.type) -} - -export function applyProviderMetricEvent(state: ProviderMetricState, event: ProviderMetricEvent) { - if (event.type === "session.step.started") { - state.attempt = { - assistantMessageID: event.data.assistantMessageID, - started: event.data.started, - } - return - } - - if (!state.attempt || event.data.assistantMessageID !== state.attempt.assistantMessageID) return - - if ( - event.type === "session.text.started" || - event.type === "session.reasoning.started" || - event.type === "session.tool.input.started" - ) { - state.attempt.first ??= event.created - if (event.type === "session.text.started") state.attempt.answer ??= event.created - return - } - - if (event.type === "session.step.streamed") { - state.attempt.streamed = event.created - return - } - - // Interrupted or failed attempts without usage would publish misleading partial numbers. - if (!event.data.tokens || state.attempt.first === undefined || state.attempt.streamed === undefined) return - state.attempt.tokens = event.data.tokens - state.latest = attemptMetrics(state.attempt) -} - -/** - * Baseline from already-loaded history. Text parts carry no start timestamp yet, so TTFT, TTFA, - * and TPS stay unavailable for text-first requests until a live request supplies them. - */ -export function projectedProviderMetrics(messages: readonly SessionMessageInfo[]): ProviderMetrics | undefined { - const message = messages.findLast( - (item): item is SessionMessageAssistant => - item.type === "assistant" && item.time.streamed !== undefined && item.tokens !== undefined, - ) - if (!message) return - // Content is chronological; only a non-text head carries the first-output time. - const head = message.content[0] - const first = head && head.type !== "text" ? head.time?.created : undefined - // Reasoning ends when the answer starts, so a reasoning part right before the first text - // approximates the live `session.text.started` timestamp. - const text = message.content.findIndex((item) => item.type === "text") - const before = text > 0 ? message.content[text - 1] : undefined - const answer = first !== undefined && before?.type === "reasoning" ? before.time?.completed : undefined - return attemptMetrics({ - assistantMessageID: message.id, - started: message.time.created, - first, - answer, - streamed: message.time.streamed, - tokens: message.tokens, - }) -} - -function attemptMetrics(attempt: Attempt): ProviderMetrics { - const ttft = elapsed(attempt.started, attempt.first) - const ttfa = elapsed(attempt.started, attempt.answer) - const e2e = elapsed(attempt.started, attempt.streamed) - // Output tokens exclude reasoning, so measure them from the answer start when one exists. - const generation = elapsed(attempt.answer ?? attempt.first, attempt.streamed) - const output = attempt.tokens?.output - return { - tps: generation && output && generation > 0 && output > 0 ? output / (generation / 1_000) : undefined, - ttft, - ttfa, - e2e, - } -} - -function elapsed(start: number | undefined, end: number | undefined) { - if (start === undefined || end === undefined) return - return Math.max(0, end - start) -} diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx index 0b8228ef8714..4cdf20c4e7de 100644 --- a/packages/tui/src/routes/session/index.tsx +++ b/packages/tui/src/routes/session/index.tsx @@ -100,12 +100,9 @@ import { cacheReuseDrop, completeGroupBoundary, createSessionRows, - legacyTurns, messageBoundaryIDs, resolvePart, sessionRowID, - turnDuration, - turnTokensPerSecond, type CacheUsage, type PartRef, type SessionRow, @@ -115,6 +112,7 @@ import { findMessageBoundary, messageNavigationSlack } from "./message-navigatio import { stringWidth } from "../../util/string-width" import { useArgs } from "../../context/args" import { withTimestampedFallback } from "@opencode/util/session-title-fallback" +import { SessionTurn } from "@opencode/util/session-turn" import { useSessionTabs, type ScrollAnchor } from "../../context/session-tabs" import { createSingleFlight } from "../../util/single-flight" import { createDelayedPresence } from "../../util/delayed-presence" @@ -172,7 +170,7 @@ export function Session(props: { const session = createMemo(() => data.session.get(route.sessionID)) const messages = () => data.session.message.list(route.sessionID) const messageIndexes = createMemo(() => new Map(messages().map((message, index) => [message.id, index]))) - const legacy = createMemo(() => legacyTurns(messages())) + const legacy = createMemo(() => SessionTurn.legacy(messages())) const messagesBeforeRevert = () => { const messageID = session()?.revert?.messageID if (!messageID) return messages() @@ -1893,12 +1891,9 @@ function AssistantFooter(props: { message: SessionMessageAssistant }) { ?.name ?? `${props.message.model.providerID}/${props.message.model.id}`, ) const messages = createMemo(() => data.session.message.list(ctx.sessionID)) - const duration = createMemo(() => - turnDuration(props.message, messages(), ctx.messageIndex(props.message.id), ctx.legacyTurns()), - ) - const tokensPerSecond = createMemo(() => - turnTokensPerSecond(props.message, messages(), ctx.messageIndex(props.message.id), ctx.legacyTurns()), - ) + const turn = () => ({ index: ctx.messageIndex(props.message.id), legacy: ctx.legacyTurns() }) + const duration = createMemo(() => SessionTurn.duration(messages(), props.message, turn())) + const tokensPerSecond = createMemo(() => SessionTurn.tokensPerSecond(messages(), props.message, turn())) const interrupted = createMemo(() => props.message.error?.message === "Step interrupted") return ( <> diff --git a/packages/tui/src/routes/session/rows.ts b/packages/tui/src/routes/session/rows.ts index 52e45c94a308..4a8437a13548 100644 --- a/packages/tui/src/routes/session/rows.ts +++ b/packages/tui/src/routes/session/rows.ts @@ -424,63 +424,6 @@ export function cacheReuseDrop(previous: CacheUsage | undefined, current: CacheU return drop > 0 ? drop : undefined } -// `legacy` marks a session without idle markers, where a turn ends at the next prompt. Reactive -// callers should pass it from a shared memo: the default scans every message, which subscribes -// the footer to the whole history. -export function turnDuration( - message: SessionMessageAssistant, - messages: SessionMessageInfo[], - position?: number, - legacy = legacyTurns(messages), -) { - if (message.time.completed === undefined) return 0 - const index = position ?? messages.findIndex((item) => item.id === message.id) - const input = messages[inputIndex(messages, index === -1 ? messages.length : index, legacy)] - return Math.max(0, message.time.completed - (input?.time.created ?? message.time.created)) -} - -export function turnTokensPerSecond( - message: SessionMessageAssistant, - messages: SessionMessageInfo[], - position?: number, - legacy = legacyTurns(messages), -) { - const index = position ?? messages.findIndex((item) => item.id === message.id) - const end = index === -1 ? messages.length : index + 1 - const start = inputIndex(messages, end, legacy) - const steps = messages - .slice(start + 1, end) - .filter((item): item is SessionMessageAssistant => item.type === "assistant") - const durations = steps.flatMap((step) => - step.time.streamed === undefined ? [] : [Math.max(0, step.time.streamed - step.time.created)], - ) - if (steps.length === 0 || durations.length !== steps.length) return - const output = steps.reduce((total, step) => total + (step.tokens?.output ?? 0) + (step.tokens?.reasoning ?? 0), 0) - const duration = durations.reduce((total, value) => total + value, 0) - if (output <= 0 || duration <= 0) return - // Aggregate before dividing so each step is weighted by its provider-active duration. - return output / (duration / 1_000) -} - -export function legacyTurns(messages: SessionMessageInfo[]) { - return !messages.some((message) => message.type === "idle") -} - -function inputIndex(messages: SessionMessageInfo[], end: number, legacy: boolean) { - // Reading a sliced prefix subscribes every footer to unrelated historical messages, so walk - // back only as far as the turn boundary: the nearest input in legacy sessions, otherwise the - // first input after the previous idle marker. - let input = -1 - for (let index = end - 1; index >= 0; index--) { - const message = messages[index] - if (message.type === "idle") return input - if (message.type !== "user" && message.type !== "synthetic") continue - if (legacy) return index - input = index - } - return input -} - function hasTokenUsage( message: SessionMessageAssistant, ): message is SessionMessageAssistant & { tokens: NonNullable } { diff --git a/packages/tui/src/util/locale.ts b/packages/tui/src/util/locale.ts index ac3371eb0795..4dedfdb8b810 100644 --- a/packages/tui/src/util/locale.ts +++ b/packages/tui/src/util/locale.ts @@ -26,27 +26,7 @@ export function number(num: number): string { return num.toString() } -export function duration(input: number) { - if (input < 1000) { - return `${input}ms` - } - if (input < 60000) { - return `${(input / 1000).toFixed(1)}s` - } - if (input < 3600000) { - const minutes = Math.floor(input / 60000) - const seconds = Math.floor((input % 60000) / 1000) - return `${minutes}m ${seconds}s` - } - if (input < 86400000) { - const hours = Math.floor(input / 3600000) - const minutes = Math.floor((input % 3600000) / 60000) - return `${hours}h ${minutes}m` - } - const days = Math.floor(input / 86400000) - const hours = Math.floor((input % 86400000) / 3600000) - return `${days}d ${hours}h` -} +export { duration } from "@opencode/util/duration" export function truncate(str: string, len: number): string { if (str.length <= len) return str diff --git a/packages/tui/test/cli/tui/session-rows.test.ts b/packages/tui/test/cli/tui/session-rows.test.ts index bc7cc3c723c3..492593339a20 100644 --- a/packages/tui/test/cli/tui/session-rows.test.ts +++ b/packages/tui/test/cli/tui/session-rows.test.ts @@ -2,111 +2,8 @@ import { expect, test } from "bun:test" import type { SessionMessageAssistant, SessionMessageInfo } from "@opencode/client" import { createMemo, createRoot } from "solid-js" import { createStore } from "solid-js/store" -import { - cacheReuseDrop, - messageBoundaryIDs, - reduceSessionRows, - sessionRowID, - turnDuration, - turnTokensPerSecond, -} from "../../../src/routes/session/rows" - -test("measures turn duration from the user prompt across assistant steps", () => { - const first = assistant("assistant-1", []) - first.time = { created: 8_000, completed: 11_000 } - const final = assistant("assistant-2", []) - final.time = { created: 27_000, completed: 30_000 } - const messages: SessionMessageInfo[] = [ - { type: "user", id: "user-1", text: "Question", time: { created: 1_000 } }, - first, - final, - ] - - expect(turnDuration(final, messages)).toBe(29_000) -}) - -test("measures request throughput including reasoning across model changes without tool time", () => { - const first = assistant("assistant-1", []) - first.time = { created: 6_000, streamed: 10_000, completed: 20_000 } - first.tokens = { input: 10, output: 20, reasoning: 5, cache: { read: 0, write: 0 } } - const final = assistant("assistant-2", []) - final.model = { id: "other-model", providerID: "other-provider", variant: "other-variant" } - final.time = { created: 24_000, streamed: 30_000, completed: 31_000 } - final.tokens = { input: 20, output: 30, reasoning: 10, cache: { read: 0, write: 0 } } - const messages: SessionMessageInfo[] = [ - { type: "user", id: "user-1", text: "Question", time: { created: 1_000 } }, - first, - final, - ] - - expect(turnTokensPerSecond(final, messages)).toBe(6.5) - first.time.streamed = undefined - expect(turnTokensPerSecond(final, messages)).toBeUndefined() -}) - -test("omits turn throughput when a stream boundary is unavailable", () => { - const final = assistant("assistant-1", []) - final.tokens = { input: 10, output: 20, reasoning: 0, cache: { read: 0, write: 0 } } - expect(turnTokensPerSecond(final, [final])).toBeUndefined() -}) - -test.each([false, true])( - "measures historical footers without later inputs or incomplete steps (indexed: %s)", - (indexed) => { - const step = (id: string, created: number, streamed: number, completed: number, output: number) => ({ - ...assistant(id, []), - time: { created, streamed, completed }, - tokens: { input: 1, output, reasoning: 2, cache: { read: 0, write: 0 } }, - }) - const messages: SessionMessageInfo[] = [ - step("before-input", 0, 1_000, 2_000, 5), - { type: "user", id: "input", text: "Question", time: { created: 3_000 } }, - step("first-step", 4_000, 5_000, 6_000, 10), - { type: "system", id: "system", text: "Instructions", time: { created: 6_500 } }, - step("second-step", 7_000, 8_000, 9_000, 20), - { type: "synthetic", id: "synthetic", text: "Update", time: { created: 10_000 } }, - step("after-synthetic", 11_000, 13_000, 14_000, 12), - { type: "user", id: "later-input", text: "Next question", time: { created: 15_000 } }, - assistant("incomplete", []), - ] - - expect( - messages.flatMap((message, index) => - message.type === "assistant" - ? [ - [ - turnDuration(message, messages, indexed ? index : undefined), - turnTokensPerSecond(message, messages, indexed ? index : undefined), - ], - ] - : [], - ), - ).toEqual([ - [2_000, 7], - [3_000, 12], - [6_000, 17], - [4_000, 7], - [0, undefined], - ]) - }, -) - -test("preserves missing-anchor footer fallbacks without including the absent assistant's tokens", () => { - const absent = assistant("absent", []) - absent.time = { created: 8_000, streamed: 9_000, completed: 10_000 } - absent.tokens = { input: 1, output: 900, reasoning: 0, cache: { read: 0, write: 0 } } - const stored = assistant("stored", []) - stored.time = { created: 6_000, streamed: 8_000, completed: 9_000 } - stored.tokens = { input: 1, output: 20, reasoning: 0, cache: { read: 0, write: 0 } } - const input: SessionMessageInfo = { type: "user", id: "input", text: "Question", time: { created: 5_000 } } - - expect(turnDuration(absent, [input, stored])).toBe(5_000) - expect(turnTokensPerSecond(absent, [input, stored])).toBe(10) - expect(turnDuration(absent, [stored])).toBe(2_000) - expect(turnTokensPerSecond(absent, [stored])).toBe(10) - expect(turnDuration(absent, [])).toBe(2_000) - expect(turnTokensPerSecond(absent, [])).toBeUndefined() -}) +import { SessionTurn } from "@opencode/util/session-turn" +import { cacheReuseDrop, messageBoundaryIDs, reduceSessionRows, sessionRowID } from "../../../src/routes/session/rows" test("indexed tail footer calculations do not subscribe to an unrelated history prefix", () => { createRoot((dispose) => { @@ -125,7 +22,10 @@ test("indexed tail footer calculations do not subscribe to an unrelated history runs++ const current = messages[3] if (current.type !== "assistant") throw new Error("Expected an assistant") - return [turnDuration(current, messages, 3), turnTokensPerSecond(current, messages, 3)] + return [ + SessionTurn.duration(messages, current, { index: 3 }), + SessionTurn.tokensPerSecond(messages, current, { index: 3 }), + ] }) expect(footer()).toEqual([4_000, 20]) setMessages(0, { type: "user", id: "replaced-prefix", text: "Older question", time: { created: 50 } }) @@ -276,30 +176,6 @@ test("closes turn usage on the idle marker so steered steps share one footer", ( ]) }) -test("measures a marker-era turn from its first prompt across steers", () => { - const step = (id: string, created: number, streamed: number, completed: number, output: number) => ({ - ...assistant(id, []), - time: { created, streamed, completed }, - tokens: { input: 1, output, reasoning: 0, cache: { read: 0, write: 0 } }, - }) - const messages: SessionMessageInfo[] = [ - { type: "user", id: "old-input", text: "Old question", time: { created: 0 } }, - step("old-step", 1_000, 2_000, 3_000, 5), - { type: "idle", id: "idle-1", outcome: "succeeded", time: { created: 3_500 } }, - { type: "user", id: "input", text: "Question", time: { created: 4_000 } }, - step("first-step", 5_000, 6_000, 7_000, 10), - { type: "user", id: "steer", text: "Also this", time: { created: 7_500 } }, - step("second-step", 8_000, 9_000, 10_000, 20), - ] - const final = messages[6] - if (final.type !== "assistant") throw new Error("Expected an assistant") - - expect(turnDuration(final, messages)).toBe(6_000) - expect(turnTokensPerSecond(final, messages)).toBe(15) - expect(turnDuration(final, messages, 6, true)).toBe(2_500) - expect(turnTokensPerSecond(final, messages, 6, true)).toBe(20) -}) - test("assigns assistant boundaries to the first rendered row instead of the first text row", () => { const messages: SessionMessageInfo[] = [ { type: "user", id: "user-1", text: "Question", time: { created: 0 } }, diff --git a/packages/util/src/duration.ts b/packages/util/src/duration.ts new file mode 100644 index 000000000000..2a27f5560c11 --- /dev/null +++ b/packages/util/src/duration.ts @@ -0,0 +1,22 @@ +/** Compact elapsed time, e.g. `850ms`, `12.4s`, `3m 5s`, `2h 10m` or `1d 4h`. */ +export function duration(input: number) { + if (input < 1000) { + return `${input}ms` + } + if (input < 60000) { + return `${(input / 1000).toFixed(1)}s` + } + if (input < 3600000) { + const minutes = Math.floor(input / 60000) + const seconds = Math.floor((input % 60000) / 1000) + return `${minutes}m ${seconds}s` + } + if (input < 86400000) { + const hours = Math.floor(input / 3600000) + const minutes = Math.floor((input % 3600000) / 60000) + return `${hours}h ${minutes}m` + } + const days = Math.floor(input / 86400000) + const hours = Math.floor((input % 86400000) / 3600000) + return `${days}d ${hours}h` +} diff --git a/packages/util/src/session-turn.test.ts b/packages/util/src/session-turn.test.ts new file mode 100644 index 000000000000..aa7828d4f64f --- /dev/null +++ b/packages/util/src/session-turn.test.ts @@ -0,0 +1,113 @@ +import { expect, test } from "bun:test" +import { SessionTurn } from "./session-turn.js" + +type Message = { + id: string + type: string + time: { created: number; streamed?: number; completed?: number } + tokens?: { output: number; reasoning: number } +} + +test("measures turn duration from the user prompt across assistant steps", () => { + const final = step("assistant-2", { created: 27_000, completed: 30_000 }) + const messages = [input("user-1", 1_000), step("assistant-1", { created: 8_000, completed: 11_000 }), final] + + expect(SessionTurn.duration(messages, final)).toBe(29_000) +}) + +test("measures request throughput including reasoning without tool time", () => { + const first = step("assistant-1", { created: 6_000, streamed: 10_000, completed: 20_000 }, 20, 5) + const final = step("assistant-2", { created: 24_000, streamed: 30_000, completed: 31_000 }, 30, 10) + const messages = [input("user-1", 1_000), first, final] + + expect(SessionTurn.tokensPerSecond(messages, final)).toBe(6.5) + first.time.streamed = undefined + expect(SessionTurn.tokensPerSecond(messages, final)).toBeUndefined() +}) + +test("omits turn throughput when a stream boundary is unavailable", () => { + const final = step("assistant-1", { created: 1 }, 20) + expect(SessionTurn.tokensPerSecond([final], final)).toBeUndefined() +}) + +test.each([false, true])( + "measures historical footers without later inputs or incomplete steps (indexed: %s)", + (indexed) => { + const timed = (id: string, created: number, streamed: number, completed: number, output: number) => + step(id, { created, streamed, completed }, output, 2) + const messages: Message[] = [ + timed("before-input", 0, 1_000, 2_000, 5), + input("input", 3_000), + timed("first-step", 4_000, 5_000, 6_000, 10), + { type: "system", id: "system", time: { created: 6_500 } }, + timed("second-step", 7_000, 8_000, 9_000, 20), + { type: "synthetic", id: "synthetic", time: { created: 10_000 } }, + timed("after-synthetic", 11_000, 13_000, 14_000, 12), + input("later-input", 15_000), + step("incomplete", { created: 1 }), + ] + + expect( + messages.flatMap((message, index) => { + if (message.type !== "assistant") return [] + const options = { index: indexed ? index : undefined } + return [ + [SessionTurn.duration(messages, message, options), SessionTurn.tokensPerSecond(messages, message, options)], + ] + }), + ).toEqual([ + [2_000, 7], + [3_000, 12], + [6_000, 17], + [4_000, 7], + [0, undefined], + ]) + }, +) + +test("preserves missing-anchor fallbacks without including the absent assistant's tokens", () => { + const absent = step("absent", { created: 8_000, streamed: 9_000, completed: 10_000 }, 900) + const stored = step("stored", { created: 6_000, streamed: 8_000, completed: 9_000 }, 20) + const prompt = input("input", 5_000) + + expect(SessionTurn.duration([prompt, stored], absent)).toBe(5_000) + expect(SessionTurn.tokensPerSecond([prompt, stored], absent)).toBe(10) + expect(SessionTurn.duration([stored], absent)).toBe(2_000) + expect(SessionTurn.tokensPerSecond([stored], absent)).toBe(10) + expect(SessionTurn.duration([], absent)).toBe(2_000) + expect(SessionTurn.tokensPerSecond([], absent)).toBeUndefined() +}) + +test("measures a marker-era turn from its first prompt across steers", () => { + const timed = (id: string, created: number, streamed: number, completed: number, output: number) => + step(id, { created, streamed, completed }, output) + const final = timed("second-step", 8_000, 9_000, 10_000, 20) + const messages: Message[] = [ + input("old-input", 0), + timed("old-step", 1_000, 2_000, 3_000, 5), + { type: "idle", id: "idle-1", time: { created: 3_500 } }, + input("input", 4_000), + timed("first-step", 5_000, 6_000, 7_000, 10), + input("steer", 7_500), + final, + ] + + expect(SessionTurn.legacy(messages)).toBe(false) + expect(SessionTurn.duration(messages, final)).toBe(6_000) + expect(SessionTurn.tokensPerSecond(messages, final)).toBe(15) + expect(SessionTurn.duration(messages, final, { index: 6, legacy: true })).toBe(2_500) + expect(SessionTurn.tokensPerSecond(messages, final, { index: 6, legacy: true })).toBe(20) +}) + +function input(id: string, created: number): Message { + return { type: "user", id, time: { created } } +} + +function step(id: string, time: Message["time"], output?: number, reasoning = 0): Message { + return { + type: "assistant", + id, + time, + tokens: output === undefined ? undefined : { output, reasoning }, + } +} diff --git a/packages/util/src/session-turn.ts b/packages/util/src/session-turn.ts new file mode 100644 index 000000000000..ffcb4407922f --- /dev/null +++ b/packages/util/src/session-turn.ts @@ -0,0 +1,64 @@ +export * as SessionTurn from "./session-turn.js" + +/** The fields of a session message that turn measurements read. Client session messages satisfy it as they are. */ +export interface Message { + readonly id: string + readonly type: string + readonly time: { readonly created: number; readonly streamed?: number; readonly completed?: number } + readonly tokens?: { readonly output: number; readonly reasoning: number } +} + +export interface Options { + /** The position of `message` in `messages`. Reactive callers should pass it so the lookup does not read every message. */ + readonly index?: number + /** + * Whether the session has no idle markers, so a turn ends at the next prompt. Reactive callers should pass it from a + * shared memo: the default scans every message, which subscribes the caller to the whole history. + */ + readonly legacy?: boolean +} + +/** Milliseconds from the prompt that started the turn until `message` completed, or 0 while it runs. */ +export function duration(messages: readonly Message[], message: Message, options: Options = {}) { + if (message.time.completed === undefined) return 0 + const index = options.index ?? messages.findIndex((item) => item.id === message.id) + const input = + messages[inputIndex(messages, index === -1 ? messages.length : index, options.legacy ?? legacy(messages))] + return Math.max(0, message.time.completed - (input?.time.created ?? message.time.created)) +} + +/** Output and reasoning tokens per second across the turn's steps up to `message`, or undefined until every step has streamed. */ +export function tokensPerSecond(messages: readonly Message[], message: Message, options: Options = {}) { + const index = options.index ?? messages.findIndex((item) => item.id === message.id) + const end = index === -1 ? messages.length : index + 1 + const start = inputIndex(messages, end, options.legacy ?? legacy(messages)) + const steps = messages.slice(start + 1, end).filter((item) => item.type === "assistant") + const durations = steps.flatMap((step) => + step.time.streamed === undefined ? [] : [Math.max(0, step.time.streamed - step.time.created)], + ) + if (steps.length === 0 || durations.length !== steps.length) return + const output = steps.reduce((total, step) => total + (step.tokens?.output ?? 0) + (step.tokens?.reasoning ?? 0), 0) + const total = durations.reduce((sum, value) => sum + value, 0) + if (output <= 0 || total <= 0) return + // Aggregate before dividing so each step is weighted by its provider-active duration. + return output / (total / 1_000) +} + +export function legacy(messages: readonly Message[]) { + return !messages.some((message) => message.type === "idle") +} + +function inputIndex(messages: readonly Message[], end: number, legacy: boolean) { + // Reading a sliced prefix subscribes every caller to unrelated historical messages, so walk + // back only as far as the turn boundary: the nearest input in legacy sessions, otherwise the + // first input after the previous idle marker. + let input = -1 + for (let index = end - 1; index >= 0; index--) { + const message = messages[index] + if (message.type === "idle") return input + if (message.type !== "user" && message.type !== "synthetic") continue + if (legacy) return index + input = index + } + return input +}