* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
132 KiB
Guardrails (ಕನ್ನಡ)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
ಸತ್ಯದ ಮೂಲ:
src/lib/guardrails/ಕೊನೆಯ ನವೀಕರಣ: 2026-08-29 — v3.8.51 (Video Bridge ಪ್ರತಿಲೇಖದ ಮೂಲವನ್ನು ಕರೆಮಾಡುವವರು ಘೋಷಿಸುತ್ತಾರೆ, ಸರ್ವರ್ ಇನ್ನೂ ಅದನ್ನು ಪರಿಶೀಲಿಸುವುದಿಲ್ಲ — #11661 ಪ್ರಕಾರ ಸ್ಪಷ್ಟಪಡಿಸಲಾಗಿದೆ)
Guardrails, OmniRoute ಮತ್ತು ಅಪ್ಸ್ಟ್ರೀಮ್ ಪೂರೈಕೆದಾರರ ನಡುವಿನ ಗಡಿಯಲ್ಲಿ ಸುರಕ್ಷತೆ,
ನೀತಿ ಮತ್ತು ವಿಷಯ ರೂಪಾಂತರಗಳನ್ನು ಜಾರಿಗೊಳಿಸುತ್ತವೆ. ಪ್ರತಿಯೊಂದು guardrail ವಿನಂತಿಯ
ಪೇಲೋಡ್ಗಳನ್ನು (preCall) ಮತ್ತು ಅಪ್ಸ್ಟ್ರೀಮ್ ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು (postCall)
ಪರಿಶೀಲಿಸಬಹುದು (ಮತ್ತು ಐಚ್ಛಿಕವಾಗಿ ತಿರಸ್ಕರಿಸಬಹುದು, ರೂಪಾಂತರಿಸಬಹುದು ಅಥವಾ ಟಿಪ್ಪಣಿ ಸೇರಿಸಬಹುದು).
ಈ ವ್ಯವಸ್ಥೆಯು fail-open ಆಗಿದೆ: ಕಾರ್ಯಗತಗೊಳ್ಳುವಾಗ guardrail ದೋಷವನ್ನು ಎಸೆದರೆ,
registry ಆ ದೋಷವನ್ನು ದಾಖಲಿಸಿ, ವಿನಂತಿಯನ್ನು ವಿಫಲಗೊಳಿಸುವ ಬದಲು ಮುಂದಿನ guardrail
ಜೊತೆಗೆ ಮುಂದುವರಿಯುತ್ತದೆ. ನಿರ್ಬಂಧಿಸುವುದು ಸ್ಪಷ್ಟ ನಿರ್ಧಾರವಾಗಿದೆ (block: true),
ಎಂದಿಗೂ ಆಕಸ್ಮಿಕವಲ್ಲ.
ಅಂತರ್ನಿರ್ಮಿತ Guardrails
ಆಮದು ಮಾಡುವಾಗ registry ಆದ್ಯತೆಯ ಕ್ರಮದಲ್ಲಿ ಆರು guardrailಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಲೋಡ್ ಮಾಡುತ್ತದೆ
(registry.ts → registerDefaultGuardrails() ನೋಡಿ):
| ಆದ್ಯತೆ | ಹೆಸರು | ಹಂತ(ಗಳು) | ಫೈಲ್ |
|---|---|---|---|
5 |
vision-bridge |
preCall |
visionBridge.ts |
6 |
audio-bridge |
preCall |
audioBridge.ts |
7 |
video-bridge |
preCall |
videoBridge.ts |
10 |
pii-masker |
pre + post |
piiMasker.ts |
20 |
prompt-injection |
preCall |
promptInjection.ts |
95 |
credential-masker |
pre + post |
credentialMasker.ts |
ಕಡಿಮೆ ಆದ್ಯತೆಯ ಸಂಖ್ಯೆಗಳು ಮೊದಲು ಕಾರ್ಯಗತಗೊಳ್ಳುತ್ತವೆ.
Vision Bridge (visionBridge.ts) — Modality Bridge PR-1
ದೃಶ್ಯ ಸಾಮರ್ಥ್ಯವಿಲ್ಲದ ಮಾದರಿಗಳಿಗೆ ಗುರಿಯಾಗಿರುವ ಚಿತ್ರಗಳನ್ನು ಒಳಗೊಂಡ ವಿನಂತಿಗಳನ್ನು ತಡೆಹಿಡಿದು, ಸಂಪೂರ್ಣ ವಿನಂತಿಯನ್ನು ದೃಶ್ಯ-ಸಾಮರ್ಥ್ಯದ ಮಾದರಿಗೆ ಮರುಮಾರ್ಗಗೊಳಿಸುತ್ತದೆ ಅಥವಾ ಅಪ್ಸ್ಟ್ರೀಮ್ ಕರೆಗೆ ಮೊದಲು ಚಿತ್ರ ಭಾಗಗಳನ್ನು ಸಂರಚಿಸಬಹುದಾದ ದೃಶ್ಯ ಮಾದರಿಯಿಂದ ರಚಿಸಲಾದ ಪಠ್ಯ ವಿವರಣೆಗಳಿಂದ ಬದಲಾಯಿಸುತ್ತದೆ. ಇದರಿಂದ ಪಠ್ಯ-ಮಾತ್ರ ಪೂರೈಕೆದಾರರು ಬಹುಮಾಧ್ಯಮ ಪೇಲೋಡ್ಗಳನ್ನು ಪಾರದರ್ಶಕವಾಗಿ ನಿರ್ವಹಿಸಬಹುದು.
ಹರಿವು:
- ಗುರಿ ಮಾದರಿಯು ಈಗಾಗಲೇ ದೃಶ್ಯವನ್ನು ಬೆಂಬಲಿಸಿದರೆ ಬಿಟ್ಟುಬಿಡಿ (ಅದು ಬಲವಂತದ-bridge
ಪಟ್ಟಿ
isVisionBridgeForcedModelನಲ್ಲಿ ಕಾಣಿಸಿಕೊಂಡಿಲ್ಲದಿದ್ದರೆ). extractImageParts(messages)ಮೂಲಕ ಚಿತ್ರ ಭಾಗಗಳನ್ನು ಹೊರತೆಗೆಯಿರಿ (visionBridgeHelpers.ts); ಇದುopen-sse/utils/mediaParts.tsನಲ್ಲಿರುವ ಏಕೀಕೃತ ಮಾಧ್ಯಮ ಪತ್ತೆಗಾರdetectMediaParts()ಗೆ ನಿಯೋಜಿಸುತ್ತದೆ — ಇದು combo ಹೊಂದಾಣಿಕೆ ಫಿಲ್ಟರ್ನೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲಾದ ಏಕೈಕ ಸತ್ಯದ ಮೂಲವಾಗಿದೆ. ಹೊರತೆಗೆಯುವಿಕೆಯನ್ನುreplaceImagePartsಮರಳಿ ಸೇರಿಸಬಹುದಾದ ಆಕಾರಗಳ ಮೇಲ್ಮಟ್ಟದ ಭಾಗಗಳಿಗೆ ಅನುಮತಿ ಪಟ್ಟಿಯ ಮೂಲಕ ಸೀಮಿತಗೊಳಿಸಲಾಗಿದೆ (extract↔replace ಒಪ್ಪಂದ): OpenAIimage_url, Anthropic base64source.type:"base64", Anthropic URLsource.type:"url"ಮತ್ತು Responses APIinput_image. ಒಳಸೇರಿಸಲಾದ ಹೊಂದಾಣಿಕೆಗಳು ಮತ್ತು ಸೂಚಕ-ಮಾತ್ರ ಆಕಾರಗಳು combo-filter ವಸ್ತುಗಳಾಗಿದ್ದು, ಅವುಗಳನ್ನು ಎಂದಿಗೂ ಹೊರತೆಗೆಯಲಾಗುವುದಿಲ್ಲ. ಯಾವುದೂ ಕಂಡುಬರದಿದ್ದರೆ ಬಿಟ್ಟುಬಿಡಿ.resolveVisionBridgeRuntimeSettings()ಮೂಲಕ ರನ್ಟೈಮ್ ಸಂರಚನೆಯನ್ನು ಪರಿಹರಿಸಿ (src/shared/constants/modalityBridgeDefaults.ts): ಹೊಸmodalityBridge*ಸೆಟ್ಟಿಂಗ್ಗಳ ಕೀಲಿಗಳು ಮೇಲುಗೈ ಸಾಧಿಸುತ್ತವೆ; ಹಳೆಯvisionBridge*ಕೀಲಿಗಳು ಒಂದು-ಚಕ್ರದ ಪರ್ಯಾಯವಾಗಿ ಉಳಿಯುತ್ತವೆ (rollback ಅವಧಿ). bridge ನಿಷ್ಕ್ರಿಯವಾಗಿದ್ದರೆ ಯಾವುದೇ ಮಾಧ್ಯಮ ಪರ್ಯಟನೆಯ ಮೊದಲು ಬಿಟ್ಟುಬಿಡಿ.- ಮೋಡ್ ಆಯ್ಕೆಕಾರಕ (
modalityBridgeVisionMode, ಕೆಳಗಿನ ಕೋಷ್ಟಕ ನೋಡಿ) ಮರುಮಾರ್ಗಗೊಳಿಸುವುದೇ ಅಥವಾ ವಿವರಿಸುವುದೇ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. ಮರುಮಾರ್ಗಗೊಳಿಸುವಿಕೆಯುmodelಅನ್ನು ಮಾತ್ರ ಬದಲಾಯಿಸಿದmodifiedPayloadಜೊತೆಗೆ meta{ rerouted, fromModel, toModel, imagesKept }ಅನ್ನು ಹಿಂದಿರುಗಿಸುತ್ತದೆ. - ವಿವರಣೆ ಪಥ: ಚಿತ್ರಗಳನ್ನು
maxImagesಗೆ ಮಿತಿಗೊಳಿಸಿ, ಕಾರ್ಯ-ಅರಿವಿನ prompt ಅನ್ನು ರಚಿಸಿ, ವಿವರಣೆ cache ಅನ್ನು ಪರಿಶೀಲಿಸಿ, ದೃಶ್ಯ ಮಾದರಿಯನ್ನು ಸಮಾನಾಂತರವಾಗಿ (Promise.allSettled) ಕರೆದು, ಅವುಗಳ ಸ್ಥಾನದಲ್ಲಿ[Image N]: <description>ಪಠ್ಯ ಭಾಗಗಳನ್ನು ಸೇರಿಸಿ. ವಿಫಲವಾದ ವಿವರಣೆಯುnullಅನ್ನು ನೀಡುತ್ತದೆ ಮತ್ತು ಮೂಲ ಚಿತ್ರ ಭಾಗವನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲಾಗುತ್ತದೆ (#4012) — ಆದರೆ combo ವಿವರಣೆ ಪಥದಲ್ಲಿ ಪ್ರತಿಯೊಂದು ವಿವರಣೆಯೂ ವಿಫಲವಾದಾಗ, ದೃಢೀಕರಿಸಿದ ದೃಶ್ಯ-ಸಾಮರ್ಥ್ಯವಿಲ್ಲದ ಅಪ್ಸ್ಟ್ರೀಮ್ಗೆ ಬದಲಾಗಿ(unavailable — no vision-capable provider connected)stub ಅನ್ನು ನೀಡಲಾಗುತ್ತದೆ (#8430). modifiedPayload+ meta (imagesProcessed,descriptions,processingTimeMs,visionModel) ಅನ್ನು ಹಿಂದಿರುಗಿಸಿ.
ಮೋಡ್ ಆಯ್ಕೆಕಾರಕ (modalityBridgeVisionMode)
| ಮೋಡ್ | ಡೀಫಾಲ್ಟ್ | ವರ್ತನೆ |
|---|---|---|
auto |
✔ | ಹಳೆಯ heuristic, ಬದಲಾಗಿಲ್ಲ (#6640/#7204): ಮೂಲ ಮಾದರಿಯು ಈಗಾಗಲೇ ಬಳಸಬಹುದಾದ credentials ಹೊಂದಿಲ್ಲದಿದ್ದರೆ, non-combo/auto/ ಮಾದರಿಗಳನ್ನು ಅತ್ಯುತ್ತಮ ದೃಶ್ಯ ಮಾದರಿಗೆ ಮರುಮಾರ್ಗಗೊಳಿಸಲಾಗುತ್ತದೆ (ಹೊಂದಿದ್ದರೆ ವಿವರಿಸಲಾಗುತ್ತದೆ); combo ಗುರಿಗಳನ್ನು ಯಾವಾಗಲೂ ವಿವರಿಸಲಾಗುತ್ತದೆ. |
describe |
ಯಾವಾಗಲೂ ವಿವರಿಸಿ — ಮರುಮಾರ್ಗಗೊಳಿಸುವಿಕೆ block ಅನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತದೆ; ಬಳಕೆದಾರರು ಆಯ್ಕೆಮಾಡಿದ ಮಾದರಿಯೇ ಯಾವಾಗಲೂ ಉತ್ತರಿಸುತ್ತದೆ. | |
reroute |
ಮರುಮಾರ್ಗಗೊಳಿಸುವಿಕೆಯನ್ನು ಬಲವಂತಗೊಳಿಸಿ: keep-credentialed-model guard ಅನ್ನು ಉಪೇಕ್ಷಿಸಲಾಗುತ್ತದೆ. ಮರುಮಾರ್ಗಗೊಳಿಸುವಿಕೆ-ಗುರಿ credential guard ಇನ್ನೂ ಅನ್ವಯಿಸುತ್ತದೆ — ಬಳಸಬಹುದಾದ ದೃಶ್ಯ ಗುರಿ ಇಲ್ಲದಿದ್ದಾಗ, ವಿನಂತಿಯು ವಿವರಣೆಗೆ ಮುಂದುವರಿಯುತ್ತದೆ; ಹೀಗಾಗಿ ಕಚ್ಚಾ ಚಿತ್ರಗಳು ಪಠ್ಯ-ಮಾತ್ರ backend ಅನ್ನು ಎಂದಿಗೂ ತಲುಪುವುದಿಲ್ಲ (#8430). |
ಬಲವಂತದ ಮೋಡ್ಗಳು auto heuristic ಕಾರ್ಯಗತಗೊಳ್ಳುವ ಮೊದಲೇ short-circuit ಆಗುತ್ತವೆ;
auto ವರ್ತನೆಯು PR-1 ಪೂರ್ವ guardrail ಗೆ byte-identical ಆಗಿದೆ.
ಕಾರ್ಯ-ಅರಿವಿನ ವಿವರಣೆ prompt (modalityBridgeVisionTaskAware)
ಡೀಫಾಲ್ಟ್ ಆಗಿ true. composeVisionPrompt() (visionBridgeHelpers.ts) ಮೂಲ
ವಿವರಣೆ prompt ಗೆ ಕೊನೆಯ ಬಳಕೆದಾರ ಸಂದೇಶದ ಪಠ್ಯವನ್ನು (500 ಅಕ್ಷರಗಳಿಗೆ ಮೊಟಕುಗೊಳಿಸಿ)
ಸೇರಿಸುತ್ತದೆ; ಇದರಿಂದ ವಿವರಣೆಯು ಬಳಕೆದಾರರು ನಿಜವಾಗಿ ಕೇಳಿದ ವಿಷಯದತ್ತ ನಿರ್ದೇಶಿಸಲ್ಪಡುತ್ತದೆ
(codex-vision-proxy ಮಾದರಿ) ಮತ್ತು ಗೋಚರಿಸುವ ಪಠ್ಯವನ್ನು ಪ್ರತಿಲೇಖಿಸಲು ದೃಶ್ಯ ಮಾದರಿಯನ್ನು
ಕೇಳುತ್ತದೆ. flag ಆಫ್ ಆಗಿದ್ದರೆ — ಅಥವಾ ಬಳಕೆದಾರರ ಪಠ್ಯವಿಲ್ಲದಿದ್ದರೆ — ಮೂಲ prompt ಅನ್ನು
ಬದಲಾವಣೆ ಇಲ್ಲದೆ ಬಳಸಲಾಗುತ್ತದೆ.
ವಿವರಣೆ self-loopನ ಸ್ವಂತ OpenAI-ಹೊಂದಾಣಿಕೆಯ ವಿನಂತಿಯು (callVisionModelSingle()
in visionBridgeHelpers.ts) ಯಾವಾಗಲೂ image_url.detail: "high" ಅನ್ನು ವಿನಂತಿಸುತ್ತದೆ —
ಪ್ರತಿ caller/providerಗೂ ಯಾವುದೇ ಷರತ್ತಿಲ್ಲದೆ, ಯಾವುದೇ client signal ಆಧಾರಿತ ನಿಯಂತ್ರಣವಿಲ್ಲದೆ.
ಈ prompt ಕೇಳುವ ಪಠ್ಯ-ಪ್ರತಿಲೇಖನ ಕಾರ್ಯದಲ್ಲಿ low-detail sampling OCR ನಿಖರತೆಯನ್ನು
ಕುಗ್ಗಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಮೂಲ inbound ವಿನಂತಿಯು ಯಾವ detail level ಬಳಸಿದ್ದರೂ
ವಿವರಣೆ call ಸ್ವತಃ ಯಾವಾಗಲೂ high detail ಅನ್ನು ಕೇಳುತ್ತದೆ. ಇದು ಆಂತರಿಕ
ವಿವರಣೆ ವಿನಂತಿಯ body ಮೇಲೆ ಮಾತ್ರ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ; ಪ್ರಾಥಮಿಕ ವಿನಂತಿಯಲ್ಲಿ callerನ ಸ್ವಂತ
image_url.detail ಅನ್ನು OmniRoute ಹೇಗೆ forward ಮಾಡುತ್ತದೆ ಎಂಬುದನ್ನು ಇದು ಬದಲಾಯಿಸುವುದಿಲ್ಲ —
ಆ default ಅನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ, ಮತ್ತು ಪತ್ತೆಯಾದ OpenCode clientsಗಾಗಿ ಮಾತ್ರ,
defaultImageDetail() (open-sse/handlers/chatCore/upstreamBody.ts) ನಲ್ಲಿ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.
ವಿವರಣೆ self-loopನ Anthropic wire-format branchನಲ್ಲಿ detail field ಇಲ್ಲ
ಮತ್ತು ಎರಡೂ defaultಗಳಿಂದ ಅದು ಪ್ರಭಾವಿತವಾಗುವುದಿಲ್ಲ.
ವಿವರಣೆ output ಮಿತಿ (modalityBridgeVisionMaxChars)
| Key | Default | Range |
|---|---|---|
modalityBridgeVisionMaxChars |
0 |
0 ಅಥವಾ 100–50000 |
0 (default) ಎಂದರೆ ಯಾವುದೇ ಮಿತಿ ಇಲ್ಲ — callVisionModel() ಹಿಂದಿರುಗಿಸುವ
ವಿವರಣೆಯನ್ನು ಮಾರ್ಪಡಿಸದೆ ಮುಂದಕ್ಕೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ, ಇದರಿಂದ ಈಗಿರುವ ವರ್ತನೆ
ಉಳಿಯುತ್ತದೆ. 100–50000 ವ್ಯಾಪ್ತಿಯ ಯಾವುದೇ ಮೌಲ್ಯವು ವಿವರಣೆಯನ್ನು ಮತ್ತೆ
[Image N]: <description> ಆಗಿ ಸೇರಿಸುವ ಮೊದಲು … suffixನೊಂದಿಗೆ truncate ಮಾಡುತ್ತದೆ
(src/lib/guardrails/visionBridge.ts ನಲ್ಲಿನ VisionBridgeGuardrail.preCall()).
downstream modelಗೆ ಸಂಪೂರ್ಣ ಪ್ರತಿಲೇಖನ ಅಗತ್ಯವಿರುವ detail-heavy OCR ಕಾರ್ಯಗಳಿಗಾಗಿ
ಇದನ್ನು ಹೆಚ್ಚಿಸಿ; ಹೆಚ್ಚು ವಿವರವಾಗಿ ಪ್ರತಿಕ್ರಿಯಿಸುವ vision modelsನ token ಬಳಕೆಯನ್ನು
ಮಿತಿಗೊಳಿಸಲು ಇದನ್ನು ಕಡಿಮೆ ಮಾಡಿ. Dashboard field, Vision tabನ Advanced panelನಲ್ಲಿ
ಇದೆ (ModalityBridgeVisionTab.tsx ನಲ್ಲಿನ modality-bridge-max-chars) ಮತ್ತು ಸ್ಪಷ್ಟವಾಗಿ
ನೀಡಲಾದ 0 ಅನ್ನು ಬದಲಾಯಿಸದೆ, 1 ಮತ್ತು 99 ನಡುವಿನ ಯಾವುದೇ ಮೌಲ್ಯವನ್ನು ಕನಿಷ್ಠ 100ಕ್ಕೆ
clamp ಮಾಡುತ್ತದೆ — 0 ಕೇವಲ "unset" default ಅಲ್ಲ, ಅದು ತನ್ನದೇ ಆದ ಮಾನ್ಯ Zod ಮೌಲ್ಯವಾಗಿದೆ
(z.union([z.literal(0), z.number().int().min(100).max(50000)])).
ವಿವರಣೆ cache (modalityBridge/bridgeCache.ts)
ವಿವರಣೆ outputsಗಾಗಿ process-wide ಆಗಿ ಹಂಚಿಕೊಳ್ಳಲಾದ in-memory LRU + TTL cache.
Key = sha256(imageRef + composedPrompt + configuredBridgeModel), ಇದರಲ್ಲಿ
length-prefix framing ಬಳಸಲಾಗುತ್ತದೆ (field-boundary collisions ಇರುವುದಿಲ್ಲ). Model ಘಟಕವು
configured bridge model ಆಗಿರುತ್ತದೆ, ನಿಜವಾಗಿ ಉತ್ತರಿಸಿದ model ಅಲ್ಲ —
callVisionModel ಆಂತರಿಕವಾಗಿ fallback ಮಾಡಬಹುದು ಮತ್ತು ಪ್ರತಿ attempt ಆಧಾರಿತ keying
cache ಅನ್ನು ವಿಭಜಿಸುತ್ತದೆ. ವಿಫಲವಾದ ವಿವರಣೆಗಳನ್ನು ಎಂದಿಗೂ cache ಮಾಡಲಾಗುವುದಿಲ್ಲ. Settings:
| Key | Default | Range |
|---|---|---|
modalityBridgeCacheEnabled |
true |
— |
modalityBridgeCacheTtlMinutes |
60 |
1–1440 |
modalityBridgeCacheMaxEntries |
200 |
10–5000 |
Remote image normalization (self-loop ವಿವರಣೆ/base64 fetch)
Bridge ಒಂದು remote image ಅನ್ನು ಸ್ವತಃ fetch ಮಾಡಿದಾಗ — Anthropic ವಿವರಣೆ
self-call ಮತ್ತು claude-wire-format base64 conversion
(ensureBase64ImagesForClaudeWire), ಇವೆರಡೂ visionBridgeHelpers.ts ನಲ್ಲಿನ
fetchRemoteImageAsDataUri() ಮೂಲಕ — ಫಲಿತಾಂಶದ data URI ಅನ್ನು vision-model
ವಿನಂತಿಯಲ್ಲಿ embed ಮಾಡುವ ಮೊದಲು normalizeDataUri()
(open-sse/utils/imageNormalize.ts) ಮೂಲಕ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. ಗಾತ್ರ ಮೀರಿದ images ಅನ್ನು
2048px long edge ಗೆ downscale ಮಾಡಲಾಗುತ್ತದೆ (OpenAI/Anthropic ಈಗಾಗಲೇ
server-sideನಲ್ಲಿ ಅನ್ವಯಿಸುವ resize ಮಿತಿಗೆ ಹೊಂದುವಂತೆ), ಇದರಿಂದ vision model ನೋಡುವುದನ್ನು
ಬದಲಾಯಿಸದೆ upload bytes/latency ಕಡಿಮೆಯಾಗುತ್ತದೆ. Resizing ಮಾಡಲು dynamic import ಮೂಲಕ
load ಮಾಡಲಾದ sharp ಬಳಸಲಾಗುತ್ತದೆ: ಅದರ native binary load ಆಗಲು ವಿಫಲವಾಗುವ platformನಲ್ಲಿ
normalizeDataUri() ಎಂದಿಗೂ throw ಮಾಡುವುದಿಲ್ಲ — ಅದು ಮೂಲ bytes ಅನ್ನು ಬದಲಾಯಿಸದೆ
ಮುಂದಕ್ಕೆ ಕಳುಹಿಸುವ fallback ಅನ್ನು ಬಳಸುತ್ತದೆ, ಆದ್ದರಿಂದ ವಿವರಣೆ/base64-conversion path
ಯಾವಾಗಲೂ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಲೇ ಇರುತ್ತದೆ. Image ಅಲ್ಲದ bytes (decode ಮಾಡಬಹುದಾದ image ಅನ್ನು
ಹಿಂದಿರುಗಿಸದ fetch) ಅನ್ನೂ ಸಹ ಬದಲಾಯಿಸದೆ ಮುಂದಕ್ಕೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. ಈ normalization,
bridge ತನ್ನದೇ self-callಗಾಗಿ fetch ಮಾಡುವ imagesಗೆ ಮಾತ್ರ ಸೀಮಿತವಾಗಿದೆ — callerನ raw
passthrough payloadಗೆ ಇದನ್ನು ಎಂದಿಗೂ ಅನ್ವಯಿಸಲಾಗುವುದಿಲ್ಲ; ಇದು opt-in-only mutation
ತತ್ವಕ್ಕೆ (Hard Rule #20) ಅನುಗುಣವಾಗಿದೆ.
Settings schema + migration
ಹೊಸ modalityBridge* keys ಅನ್ನು updateSettingsSchema
(src/shared/validation/settingsSchemas.ts) ನಲ್ಲಿ Zod ಮೂಲಕ validate ಮಾಡಲಾಗುತ್ತದೆ:
modalityBridgeVisionEnabled, modalityBridgeVisionMode,
modalityBridgeVisionModel, modalityBridgeVisionTaskAware,
modalityBridgeVisionPrompt, modalityBridgeVisionTimeout,
modalityBridgeVisionMaxImages, modalityBridgeVisionMaxChars,
modalityBridgeCache* trio, ಮತ್ತು Audio Bridge ಬಳಸುವ modalityBridgeAudio*
group. Migration 141_modality_bridge_settings.sql, ಈಗಿರುವ legacy
visionBridge* ಮೌಲ್ಯಗಳನ್ನು ಹೊಂದಾಣಿಕೆಯ ಹೊಸ keysಗೆ ನಕಲಿಸುತ್ತದೆ (idempotent ಆಗಿದ್ದು,
operator ಹೊಂದಿಸಿದ modalityBridge* ಮೌಲ್ಯವನ್ನು ಎಂದಿಗೂ overwrite ಮಾಡುವುದಿಲ್ಲ);
ಒಂದು release cycleಗಾಗಿ legacy keys ಅನ್ನು read fallback ಆಗಿ ಸ್ವೀಕರಿಸುವುದು ಮುಂದುವರಿಯುತ್ತದೆ.
ಪಾರದರ್ಶಕತೆ header + stats
ವಿವರಣೆ ಮೂಲಕ ರೂಪಾಂತರಿಸಲಾದ responsesಗಳು
x-omniroute-modality-bridge: image->text;model=<visionModel>;parts=<n>
ಅನ್ನು ಹೊಂದಿರುತ್ತವೆ (modalityBridge/bridgeStats.ts ನಲ್ಲಿನ
buildModalityBridgeHeader() ಮೂಲಕ ನಿರ್ಮಿಸಿ, src/sse/handlers/chatHelpers.ts ನಲ್ಲಿನ
withModalityBridgeHeader() ಮೂಲಕ stamp ಮಾಡಲಾಗುತ್ತದೆ).
Reroute ಮಾಡಿದ ವಿನಂತಿಗಳಿಗೆ ಯಾವುದೇ header ದೊರೆಯುವುದಿಲ್ಲ — payload ಬದಲಾಗಿಲ್ಲ ಮತ್ತು
model ಬದಲಾವಣೆ response bodyನ model fieldನಲ್ಲಿ ಈಗಾಗಲೇ ಗೋಚರಿಸುತ್ತದೆ.
GET /api/modality-bridge/stats (management auth, GET /api/settings ಗೆ
ಸಮಾನವಾದ tier) vision, audio, ಮತ್ತು video ಗಾಗಿ in-memory ಪ್ರತಿ-modality counters
{ attempts, successes, bridged, cacheHits, failures, totalLatencyMs, latencySamples, averageLatencyMs, lastUsedAt } ಅನ್ನು ಹಿಂದಿರುಗಿಸುತ್ತದೆ.
averageLatencyMs ತನ್ನ denominator ಆಗಿ ಎಲ್ಲಾ attempts ಬದಲು latencySamples ಅನ್ನು
ಬಳಸುತ್ತದೆ; timing ಇಲ್ಲದ operation ಕೃತಕವಾದ zero-millisecond sample ಅನ್ನು ರಚಿಸುವುದಿಲ್ಲ.
bridged, ಯಶಸ್ವಿ conversionsಗಾಗಿ backward-compatible alias ಆಗಿಯೇ ಉಳಿಯುತ್ತದೆ;
ವಿಫಲ attempts ಅದನ್ನು increment ಮಾಡುವುದಿಲ್ಲ.
ವಿನ್ಯಾಸದ ಪ್ರಕಾರ process restart ಆದಾಗ counters reset ಆಗುತ್ತವೆ
(telemetry, accounting ಅಲ್ಲ).
Dashboard configuration
ಮೀಸಲಾದ ಡ್ಯಾಶ್ಬೋರ್ಡ್ ಪುಟವು
/dashboard/settings/modality-bridge ಆಗಿದೆ. URL ಮೂಲಕ ಪ್ರವೇಶಿಸಬಹುದಾದ ಅದರ Vision, Audio,
ಮತ್ತು Video ಟ್ಯಾಬ್ಗಳು tab ಮೌಲ್ಯವನ್ನು ಬದಲಾಯಿಸುವಾಗ ಕ್ವೆರಿ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತವೆ.
Vision ಟ್ಯಾಬ್ ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ, ಮೋಡ್, ಮಾದರಿ ಆಯ್ಕೆ (ಸ್ವಯಂಚಾಲಿತ
ಡೀಫಾಲ್ಟ್ ಸೇರಿದಂತೆ), ಕಾರ್ಯ-ಅರಿವಿನ ಪ್ರಾಂಪ್ಟಿಂಗ್, ಸುಧಾರಿತ ಟೈಮ್ಔಟ್/ಚಿತ್ರ/ವಿವರಣೆ-ಉದ್ದ/ಕ್ಯಾಶ್
ಮಿತಿಗಳು, ರನ್ಟೈಮ್
ಕೌಂಟರ್ಗಳು ಮತ್ತು ಸಂರಕ್ಷಿತ ಮಾದರಿ ವಿನಂತಿಯನ್ನು ಒದಗಿಸುತ್ತದೆ. Audio ಟ್ಯಾಬ್ ಸಹ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ: ಇದು
ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ, Auto ಹೊಂದಿರುವ STT-ಮಾತ್ರ ಮಾದರಿ ಆಯ್ಕೆ ಸಾಧನ, ಟೈಮ್ಔಟ್/ಗರಿಷ್ಠ-ಕ್ಲಿಪ್ ಮಿತಿಗಳು, ಆಡಿಯೊ
ಕೌಂಟರ್ಗಳು ಮತ್ತು input_audio ಮಾದರಿ ಪರೀಕ್ಷೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. Video ಟ್ಯಾಬ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ: ಇದು
FFmpeg/ffprobe ರನ್ಟೈಮ್ ಸ್ಥಿತಿಯನ್ನು ವರದಿ ಮಾಡುತ್ತದೆ — ನಾಲ್ಕು ಸ್ಪಷ್ಟ UI ಸ್ಥಿತಿಗಳಲ್ಲಿ ಒಂದು (unknown ಎಂದರೆ
ಪ್ರೋಬ್ ಪ್ರಗತಿಯಲ್ಲಿದೆ ಅಥವಾ ಪೂರ್ಣಗೊಳ್ಳಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ, ಲೂಪ್ಬ್ಯಾಕ್ ಅಲ್ಲದ
ಡ್ಯಾಶ್ಬೋರ್ಡ್ ಹೋಸ್ಟ್ನಲ್ಲಿ ಕ್ಲೈಂಟ್-ಬದಿಯಲ್ಲಿ ಪ್ರೋಬ್ ಬಿಟ್ಟುಬಿಡಲಾದಾಗ restricted, ಪ್ರೋಬ್ ಮಾಡಿದ ನಂತರ
ಲಭ್ಯವಿಲ್ಲವೆಂದು ದೃಢಪಟ್ಟಾಗ unavailable, ಅಥವಾ FFmpeg/ffprobe ಆವೃತ್ತಿಗಳೊಂದಿಗೆ available) — ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ/ಮಾದರಿ/ಫ್ರೇಮ್/ವೀಡಿಯೊ/ಟೈಮ್ಔಟ್
ಮಿತಿಗಳನ್ನು ಸ್ಥಿರವಾಗಿ ಉಳಿಸುತ್ತದೆ, ಮಾದರಿ ಆಯ್ಕೆ ಸಾಧನವನ್ನು ವೀಕ್ಷಣಾ-ಸಾಮರ್ಥ್ಯವಿರುವ
ಮಾದರಿಗಳಿಗೆ ಫಿಲ್ಟರ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ವೀಡಿಯೊ ಕೌಂಟರ್ಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.
AI ಸೆಟ್ಟಿಂಗ್ಗಳ ಅಡಿಯಲ್ಲಿದ್ದ ಹಿಂದಿನ Vision Bridge ಕಾರ್ಡ್ ಈಗ ಹೊಸ ಪುಟಕ್ಕೆ ಕೊಂಡೊಯ್ಯುವ ಹೊಂದಾಣಿಕೆ ಲಿಂಕ್ ಆಗಿದೆ; ಅದು ಇನ್ನು ಮುಂದೆ ಫಾರ್ಮ್ನ ಎರಡನೇ ಪ್ರತಿಯನ್ನು ಹೊಂದಿರುವುದಿಲ್ಲ. Media Providers ಸಹ ಈಗಿರುವ Speech-to-Text ಪ್ಲೇಗ್ರೌಂಡ್ ಅನ್ನು ತೆಗೆದುಹಾಕದೆ Image-to-Text ಮತ್ತು Speech-to-Text ಕಾರ್ಯಪ್ರವಾಹಗಳನ್ನು ಅನುಗುಣವಾದ Modality Bridge ಟ್ಯಾಬ್ಗಳಿಗೆ ಲಿಂಕ್ ಮಾಡುತ್ತದೆ.
ಸ್ವಯಂ-ಲೂಪ್ ಪ್ರವೇಶ ಬೈಪಾಸ್: ವಿವರಿಸುವ ಕರೆ OmniRouteನ
ಸ್ವಂತ /v1 ಸ್ವಯಂ-ಲೂಪ್ ಮೂಲಕ ಮಾರ್ಗಗೊಳ್ಳುವಾಗ (ಪ್ರಮಾಣಿತವಲ್ಲದ ಪೂರೈಕೆದಾರ ಮಾದರಿ), ಉಪ-ವಿನಂತಿಯು
x-omniroute-admission-bypass: internal ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ ಮತ್ತು ಪರಿಹರಿಸಲಾದ
ಸ್ವಯಂ-ಲೂಪ್ ರುಜುವಾತಿನೊಂದಿಗೆ ದೃಢೀಕರಿಸಲ್ಪಡುತ್ತದೆ — ಸ್ಥಳೀಯ ಮೋಡ್ನಲ್ಲಿರುವ ಸ್ಥಳೀಯ sk_omniroute ಸೆಂಟಿನಲ್ ಅಥವಾ
ಆಪರೇಟರ್ ಕಾನ್ಫಿಗರ್ ಮಾಡಿದ OMNIROUTE_API_KEY / ROUTER_API_KEY env ಕೀ (#1350), ಇದರಿಂದ
REQUIRE_API_KEY=true ಡಿಪ್ಲಾಯ್ಮೆಂಟ್ಗಳು ಇನ್ನೂ ವಿವರಿಸುವ ಕರೆಯನ್ನು ಚಲಾಯಿಸಬಹುದು. ಆ ನಿಖರ
ರುಜುವಾತುಗಳಿಗೆ ಮಾತ್ರ ಬೈಪಾಸ್ ಅನ್ನು ಗೌರವಿಸಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಬಾಹ್ಯ ಕ್ಲೈಂಟ್ಗಳು ಪ್ರವೇಶವನ್ನು ಬಿಟ್ಟುಬಿಡಲು
ಹೆಡರ್ ಅನ್ನು ಬಳಸಲಾಗುವುದಿಲ್ಲ.
ಲೆಗಸಿ ಡೀಫಾಲ್ಟ್ಗಳು src/shared/constants/visionBridgeDefaults.ts ನಲ್ಲಿ ಇವೆ;
ಹೊಸ ಮೋಡ್/ಕಾರ್ಯ-ಅರಿವಿನ/ಕ್ಯಾಶ್ ಡೀಫಾಲ್ಟ್ಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್ಗಳ ರಿಸಾಲ್ವರ್
src/shared/constants/modalityBridgeDefaults.ts ನಲ್ಲಿ ಇವೆ. ಗಾರ್ಡ್ರೇಲ್
deps ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಆಯ್ಕೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದರಿಂದ ಪರೀಕ್ಷೆಗಳು ನಕಲಿ getSettings ಮತ್ತು
callVisionModel ಅನುಷ್ಠಾನಗಳನ್ನು ಇಂಜೆಕ್ಟ್ ಮಾಡಬಹುದು.
Audio Bridge (audioBridge.ts) — Modality Bridge PR-3
ಆಡಿಯೊ ಇನ್ಪುಟ್ ಸ್ವೀಕರಿಸುತ್ತದೆ ಎಂದು ತಿಳಿದಿಲ್ಲದ ಗುರಿಯನ್ನು ಆಡಿಯೊ ಹೊಂದಿರುವ ಚಾಟ್ ವಿನಂತಿಗಳು ತಲುಪುವ ಮೊದಲು ಅವುಗಳನ್ನು ತಡೆಹಿಡಿಯುತ್ತದೆ. ಇದು ಚಾಟ್ ವಿನಂತಿಯನ್ನು ಎಂದಿಗೂ ಮರುಮಾರ್ಗಗೊಳಿಸುವುದಿಲ್ಲ: ಈಗಿರುವ OpenAI-ಹೊಂದಾಣಿಕೆಯ ಮಲ್ಟಿಪಾರ್ಟ್ ಎಂಡ್ಪಾಯಿಂಟ್ ಮೂಲಕ ಆಡಿಯೊ ಭಾಗಗಳನ್ನು ಲಿಪ್ಯಂತರಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಆಯ್ಕೆಮಾಡಿದ ಚಾಟ್ ಮಾದರಿಯು ಪಠ್ಯ ಪ್ರತಿಲಿಪಿಗಳೊಂದಿಗೆ ಮುಂದುವರಿಯುತ್ತದೆ.
ಹರಿವು:
getResolvedModelCapabilities()ಮೂಲಕsupportsAudioಅನ್ನು ಪರಿಹರಿಸಿ. ಸ್ಪಷ್ಟ ಪೂರೈಕೆದಾರ-ರಿಜಿಸ್ಟ್ರಿ ಮೆಟಾಡೇಟಾಗೆ ಆದ್ಯತೆ ಇರುತ್ತದೆ, ನಂತರ ಸ್ಥಿರ ಮಾದರಿ ಮೆಟಾಡೇಟಾ, ಆಮೇಲೆ ಸಿಂಕ್ ಮಾಡಿದmodalities_input.audioಇಲ್ಲದ ಘೋಷಿತ ಇನ್ಪುಟ್ ಪಟ್ಟಿfalseಆಗಿರುತ್ತದೆ; ಯಾವುದೇ ಸಾಮರ್ಥ್ಯ ಪುರಾವೆ ಇಲ್ಲದಿದ್ದರೆnullಆಗಿರುತ್ತದೆ.falseಮತ್ತುnullಎರಡೂ ಸಂರಕ್ಷಣಾತ್ಮಕ ಬ್ರಿಡ್ಜ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತವೆ, ಆದರೆtrueಅದನ್ನು ಬೈಪಾಸ್ ಮಾಡುತ್ತದೆ.modalityBridgeAudio*ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಪರಿಹರಿಸಿ ಮತ್ತು ಹಂಚಿಕೆಯdetectMediaParts()ಡಿಟೆಕ್ಟರ್ ಮೂಲಕ ಪ್ರತಿ ಸಂದೇಶದಿಂದ ಸ್ಪ್ಲೈಸ್ ಮಾಡಬಹುದಾದ ಉನ್ನತ-ಮಟ್ಟದ ಆಡಿಯೊ ಭಾಗಗಳನ್ನು ಹೊರತೆಗೆಯಿರಿ. ಬೆಂಬಲಿತ ವೈರ್ ಆಕಾರಗಳು OpenAIinput_audio,audio_urlಮತ್ತುsource.media_type: "audio/*"ಆಗಿವೆ. ನೆಸ್ಟೆಡ್ ಆಡಿಯೊವನ್ನು ಮಾರ್ಗನಿರ್ದೇಶನಕ್ಕಾಗಿ ಪತ್ತೆಹಚ್ಚಲಾಗುತ್ತದೆ, ಆದರೆ ಸ್ಪ್ಲೈಸ್ ಪಥದಿಂದ ತೆಗೆದುಹಾಕಲಾಗುವುದಿಲ್ಲ. ಕೆಲಸವನ್ನುmodalityBridgeAudioMaxClipsಮಿತಿಗೆ ಒಳಪಡಿಸಲಾಗುತ್ತದೆ; ನಂತರದ ಭಾಗಗಳು ಬದಲಾಗದೆ ಉಳಿಯುತ್ತವೆ.- ಕಾನ್ಫಿಗರ್ ಮಾಡಿದ
provider/modelಅನ್ನು ಗೌರವಿಸಿ ಅಥವಾselectAudioBridgeModel()ಗೆ ಸ್ಥಿರ ಕ್ಯಾಟಲಾಗ್ ಕ್ರಮದಲ್ಲಿAUDIO_TRANSCRIPTION_PROVIDERSಮೂಲಕ ಸಾಗಲು ಮತ್ತು ಬಳಸಬಹುದಾದ ಸಕ್ರಿಯ ಪೂರೈಕೆದಾರ ರುಜುವಾತನ್ನು ಹೊಂದಿರುವ ಮೊದಲ ಮಾದರಿಯನ್ನು ಆಯ್ಕೆಮಾಡಲು ಅವಕಾಶ ನೀಡಿ. callAudioTranscription()base64/data-URI ಆಡಿಯೊವನ್ನು ಮಲ್ಟಿಪಾರ್ಟ್fileಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ ಅಥವಾ DNS ಪಿನ್ನಿಂಗ್ ಮತ್ತು 25 MB ಮಿತಿಯೊಂದಿಗೆ ಸಾರ್ವಜನಿಕ-ಮಾತ್ರ ಔಟ್ಬೌಂಡ್ ಗಾರ್ಡ್ ಮೂಲಕ ದೂರಸ್ಥaudio_urlಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡುತ್ತದೆ. ನಂತರ ಅದು ಫೈಲ್ ಮತ್ತು ಆಯ್ಕೆಮಾಡಿದ ಮಾದರಿಯನ್ನುresolveSelfLoopBearer()ಮೂಲಕ ದೃಢೀಕರಿಸಲಾದ ಸ್ಥಳೀಯ/v1/audio/transcriptionsಸ್ವಯಂ-ಲೂಪ್ಗೆ POST ಮಾಡುತ್ತದೆ. ಈಗಿರುವ ಲಿಪ್ಯಂತರ ಮಾರ್ಗವು ಸಾಮಾನ್ಯ ರುಜುವಾತು ಹುಡುಕಾಟ, ಕೂಲ್ಡೌನ್/ದರ-ಮಿತಿ ನಿರ್ವಹಣೆ ಮತ್ತು ಪೂರೈಕೆದಾರ ಡಿಸ್ಪ್ಯಾಚ್ ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.- ಯಶಸ್ವಿ ಕರೆಗಳು ತಮ್ಮ ಭಾಗಗಳನ್ನು
[Audio N]: <transcript>ನಿಂದ ಬದಲಾಯಿಸುತ್ತವೆ. ಕರೆಗಳುPromise.allSettledಬಳಸಿ ಚಲಿಸುತ್ತವೆ: ಪ್ರತ್ಯೇಕ ವೈಫಲ್ಯವು ಆ ಮೂಲ ಆಡಿಯೊ ಭಾಗವನ್ನು ಉಳಿಸುತ್ತದೆ (#4012 ಒಪ್ಪಂದ). ಪ್ರತಿ ಕರೆಯೂ ವಿಫಲವಾದರೆ ಮತ್ತು ಗುರಿಯsupportsAudio === falseಎಂದು ಸಾಬೀತಾಗಿದ್ದರೆ, ಭಾಗಗಳು[Audio N]: (unavailable — no STT provider connected)ಆಗುತ್ತವೆ (#8430 ಒಪ್ಪಂದ). ಅಜ್ಞಾತ ಗುರಿಗಾಗಿ (null), ಎಲ್ಲವೂ ವಿಫಲವಾದ ಫಲಿತಾಂಶವು ಬದಲಾಗದೆ ಉಳಿಯುತ್ತದೆ. ಬಳಸಬಹುದಾದ STT ರುಜುವಾತಿಲ್ಲದ ಸಾಬೀತಾದ ಪಠ್ಯ-ಮಾತ್ರ ಗುರಿಯು ನೆಟ್ವರ್ಕ್ ಕರೆ ಮಾಡದೆ ಅದೇ ಸ್ಪಷ್ಟ ಸ್ಟಬ್ ಅನ್ನು ಪಡೆಯುತ್ತದೆ.
ಯಶಸ್ವಿ ಪ್ರತಿಲಿಪಿಗಳು ಪ್ರಕ್ರಿಯೆ-ವ್ಯಾಪಿ Modality Bridge LRU/TTL ಕ್ಯಾಶ್ ಅನ್ನು ಬಳಸುತ್ತವೆ.
ಕೀ ಆಡಿಯೊ ಉಲ್ಲೇಖ, ಸ್ಥಿರ audio-transcription ಕಾರ್ಯಾಚರಣೆ
ಲೇಬಲ್ ಮತ್ತು ಆಯ್ಕೆಮಾಡಿದ STT ಮಾದರಿಯನ್ನು ಸಂಯೋಜಿಸುತ್ತದೆ; ವೈಫಲ್ಯಗಳನ್ನು ಎಂದಿಗೂ ಕ್ಯಾಶ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಆಡಿಯೊ ಪ್ರಯತ್ನಗಳು
ಹಂಚಿಕೆಯ bridged, cacheHits, failures ಮತ್ತು lastUsedAt ಕೌಂಟರ್ಗಳನ್ನು ನವೀಕರಿಸುತ್ತವೆ.
ರೂಪಾಂತರಗೊಂಡ ಪ್ರತಿಕ್ರಿಯೆಗಳು
x-omniroute-modality-bridge: audio->text;model=<sttModel>;parts=<n> ಅನ್ನು ಹೊಂದಿರುತ್ತವೆ; ಬದಲಾಗದ
ವಿನಂತಿಗಳು Audio Bridge ವಿಭಾಗವನ್ನು ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ.
ರನ್ಟೈಮ್ ಸೆಟ್ಟಿಂಗ್ಗಳು DB-ಬೆಂಬಲಿತವಾಗಿದ್ದು Zod ಮೂಲಕ ಮೌಲ್ಯೀಕರಿಸಲ್ಪಡುತ್ತವೆ:
| ಕೀ | ಡೀಫಾಲ್ಟ್ | ವ್ಯಾಪ್ತಿ |
|---|---|---|
modalityBridgeAudioEnabled |
true |
— |
modalityBridgeAudioModel |
"" |
Auto ಅಥವಾ STT ID |
modalityBridgeAudioTimeout |
60000 |
1000–300000 |
modalityBridgeAudioMaxClips |
3 |
1–10 |
ಹಂಚಿಕೆಯ ಕ್ಯಾಶ್ ಅನ್ನು modalityBridgeCacheEnabled,
modalityBridgeCacheTtlMinutes ಮತ್ತು modalityBridgeCacheMaxEntries ನಿಯಂತ್ರಿಸುತ್ತವೆ.
Video Bridge (videoBridge.ts, videoBridgePipeline.ts)
ತಿಳಿದಿರುವ ಸ್ಥಳೀಯ ವೀಡಿಯೊ ಬೆಂಬಲವಿಲ್ಲದ ಗುರಿಯನ್ನು ಕರೆ ಮಾಡುವ ಮೊದಲು Chat Completions messages ಮತ್ತು Responses API input ನಲ್ಲಿನ ಉನ್ನತ-ಹಂತದ ವೀಡಿಯೊ ಭಾಗಗಳನ್ನು ಪ್ರತಿಬಂಧಿಸುತ್ತದೆ. ಬೆಂಬಲಿತ ಆಕಾರಗಳು input_video, video_url, video_source, HTTPS URLಗಳು ಮತ್ತು data:video/*;base64,... ಡೇಟಾ URIಗಳು. ಪಠ್ಯದಲ್ಲಿರುವ ಸರಳ ಫೈಲ್ ಹೆಸರುಗಳನ್ನು ವೀಡಿಯೊ ಎಂದು ಪರಿಗಣಿಸಲಾಗುವುದಿಲ್ಲ.
VideoBridgeGuardrail.preCall (videoBridge.ts) ವಿನಂತಿಯ ಟ್ರಾವರ್ಸಲ್, ಸಾಮರ್ಥ್ಯ/ನೀತಿ ಪರಿಶೀಲನೆ, ಪ್ರತಿ-ವಿನಂತಿಯ ಒಟ್ಟುಗೂಡಿಸುವಿಕೆ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ ಪೇಲೋಡ್ ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಪ್ರತಿ-ವೀಡಿಯೊ ಕಾರ್ಯ — ಸ್ವಾಧೀನಪಡಿಸಿಕೊಳ್ಳುವಿಕೆ, ಸಂಪೂರ್ಣ-ಫಲಿತಾಂಶದ ಕ್ಯಾಶ್, ಫ್ರೇಮ್ ಅನುಕ್ರಮವನ್ನು ವಿವರಿಸುವುದು (ಇದು ಕರೆಗಾರರು ಘೋಷಿಸಿದ ಯಾವುದೇ ಆಡಿಯೊ ಪ್ರತಿಲಿಪಿಯನ್ನು ಸಂಯೋಜಿಸುತ್ತದೆ), ಮತ್ತು ಪ್ರತಿ-ಪ್ರಯತ್ನದ ಮೆಟ್ರಿಕ್ಗಳು/ಸ್ಥಗಿತಗೊಳಿಸುವಿಕೆ/ಸ್ವಚ್ಛಗೊಳಿಸುವಿಕೆ — ಇವೆಲ್ಲವೂ videoBridgePipeline.ts ನಲ್ಲಿರುವ processVideoPart ಹಿಂದೆ ಅಡಗಿವೆ; preCall ನ ಲೂಪ್ ಒಳಗೆ ಪ್ರತಿ ವೀಡಿಯೊ ಭಾಗಕ್ಕೆ ಒಮ್ಮೆ ಇದನ್ನು ಕರೆಯಲಾಗುತ್ತದೆ. ಆ ಮಾಡ್ಯೂಲ್ ಸ್ಪಷ್ಟ ಪೋರ್ಟ್ ಗಡಿಗಳಾದ VideoMediaBrokerPort (ಬೈಟ್ಗಳನ್ನು ಸ್ವಾಧೀನಪಡಿಸಿಕೊಳ್ಳುವುದು ಮತ್ತು ಮಾದರಿಯಾಗಿ ಆಯ್ದ ಫ್ರೇಮ್ಗಳನ್ನು ಹೊರತೆಗೆಯುವುದು), VideoAudioTranscriptionPort (ಕರೆಗಾರರು ಘೋಷಿಸಿದ ಆಡಿಯೊ ಪ್ರತಿಲಿಪಿಯನ್ನು ಮಾದರಿಯಾಗಿ ಆಯ್ದ ಶೀರ್ಷಿಕೆಗಳೊಂದಿಗೆ ಸಂಯೋಜಿಸುವುದು), ಮತ್ತು VideoDrilldownPort (ಫ್ರೇಮ್ ಡ್ರಿಲ್-ಡೌನ್ ಸ್ಥಿರತೆ ಗಡಿ; ಇನ್ನೂ processVideoPart ಗೆ ಜೋಡಿಸಲಾಗಿಲ್ಲ — ಇಂದು ಪ್ರತ್ಯೇಕ /api/modality-bridge/video/drilldown ಮಾರ್ಗ ಮಾತ್ರ ಡ್ರಿಲ್-ಡೌನ್ ನಮೂದುಗಳನ್ನು ಬರೆಯುತ್ತದೆ) ಗಳನ್ನೂ ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ.
ಸಾರ್ವಜನಿಕ /v1 ವಿನಂತಿ ಮಾರ್ಗವು ಉಪಪ್ರಕ್ರಿಯೆಯನ್ನು ಎಂದಿಗೂ ಆಮದು ಮಾಡಿಕೊಳ್ಳುವುದಿಲ್ಲ ಅಥವಾ ಆಹ್ವಾನಿಸುವುದಿಲ್ಲ. ದೂರಸ್ಥ ವೀಡಿಯೊಗಳನ್ನು 50 MiB ಮಿತಿಯೊಳಗೆ ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ; ಮಾದರಿ/ಸಂದೇಶಗಳು/ಫ್ರೇಮಿಂಗ್ ಎನ್ವೆಲಪ್ ಸಾರ್ವಜನಿಕ JSON ವಿನಂತಿ ಪ್ರವೇಶ ಮಿತಿಯಾದ 50 MiB ಒಳಗೇ ಉಳಿಯಲು, ಇನ್ಲೈನ್ base64 ವೀಡಿಯೊಗಳಿಗೆ ಪ್ರತಿ ವೀಡಿಯೊಗೆ ಡಿಕೋಡ್ ಮಾಡಿದ 36 MiB ಸಂರಕ್ಷಿತ ಮಿತಿ ಇದೆ. ಹಂಚಿಕೆಗೂ ಮೊದಲು ಇನ್ಲೈನ್ ಉದ್ದ ಮತ್ತು ಡಿಕೋಡ್ ಮಾಡಿದ ಗಾತ್ರದ ಅಂದಾಜುಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತದೆ. ಆರಂಭಿಕ ದೂರಸ್ಥ URL ಮತ್ತು ಪ್ರತಿಯೊಂದು ಮರುನಿರ್ದೇಶನದಲ್ಲಿಯೂ HTTPS ಅಗತ್ಯವಿದೆ; ಇದಕ್ಕಾಗಿ DNS ಪಿನ್ನಿಂಗ್ ಹೊಂದಿರುವ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಸಾರ್ವಜನಿಕ-ಮಾತ್ರ ಔಟ್ಬೌಂಡ್ ಗಾರ್ಡ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ನಂತರ ಬೈಟ್ಗಳು ನಿಖರವಾದ ಆಂತರಿಕ POST /api/modality-bridge/video/extract ಬ್ರೋಕರ್ ಗಡಿಯನ್ನು ದಾಟುತ್ತವೆ. ಆ ಮಾರ್ಗವು LOCAL_ONLY ಮತ್ತು SPAWN_CAPABLE ಎರಡೂ ಆಗಿದ್ದು, ಪ್ರತಿ-ಪ್ರಕ್ರಿಯೆಗೆ ದೃಢೀಕರಿಸಲಾದ, ವಿಶ್ವಾಸಾರ್ಹ-ಲೂಪ್ಬ್ಯಾಕ್ ವಿನಂತಿಯನ್ನು ಮಾತ್ರ ಸ್ವೀಕರಿಸುತ್ತದೆ ಮತ್ತು URL, ಫೈಲ್ಸಿಸ್ಟಮ್ ಪಥ, ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಫೈಲ್ ಅಥವಾ ಆರ್ಗ್ಯುಮೆಂಟ್ ಪಟ್ಟಿಯನ್ನು ಎಂದಿಗೂ ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ. API ಬಾಡಿ-ಗಾತ್ರದ ಪೈಪ್ಲೈನ್ ಮತ್ತು ಹ್ಯಾಂಡ್ಲರ್ನ ಇಂಕ್ರಿಮೆಂಟಲ್ ಬಾಡಿ ರೀಡರ್ ಸ್ವತಂತ್ರವಾಗಿ 50 MiB ಬ್ರೋಕರ್ ಇನ್ಪುಟ್ ಮಿತಿಯನ್ನು ಜಾರಿಗೊಳಿಸುತ್ತವೆ. ಅದರ ಮಿತಿಗೊಳಿಸಿದ ಕ್ಯೂ ಒಂದು ಸಮಯದಲ್ಲಿ ಒಂದು ಎಕ್ಸ್ಟ್ರಾಕ್ಷನ್ ಅನ್ನು ನಡೆಸುತ್ತದೆ, ಬಾಕಿಯಿರುವ ನಾಲ್ಕು ಕೆಲಸಗಳಿಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ ಮತ್ತು ಬಾಕಿಯಿರುವ ಇನ್ಪುಟ್ ಅನ್ನು 100 MiB ಗೆ ಮಿತಿಗೊಳಿಸುತ್ತದೆ.
ಬ್ರೋಕರ್ ಒಳಗೆ, ffprobe ಖಾಸಗಿ ಸ್ಥಳೀಯ ಫೈಲ್ ಅನ್ನು ಓದುತ್ತದೆ; ನಿಗದಿತ ಫಾರ್ಮ್ಯಾಟ್ ಅನುಮತಿ ಪಟ್ಟಿಯು ಪ್ಲೇಲಿಸ್ಟ್ ಮತ್ತು ಮ್ಯಾನಿಫೆಸ್ಟ್ ಫಾರ್ಮ್ಯಾಟ್ಗಳನ್ನು ಹೊರಗಿಡುತ್ತದೆ. ಅನುಮತಿಸಲಾದ MOV-ಕುಟುಂಬದ ಕಂಟೇನರ್ಗಳಿಗಾಗಿ, ಬಾಹ್ಯ MOV ಡೇಟಾ ಉಲ್ಲೇಖಗಳು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ನಿಷ್ಕ್ರಿಯವಾಗಿಯೇ ಉಳಿಯುತ್ತವೆ ಮತ್ತು ನಿಗದಿತ ಕಮಾಂಡ್ ಅವುಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವ ಆಯ್ಕೆಯನ್ನು ಬಳಸುವುದಿಲ್ಲ. ffprobe ಮತ್ತು ffmpeg ಎರಡೂ file-ಮಾತ್ರ ಪ್ರೋಟೋಕಾಲ್ ಅನುಮತಿ ಪಟ್ಟಿ, ಒಂದು ಥ್ರೆಡ್, ನಿಗದಿತ ಆರ್ಗ್ಯುಮೆಂಟ್ ಅರೇಗಳು, ಶೆಲ್ ಇಲ್ಲದ ಕಾರ್ಯಾಚರಣೆ ಮತ್ತು PATH ನಿಂದ ಪರಿಹರಿಸಲಾದ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಫೈಲ್ಗಳನ್ನು ಬಳಸುತ್ತವೆ. ಲಗತ್ತಿಸಲಾದ-ಚಿತ್ರದ ಕವರ್ ಸ್ಟ್ರೀಮ್ಗಳು ಪ್ಲೇ ಮಾಡಬಹುದಾದ ಅಭ್ಯರ್ಥಿಗಳಲ್ಲ. ಪ್ಲೇ ಮಾಡಬಹುದಾದ ಎಲ್ಲಾ ಸ್ಟ್ರೀಮ್ಗಳು ಮಿತಿಗಳನ್ನು ಪೂರೈಸಬೇಕು ಮತ್ತು ನಿರ್ಣಾಯಕವಾದ ಅತ್ಯಂತ ಕಡಿಮೆ-ಸೂಚ್ಯಂಕದ ಫಾಲ್ಬ್ಯಾಕ್ಗಿಂತ ಮೊದಲು ಸ್ಪಷ್ಟ ಡೀಫಾಲ್ಟ್ ಸ್ಟ್ರೀಮ್ಗೆ ಆದ್ಯತೆ ನೀಡಲಾಗುತ್ತದೆ. ವೀಡಿಯೊಗಳನ್ನು 600 ಸೆಕೆಂಡುಗಳು, ಪ್ರತಿ ಆಯಾಮಕ್ಕೆ 8,192 ಪಿಕ್ಸೆಲ್ಗಳು ಮತ್ತು 33,554,432 ಮೂಲ ಪಿಕ್ಸೆಲ್ಗಳಿಗೆ ಮಿತಿಗೊಳಿಸಲಾಗಿದೆ. FFmpeg ಮಧ್ಯಬಿಂದುವಿನ 1–16 JPEG ಫ್ರೇಮ್ಗಳನ್ನು ಮಾದರಿಯಾಗಿ ಆಯ್ದುಕೊಳ್ಳುತ್ತದೆ, ಚಿಕ್ಕ ಇನ್ಪುಟ್ಗಳನ್ನು ದೊಡ್ಡದಾಗಿಸದೆ ದೀರ್ಘ ಅಂಚನ್ನು ಗರಿಷ್ಠ 1,024 ಪಿಕ್ಸೆಲ್ಗಳಿಗೆ ಇಳಿಸುತ್ತದೆ ಮತ್ತು ಅದಕ್ಕೆ ಎಂದಿಗೂ URL ನೀಡಲಾಗುವುದಿಲ್ಲ. ಮಾದರಿ ಆಯ್ಕೆ ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ uniform ಆಗಿರುತ್ತದೆ. ಐಚ್ಛಿಕ scene_aware ಮತ್ತು ಪ್ರಾಯೋಗಿಕ segment_aware ನೀತಿಗಳು ಈಗಾಗಲೇ ಮೌಲ್ಯೀಕರಿಸಲಾದ ಸ್ಥಳೀಯ ಸ್ಟ್ರೀಮ್ ಮೇಲೆ ಒಂದು ಹೆಚ್ಚುವರಿ ನಿಗದಿತ FFmpeg ಪಾಸ್ ಅನ್ನು ನಡೆಸುತ್ತವೆ, ಮಿತಿಗೊಳಿಸಿದ showinfo ದೃಶ್ಯ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ಗಳನ್ನು ಆಯ್ಕೆಮಾಡುತ್ತವೆ ಮತ್ತು ಡಿಟೆಕ್ಟರ್ ವೈಫಲ್ಯ, ಕಾಲಮೀರಿಕೆ, ದೋಷಪೂರಿತ ಔಟ್ಪುಟ್ ಅಥವಾ ಖಾಲಿ ಅಭ್ಯರ್ಥಿ ಸಮೂಹದ ಸಂದರ್ಭದಲ್ಲಿ ಅದೇ ಏಕರೂಪ ಮಧ್ಯಬಿಂದುಗಳಿಗೆ ನಿರ್ಣಾಯಕವಾಗಿ ಫಾಲ್ಬ್ಯಾಕ್ ಆಗುತ್ತವೆ. ವಿಭಾಗ-ಅರಿವು ಮೋಡ್, ಮೌಲ್ಯೀಕರಿಸಲಾದ ದೃಶ್ಯ ಮಧ್ಯಂತರಗಳಿಗೆ ಅನುಪಾತವಾಗಿ ಮಧ್ಯಬಿಂದು ಮಾದರಿಗಳನ್ನು ಹಂಚುತ್ತದೆ; ವಿಭಾಗ-ಅರಿವು ಸಾಕ್ಷ್ಯ ಮತ್ತು ಫಾಲ್ಬ್ಯಾಕ್ ನಡವಳಿಕೆಯನ್ನು ಕೆಳಗೆ ವಿವರಿಸಲಾಗಿದೆ. ಪ್ರತಿ ನೀತಿಯಲ್ಲೂ ಆಯ್ಕೆಯ ನಂತರ ಕಠಿಣ 16-ಫ್ರೇಮ್ ಮಿತಿಯನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ದೃಶ್ಯ-ಅರಿವು ವಿನಂತಿಯು ಕೇವಲ ಒಂದು-ಫ್ರೇಮ್ ಬಜೆಟ್ ಹೊಂದಿರುವಾಗ, ಅದು ಸಕ್ರಿಯ ಪೂರ್ಣ-ವೀಡಿಯೊ ಅಥವಾ ಫೋಕಸ್ ವಿಂಡೋದ ಏಕರೂಪ ಮಧ್ಯಬಿಂದುವನ್ನು ಬಳಸುತ್ತದೆ ಮತ್ತು policyEffective: uniform ಎಂದು ವರದಿ ಮಾಡುತ್ತದೆ: ಆಯ್ಕೆಮಾಡಿದ ಒಂದೇ ದೃಶ್ಯ ಫ್ರೇಮ್ ಕಾಲರೇಖೆಯ ಎರಡೂ ತುದಿಗಳನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ. ಕರೆಗಾರರು ಐಚ್ಛಿಕವಾಗಿ ಸೀಮಿತ ಫೋಕಸ್ ವಿಂಡೋವನ್ನು (start/end ಸೆಕೆಂಡುಗಳು) ಒದಗಿಸಬಹುದು; ಗಡಿಗಳನ್ನು ಮಾಧ್ಯಮದ ಅವಧಿಗೆ ಕ್ಲ್ಯಾಂಪ್ ಮಾಡಲಾಗುತ್ತದೆ, ಹಿಮ್ಮುಖ ಅಥವಾ ಸೀಮಿತವಲ್ಲದ ವಿಂಡೋಗಳನ್ನು ತಿರಸ್ಕರಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಎಲ್ಲಾ ಮಾದರಿ ಆಯ್ಕೆ ನೀತಿಗಳನ್ನು ಸಾಮಾನ್ಯೀಕರಿಸಿದ ಮಧ್ಯಂತರದ ಒಳಗೆ ಮಾತ್ರ ನಡೆಸಲಾಗುತ್ತದೆ. ಪರಿಣಾಮವಾಗಿ ದೊರೆಯುವ ವಿಂಡೋವನ್ನು ಮಾದರಿ ಆಯ್ಕೆ ಮೆಟಾಡೇಟಾದಲ್ಲಿಯೂ, ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ವಿವರಣಾ ಪೂರ್ವಪ್ರತ್ಯಯದಲ್ಲಿಯೂ ಸೇರಿಸಲಾಗುತ್ತದೆ; ಇದರಿಂದ ಕೆಳಹಂತದ ಮಾದರಿಗಳು ಕೇಂದ್ರೀಕೃತ ಆಯ್ದ ಭಾಗವನ್ನು ಪೂರ್ಣ ಕಾಲರೇಖೆಯಿಂದ ಪ್ರತ್ಯೇಕಿಸಬಹುದು.
ಅರ್ಥಾತ್ಮಕ ಶೀರ್ಷಿಕೆ ಫೋಕಸ್ ಒಂದು ಪ್ರತ್ಯೇಕ, ಸ್ಪಷ್ಟ ಸೆಟ್ಟಿಂಗ್ ಆಗಿದೆ. ಡೀಫಾಲ್ಟ್ full ವಿಶ್ಲೇಷಣಾ ಮೋಡ್ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಫ್ರೇಮ್ ಪ್ರಾಂಪ್ಟ್ ಅನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ವಿನಂತಿ ಪಠ್ಯವನ್ನು ಶೀರ್ಷಿಕೆ ಮಾದರಿಗೆ ಎಂದಿಗೂ ಫಾರ್ವರ್ಡ್ ಮಾಡುವುದಿಲ್ಲ. focused ಮೋಡ್ನಲ್ಲಿ, ಅದೇ Chat ಅಥವಾ Responses ಕಂಟೇನರ್ನಿಂದ ಬಳಕೆದಾರರು ರಚಿಸಿದ ಇತ್ತೀಚಿನ ಖಾಲಿಯಲ್ಲದ text/input_text ಅನ್ನು ಮಾತ್ರ ಬ್ರಿಡ್ಜ್ ಓದುತ್ತದೆ, ಅದನ್ನು NFC ಗೆ ಸಾಮಾನ್ಯೀಕರಿಸುತ್ತದೆ, ನಿಯಂತ್ರಣ ಅಕ್ಷರಗಳು ಮತ್ತು ವೈಟ್ಸ್ಪೇಸ್ ಅನ್ನು ಸಂಕುಚಿಸುತ್ತದೆ ಮತ್ತು ಅದನ್ನು 500 Unicode ಕೋಡ್ ಪಾಯಿಂಟ್ಗಳಿಗೆ ಮಿತಿಗೊಳಿಸುತ್ತದೆ. ಖಾಲಿ ಫಲಿತಾಂಶವು ನಿಖರವಾದ full ಪ್ರಾಂಪ್ಟ್ಗೆ ಫಾಲ್ಬ್ಯಾಕ್ ಆಗುತ್ತದೆ. ಬಳಸಬಹುದಾದ ಸುಳಿವನ್ನು ಮೀಸಲಾದ ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ-ಬಳಕೆದಾರ-ಸಂದರ್ಭ ಬ್ಲಾಕ್ನಲ್ಲಿ JSON ಆಗಿ ಸೀರಿಯಲೈಸ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಅದು ಗಮನಿಸಬಹುದಾದ ವಿವರಗಳಿಗೆ ಮಾತ್ರ ಆದ್ಯತೆ ನೀಡಬಹುದು; ಮಾಧ್ಯಮದಲ್ಲಿ ಕಾಣುವ ಅಥವಾ ಕೇಳಿಸುವ ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಬಾರದು ಎಂಬ ಪ್ರತ್ಯೇಕ ಎಚ್ಚರಿಕೆಯನ್ನು ಅದು ಅತಿಕ್ರಮಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪಠ್ಯಾತ್ಮಕ ಫೋಕಸ್ ಎಂದಿಗೂ start/end ಅನ್ನು ಊಹಿಸುವುದಿಲ್ಲ ಅಥವಾ ಕಾಲಾಧಾರಿತ ಸ್ಯಾಂಪ್ಲರ್ ಅನ್ನು ಬದಲಿಸುವುದಿಲ್ಲ.
FU-07 ರಚನಾತ್ಮಕ ವಿಭಾಗದ ಸಾಕ್ಷ್ಯ
segment_aware ಈಗಾಗಲೇ ಮೌಲ್ಯೀಕರಿಸಲಾದ ಸ್ಥಳೀಯ ವೀಡಿಯೊ ಸ್ಟ್ರೀಮ್ ಮೇಲೆ ಒಂದು ಮಿತಿಗೊಳಿಸಿದ ಪೂರ್ವ-ವಿಶ್ಲೇಷಣಾ ಪಾಸ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ನಿಗದಿತ ಫಿಲ್ಟರ್ ಸರಪಳಿಯು ಮೊದಲು ಅಗಲವನ್ನು ಗರಿಷ್ಠ 320 ಪಿಕ್ಸೆಲ್ಗಳಿಗೆ ಸ್ಕೇಲ್ ಮಾಡುತ್ತದೆ, ದೃಶ್ಯ ಬದಲಾವಣೆಗಳು ಮತ್ತು ಸ್ಥಿರಗೊಂಡ ಮಧ್ಯಂತರಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುತ್ತದೆ, ನಂತರ ಮಸುಕು, ಸರಾಸರಿ ಲೂಮಾ ಮತ್ತು ಸ್ಥಳೀಯ/ಕಾಲಿಕ ಮಾಹಿತಿಗಾಗಿ ಪ್ರತಿ ಸೆಕೆಂಡಿಗೆ 1 ಫ್ರೇಮ್ನಂತೆ ಮಾದರಿ ಆಯ್ದುಕೊಳ್ಳುತ್ತದೆ. ಈ ಪಾಸ್ ಅನ್ನು 600 ರಚನಾತ್ಮಕ ಮಾದರಿಗಳು, ಒಂದು FFmpeg/ಫಿಲ್ಟರ್ ಥ್ರೆಡ್, ಅದೇ file-ಮಾತ್ರ ಪ್ರೋಟೋಕಾಲ್ ಮತ್ತು ಕಂಟೇನರ್ ಅನುಮತಿ ಪಟ್ಟಿಗಳು, 1 MiB ಪ್ರಕ್ರಿಯೆ-ಔಟ್ಪುಟ್ ಮಿತಿ ಮತ್ತು ಬ್ರೋಕರ್ನ ಹಂಚಿಕೆಯ ಸ್ಥಗಿತ/ಗಡುವಿನೊಳಗಿನ ಗರಿಷ್ಠ 30 ಸೆಕೆಂಡುಗಳಿಗೆ ಮಿತಿಗೊಳಿಸಲಾಗಿದೆ. ಇದು ವಿನಂತಿಯಿಂದ ಕಮಾಂಡ್, ಫಿಲ್ಟರ್, ಪಥ ಅಥವಾ URL ಅನ್ನು ಎಂದಿಗೂ ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ.
ರಚನಾತ್ಮಕ ಮೌಲ್ಯಗಳು ನಿರ್ಣಾಯಕ ಮಾದರಿ-ಆಯ್ಕೆ ಸಾಕ್ಷ್ಯವಾಗಿವೆ, ಅರ್ಥಸಂಬಂಧಿ ವೀಡಿಯೊ ತಿಳುವಳಿಕೆಯಲ್ಲ. ಅವು ವಿಷಯಗಳು, ಕ್ರಿಯೆಗಳು, ಶೀರ್ಷಿಕೆಗಳು, ಮಾತು ಅಥವಾ ಬಳಕೆದಾರರ ಉದ್ದೇಶವನ್ನು ಊಹಿಸುವುದಿಲ್ಲ. ದೃಶ್ಯ ಮತ್ತು ಸ್ಥಿರೀಕರಣ ಗಡಿಗಳು ವಿಭಾಗಗಳನ್ನು ರೂಪಿಸುತ್ತವೆ; ಸ್ಥಿರೀಕರಣ ವ್ಯಾಪ್ತಿ, ಮಸುಕು, ಎಕ್ಸ್ಪೋಷರ್, ಪ್ರಾದೇಶಿಕ ವಿವರ ಮತ್ತು ಕಾಲಾನುಕ್ರಮದ ಬದಲಾವಣೆಗಳು ಈಗಾಗಲೇ ಇರುವ 1–16 ಫ್ರೇಮ್ ಬಜೆಟ್ ಅನ್ನು ಹೇಗೆ ಹಂಚಲಾಗುತ್ತದೆ ಎಂಬುದರ ಮೇಲೆ ಮಾತ್ರ ಪ್ರಭಾವ ಬೀರುತ್ತವೆ. ಸಂಪೂರ್ಣವಾಗಿ ಸ್ಥಿರಗೊಂಡ ವಿಭಾಗಕ್ಕೆ ಒಂದು ಫ್ರೇಮ್ನ ಮಿತಿ ವಿಧಿಸಲಾಗುತ್ತದೆ, ಆದರೆ ಸ್ಥಿರಗೊಳ್ಳದ ವಿಭಾಗಗಳು ಉಳಿದ ಬಜೆಟ್ಗಾಗಿ ಸ್ಪರ್ಧಿಸುತ್ತವೆ. ಗಡಿಗಳ ಸಂಖ್ಯೆ ಫ್ರೇಮ್ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಮೀರಿದಾಗ, ವೇಗವಾದ ಆರಂಭಿಕ ಕಟ್ಗಳು ಕೊನೆಯಲ್ಲಿ ಬರುವ ದೀರ್ಘ ವಿಭಾಗವನ್ನು ಮರೆಮಾಡದಂತೆ ಏಕರೂಪ ಟೈಮ್ಲೈನ್ ವ್ಯಾಪ್ತಿಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲಾಗುತ್ತದೆ. ಸ್ಥಿರೀಕರಣ ಗಡಿಯ 1-ಸೆಕೆಂಡ್ ವಿಶ್ಲೇಷಣಾ ರೆಸಲ್ಯೂಶನ್ನೊಳಗಿನ ದೃಶ್ಯ ಗಡಿಗಳನ್ನು ಒಗ್ಗೂಡಿಸಲಾಗುತ್ತದೆ.
ಕಾಣೆಯಾದ ಫಿಲ್ಟರ್ಗಳು, ದೋಷಪೂರಿತ/ಖಾಲಿ ಸಾಕ್ಷ್ಯ, ಡಿಟೆಕ್ಟರ್ ದೋಷ ಅಥವಾ ಮಿತಿಗೊಳಿಸಿದ
ಪೂರ್ವ-ವಿಶ್ಲೇಷಣೆಯ ಕಾಲಮಿತಿ ಸಂಭವಿಸಿದರೆ, ನಿಖರವಾದ ಏಕರೂಪ ಮಧ್ಯಬಿಂದು ನೀತಿಗೆ ಮುಕ್ತವಾಗಿ
ಹಿಂತಿರುಗಲಾಗುತ್ತದೆ. ಕರೆ ಮಾಡುವವರ ರದ್ದತಿ ಅಥವಾ ಬ್ರೋಕರ್ ಗಡುವು ಹೀಗೆ ಮುಕ್ತವಾಗಿ
ಹಿಂತಿರುಗುವುದಿಲ್ಲ: ಅದು ಚಾಲನೆಯಲ್ಲಿರುವ ಉಪಪ್ರಕ್ರಿಯೆಯನ್ನು ಕೊನೆಗೊಳಿಸುತ್ತದೆ, ನಂತರದ
ಫ್ರೇಮ್ ಹೊರತೆಗೆಯುವಿಕೆಯನ್ನು ತಡೆಯುತ್ತದೆ ಮತ್ತು ಖಾಸಗಿ ತಾತ್ಕಾಲಿಕ ಟ್ರೀಯನ್ನು finally
ನಲ್ಲಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ.
scripts/perf/video-bridge-fu07-eval.ts ನಕಲು-ತೆಗೆದುಹಾಕುವಿಕೆಯ ನಂತರದ ಕ್ಯಾಪ್ಷನ್-ಕರೆ
ಉಳಿತಾಯ, ಸಾಂದ್ರ-ಚಲನೆಯ ಬಜೆಟ್ ಹಂಚಿಕೆ, ಮಸುಕು/ಎಕ್ಸ್ಪೋಷರ್/SI-TI ಸಾಕ್ಷ್ಯ, ದೀರ್ಘ
ಕೊನೆಯ ಭಾಗವಿರುವ ವೇಗದ ಕಟ್ಗಳು ಮತ್ತು ಕ್ರಮೇಣ-ಮಸುಕಾಗುವಿಕೆಯ ತಪ್ಪು ಧನಾತ್ಮಕ ಫಲಿತಾಂಶಗಳಿಗಾಗಿ
ನಿರ್ಣಾಯಕ ನೈಜ FFmpeg ಫಿಕ್ಸ್ಚರ್ಗಳನ್ನು ರಚಿಸುತ್ತದೆ. ಇದು ಪೂರ್ವ-ವಿಶ್ಲೇಷಣೆಯ ನೈಜ
ಸಮಯವನ್ನು ಹಾಗೂ /usr/bin/time ಲಭ್ಯವಿರುವಲ್ಲಿ ಉಪಪ್ರಕ್ರಿಯೆಯ CPU ಬಳಕೆ ಮತ್ತು ಗರಿಷ್ಠ
RSS ಅನ್ನು ದಾಖಲಿಸುತ್ತದೆ. ಇದರ ಗುಣಮಟ್ಟ ಪರಿಶೀಲನೆಗಳು ಕೇವಲ ರಚನಾತ್ಮಕ ಒರಾಕಲ್ಗಳಾಗಿವೆ.
ಈ ಹಾರ್ನೆಸ್ನಲ್ಲಿ ಅಧಿಕೃತ ಎಂಡ್ಪಾಯಿಂಟ್ ಅಥವಾ ಸ್ಥಿರೀಕೃತ ನಿರ್ಣಾಯಕ ಇಲ್ಲದಿರುವುದರಿಂದ
ನೈಜ ಕ್ಯಾಪ್ಷನ್-ಮಾದರಿಯ ಗುಣಮಟ್ಟವು HOLD ಆಗಿಯೇ ಉಳಿಯುತ್ತದೆ. --caption-cost-per-call-usd
ಸ್ಪಷ್ಟವಾದ ಧನಾತ್ಮಕ ಪ್ರತಿ-ಕರೆ ಅಂದಾಜನ್ನು ಒದಗಿಸದ ಹೊರತು ಹಣಕಾಸಿನ ಉಳಿತಾಯವೂ HOLD
ಆಗಿಯೇ ಉಳಿಯುತ್ತದೆ; ಸ್ಕ್ರಿಪ್ಟ್ ಯಾವುದೇ ಫಲಿತಾಂಶವನ್ನು ಎಂದಿಗೂ ಕೃತಕವಾಗಿ ಸೃಷ್ಟಿಸುವುದಿಲ್ಲ.
ಪ್ರತಿ ಫ್ರೇಮ್ ಅನ್ನು 4 MiB ಗೆ, ಎಲ್ಲಾ ರಾ ಫ್ರೇಮ್ಗಳನ್ನು ಒಟ್ಟಾಗಿ 23 MiB ಗೆ ಮತ್ತು
ಸೀರಿಯಲೈಸ್ ಮಾಡಿದ ಬ್ರೋಕರ್ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು 32 MiB ಗೆ ಮಿತಿಗೊಳಿಸಲಾಗಿದೆ. ಖಾಸಗಿ
ತಾತ್ಕಾಲಿಕ ಡೈರೆಕ್ಟರಿಯನ್ನು finally ನಲ್ಲಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. OmniRoute FFmpeg
ಅನ್ನು ಬಂಡಲ್ ಮಾಡುವುದಿಲ್ಲ ಮತ್ತು ಕಸ್ಟಮ್ ಎಕ್ಸಿಕ್ಯೂಟಬಲ್ ಪಥವನ್ನು ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ.
ಕ್ಯಾಪ್ಷನ್ ಮಾಡುವ ಮೊದಲು, ಬ್ರಿಡ್ಜ್ ಸಂಯಮಿತ ದೃಶ್ಯ ನಕಲು-ತೆಗೆದುಹಾಕುವಿಕೆ ಹಂತವನ್ನು
ಅನ್ವಯಿಸುತ್ತದೆ: ಪ್ರತಿ JPEG ಅನ್ನು 16×16 ಗ್ರೇಸ್ಕೇಲ್ ಬಫರ್ಗೆ ಇಳಿಸಲಾಗುತ್ತದೆ ಮತ್ತು
ಕೊನೆಯದಾಗಿ ಉಳಿಸಿಕೊಂಡ ಫ್ರೇಮ್ನೊಂದಿಗೆ ಮಾತ್ರ ಹೋಲಿಸಲಾಗುತ್ತದೆ. ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು
ಫ್ರೇಮ್ಗಳ ವಿನಂತಿಸಿದ ಕ್ಯಾಪ್ಷನ್ ಬಜೆಟ್ಗಾಗಿ, ಹೊರತೆಗೆಯುವಿಕೆಯು ಆ ಬಜೆಟ್ನ ಎರಡು ಪಟ್ಟುವರೆಗೆ
ಮಿತಿಗೊಳಿಸಿದ ಅಭ್ಯರ್ಥಿ ಪೂಲ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ ಮತ್ತು ಎಂದಿಗೂ 16 ಫ್ರೇಮ್ಗಳನ್ನು
ಮೀರುವುದಿಲ್ಲ. ವಿನಂತಿಸಿದ ಮಿತಿಯನ್ನು ನಕಲು-ತೆಗೆದುಹಾಕುವಿಕೆಯ ನಂತರವೇ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ;
ಬಜೆಟ್ ಕನಿಷ್ಠ ಎರಡು ಆಗಿರುವಾಗ ಅಂತಿಮ ವಿರಳೀಕರಣದ ಸಮಯದಲ್ಲಿ ಮೊದಲ ಮತ್ತು ಕೊನೆಯ ಆಯ್ದ
ಅಭ್ಯರ್ಥಿಗಳನ್ನು ಉಳಿಸಲಾಗುತ್ತದೆ. ಆವೃತ್ತಿ ಹೊಂದಿದ
grayscale-16x16-mean-cells-v2 ನೀತಿಯು ಸರಾಸರಿ ಲೂಮಾ ವ್ಯತ್ಯಾಸ ಮತ್ತು ನಾರ್ಮಲೈಸ್
ಮಾಡಿದ ವ್ಯತ್ಯಾಸವು ಕನಿಷ್ಠ 0.05 ಇರುವ ಥಂಬ್ನೇಲ್ ಸೆಲ್ಗಳ ಅನುಪಾತ—ಇವೆರಡರಲ್ಲಿ
ದೊಡ್ಡದನ್ನು ಬಳಸುತ್ತದೆ. ನಕಲು ಮಿತಿ ಸ್ಥಿರಾಂಕ 0.04 ಆಗಿದ್ದು, ರನ್ಟೈಮ್ ಸೆಟ್ಟಿಂಗ್ ಆಗಿ
ಬಹಿರಂಗಪಡಿಸುವ ಬದಲು ಪೂರ್ವಾನುಮಾನ ಸಾಧ್ಯತೆಗಾಗಿ ಅದನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ. ಈ ದ್ವಿತೀಯ
ಹೆಚ್ಚಿನ-ಕಾಂಟ್ರಾಸ್ಟ್ ಸಂಕೇತವು ಸರಾಸರಿ-ಮಾತ್ರದ ಹೋಲಿಕೆ ಮರೆಮಾಡಬಹುದಾದ ಸಣ್ಣ ಚಲನೆ ಮತ್ತು
ಗೋಚರ ಪಠ್ಯ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸುತ್ತದೆ. ಹೋಲಿಕೆಕಾರ ಅಥವಾ ಡಿಕೋಡರ್ ದೋಷಗಳು ಸಂಭವಿಸಿದರೆ
ಮುಕ್ತವಾಗಿ ಮುಂದುವರಿದು ವ್ಯಾಪ್ತಿಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲಾಗುತ್ತದೆ. ಔಟ್ಪುಟ್ ಮೆಟಾಡೇಟಾವು
ಹೊರತೆಗೆದ ಅಭ್ಯರ್ಥಿಗಳು, ಯಶಸ್ವಿಯಾಗಿ ಬಳಸಿದ ಫ್ರೇಮ್ಗಳು ಮತ್ತು ಕೈಬಿಟ್ಟ ದೃಶ್ಯ ನಕಲುಗಳನ್ನು
ಪ್ರತ್ಯೇಕಿಸುತ್ತದೆ.
ಸ್ಪಷ್ಟವಾಗಿ ಗುರುತಿಸಲಾದ ವೀಡಿಯೊ ಭಾಗವು ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಹೊಂದಿದ ಕಾಂಟ್ಯಾಕ್ಟ್ ಶೀಟ್ ಅನ್ನು
ವಿನಂತಿಸಬಹುದು. ಬ್ರಿಡ್ಜ್ ಗರಿಷ್ಠ 4-ಕಾಲಮ್, 16-ಫ್ರೇಮ್ JPEG ಗ್ರಿಡ್ ಅನ್ನು ನಿರ್ಮಿಸುತ್ತದೆ.
ಪ್ರತಿ 512-ಪಿಕ್ಸೆಲ್ ಸೆಲ್ ತನ್ನ ಮೂಲ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಅನ್ನು ಹೆಚ್ಚಿನ-ಕಾಂಟ್ರಾಸ್ಟ್ನ ಕೆಳಗಿನ
ಬ್ಯಾಂಡ್ನಲ್ಲಿ ಮುದ್ರಿಸುತ್ತದೆ; ಇದೇ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ಗಳು ನಂತರದ ಸಂಯೋಜನೆ ಮತ್ತು
ಲೆಕ್ಕಪರಿಶೋಧನೆಗಾಗಿ ಪಠ್ಯ ಮೆಟಾಡೇಟಾದಲ್ಲಿಯೂ ಉಳಿಯುತ್ತವೆ. ಸಂಪೂರ್ಣ JPEG ಗೆ 32 MiB ಮಿತಿ
ಮುಂದುವರಿಯುತ್ತದೆ. sharp ಗ್ರಿಡ್ ಅನ್ನು ಡಿಕೋಡ್ ಮಾಡಲು ಅಥವಾ ಸಂಯೋಜಿಸಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ,
ಬ್ರಿಡ್ಜ್ ಪ್ರತ್ಯೇಕ JPEG ಫ್ರೇಮ್ಗಳಿಗೆ ಹಿಂತಿರುಗುತ್ತದೆ; ಕ್ಲೈಂಟ್ ರದ್ದತಿಯು ಶೀಟ್
ಕಾರ್ಯಾಚರಣೆಯ ಮೂಲಕವೂ ಪ್ರಸಾರಗೊಳ್ಳುತ್ತದೆ.
ಪ್ರಮೋಶನ್ ಸಾಕ್ಷ್ಯವನ್ನು ಕೃತಕ ಸಂಯೋಜನಾ ಮೈಕ್ರೋಬೆಂಚ್ಮಾರ್ಕ್ನಿಂದ ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ
ಪ್ರತ್ಯೇಕಿಸಲಾಗಿದೆ. scripts/perf/video-bridge-contact-sheet-eval.ts ನೈಜ
OpenAI-ಹೊಂದಾಣಿಕೆಯ ವಿಷನ್ ಮಾದರಿಗಳಿಗಾಗಿ ಸ್ಕೀಮಾ-ಆವೃತ್ತಿ ಹೊಂದಿದ A/B ಹಾರ್ನೆಸ್ ಅನ್ನು
ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ. ಇದು ಪೂರೈಕೆದಾರರು ವರದಿ ಮಾಡಿದ ಟೋಕನ್ಗಳು, ಅಂತ್ಯದಿಂದ-ಅಂತ್ಯದ ನೈಜ
ವಿಳಂಬ (ಶೀಟ್ ಸಂಯೋಜನೆ ಸೇರಿದಂತೆ), ಮಾದರಿ-ಕರೆಗಳ ಸಂಖ್ಯೆ ಮತ್ತು ಮ್ಯಾನಿಫೆಸ್ಟ್ ವ್ಯಾಖ್ಯಾನಿಸಿದ
ವಾಸ್ತವಾಂಶ ಉಳಿಕೆಯನ್ನು ಅಳೆಯುತ್ತದೆ. ರಾ ಮಾದರಿ ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ವರದಿಗೆ ಬರೆಯಲಾಗುವುದಿಲ್ಲ;
SHA-256 ಡೈಜೆಸ್ಟ್ಗಳು ಮತ್ತು ಹೊಂದಾಣಿಕೆಯಾದ ವಾಸ್ತವಾಂಶ ID ಗಳನ್ನು ಮಾತ್ರ ಉಳಿಸಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.
--execute-real ಅನ್ನು ಪಾಸ್ ಮಾಡಿ, --model, OMNIROUTE_BASE_URL ಮತ್ತು
OMNIROUTE_API_KEY ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡದ ಹೊರತು ಹಾರ್ನೆಸ್ ಯಾವುದೇ ನೆಟ್ವರ್ಕ್ ಅಥವಾ
ಪಾವತಿಸಬೇಕಾದ ಮಾದರಿ ಕರೆಯನ್ನು ಮಾಡುವುದಿಲ್ಲ. ಆ ಸ್ಪಷ್ಟ ನೈಜ ರನ್ ಇಲ್ಲದಿದ್ದರೆ, ಅದರ
ಯಂತ್ರ-ಓದಬಹುದಾದ ತೀರ್ಪು HOLD ಆಗಿಯೇ ಉಳಿಯುತ್ತದೆ; ಕೇವಲ ಕೃತಕ ಪೇಲೋಡ್/ಕರೆ-ಸಂಖ್ಯೆ
ಮಾಪನಗಳು ಪ್ರಮೋಶನ್ ಸಾಕ್ಷ್ಯವಲ್ಲ.
ಕರೆ ಮಾಡುವವರು ಈಗಾಗಲೇ ಹೊಂದಾಣಿಕೆ ಮಾಡಿದ ಪಠ್ಯವನ್ನು ಹೊಂದಿದ್ದರೆ, ಬೆಂಬಲಿತ ವೀಡಿಯೊ
ಭಾಗಕ್ಕೆ ಐಚ್ಛಿಕ transcript.cues ಅರೇಯನ್ನು ಲಗತ್ತಿಸಬಹುದು. ಪ್ರತಿ ಕ್ಯೂ text,
ಪರಿಶೀಲಿಸಿದ ಅವಧಿಯೊಳಗಿನ ಸೀಮಿತ start/end ಮಧ್ಯಂತರ ಮತ್ತು ಅನುಮತಿಪಟ್ಟಿಯಲ್ಲಿರುವ
source (client, embedded, ಅಥವಾ audio-bridge) ಅನ್ನು ಹೊಂದಿರಬೇಕು;
confidence ನ ಡಿಫಾಲ್ಟ್ ಮೌಲ್ಯ 1 ಆಗಿದ್ದು, ಅದು 0 ಮತ್ತು 1 ನಡುವೆಯೇ ಇರಬೇಕು.
ನಿಖರವಾದ ನಕಲು ಕ್ಯೂಗಳನ್ನು ಒಗ್ಗೂಡಿಸಲಾಗುತ್ತದೆ. OmniRoute ಈ ಮೆಟಾಡೇಟಾದಿಂದ ಎಂದಿಗೂ
ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಷನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುವುದಿಲ್ಲ: ಮಾನ್ಯಗೊಳಿಸಿದ ಕ್ಯೂಗಳನ್ನು ಮೂಲ,
ವಿಶ್ವಾಸಾರ್ಹತೆ ಮತ್ತು ಮಧ್ಯಂತರದೊಂದಿಗೆ ವಿವರಿಸಲಾದ ಫಲಿತಾಂಶಕ್ಕೆ ನಕಲಿಸಲಾಗುತ್ತದೆ ಮತ್ತು
ಫ್ರೇಮ್ ಕ್ಯಾಪ್ಷನ್ಗಳ ಜೊತೆಗೆ ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಅವಲೋಕನಗಳಾಗಿ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ.
ಅಮಾನ್ಯವಾದ, ವ್ಯಾಪ್ತಿಯಿಂದ ಹೊರಗಿರುವ ಅಥವಾ ಮೂಲಾಧಾರವಿಲ್ಲದ ಪಠ್ಯವನ್ನು ಕ್ಯಾಪ್ಷನ್ ಸ್ಟ್ರೀಮ್ಗೆ
ಸೇರಿಸುವ ಬದಲು ತಿರಸ್ಕರಿಸಲಾಗುತ್ತದೆ. source ಕ್ಷೇತ್ರವು ಪ್ರಸ್ತುತ ಕರೆ ಮಾಡುವವರು
ಘೋಷಿಸುವುದಾಗಿದ್ದು, ಸರ್ವರ್ನಿಂದ ಪರಿಶೀಲಿತವಲ್ಲ: ಮೌಲ್ಯವು ಅನುಮತಿಸಲಾದ ಮೂರು
ಸ್ಟ್ರಿಂಗ್ಗಳಲ್ಲಿ ಒಂದಾಗಿರಬೇಕು ಎಂಬುದನ್ನು OmniRoute ಜಾರಿಗೊಳಿಸುತ್ತದೆ, ಆದರೆ
embedded ಅಥವಾ audio-bridge ಲೇಬಲ್ ನಿಜವಾಗಿಯೂ ಸರ್ವರ್-ಸ್ವಾಮ್ಯದ ಹೊರತೆಗೆಯುವಿಕೆಯಿಂದ
ಬಂದಿದೆ ಎಂಬುದನ್ನು ಇನ್ನೂ ಕ್ರಿಪ್ಟೋಗ್ರಾಫಿಕ್ ರೀತಿಯಲ್ಲಿ ದೃಢೀಕರಿಸುವುದಿಲ್ಲ. ಆ ಪರಿಶೀಲನೆ
ಜಾರಿಗೆ ಬರುವವರೆಗೆ source ಅನ್ನು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಸುಳಿವಾಗಿ ಪರಿಗಣಿಸಿ; ಅದರ ಮೇಲೆ
ಅಧಿಕಾರ ನೀಡುವ ನಿರ್ಧಾರಗಳನ್ನು ನಿರ್ಮಿಸಬೇಡಿ.
ಸುಧಾರಿತ ಕರೆಗಾರನು ಅದೇ ವೀಡಿಯೊಗಾಗಿ ಈಗಾಗಲೇ ಅಧಿಕೃತಗೊಳಿಸಲಾದ audioTranscript ಟ್ರ್ಯಾಕ್ ಅನ್ನು
ಒದಗಿಸಬಹುದು. ಫ್ಯೂಷನ್ ಸೀಮ್ ದೃಶ್ಯ ಮತ್ತು ಆಡಿಯೊ ಅವಲೋಕನಗಳನ್ನು ಒಂದೇ ಗಡುವು ಮತ್ತು
ಸ್ಥಗಿತ ಸಂಕೇತದ ಅಡಿಯಲ್ಲಿ ಚಲಾಯಿಸುತ್ತದೆ, ಅವುಗಳನ್ನು ಸಾಮಾನ್ಯ ಕಾಲರೇಖೆಯಲ್ಲಿ ಕ್ರಮಗೊಳಿಸುತ್ತದೆ,
ನಿಖರ ನಕಲುಗಳನ್ನು ಒಗ್ಗೂಡಿಸುತ್ತದೆ ಮತ್ತು ಕೇವಲ ಒಂದು ಬದಿ ಯಶಸ್ವಿಯಾದಾಗ ಭಾಗಶಃ ಫಲಿತಾಂಶವನ್ನು
ವರದಿ ಮಾಡುತ್ತದೆ. ಅಮಾನ್ಯ audioTranscript ಆ ಭಾಗಶಃ ಫಲಿತಾಂಶಕ್ಕೆ ಇಳಿಯುತ್ತದೆ — ದೃಶ್ಯ
ವಿವರಣೆಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲಾಗುತ್ತದೆ ಮತ್ತು ಆಡಿಯೊ ಶಾಖೆಯು ಶುದ್ಧೀಕರಿಸಿದ ವೈಫಲ್ಯ ಕೋಡ್ ಅನ್ನು ದಾಖಲಿಸುತ್ತದೆ —
ಇಡೀ ವೀಡಿಯೊವನ್ನು ವಿಫಲಗೊಳಿಸುವ ಬದಲು. ಪ್ರತಿ-ಶಾಖೆಯ ಲಭ್ಯತೆ, ಭಾಗಶಃ ಫ್ಲ್ಯಾಗ್,
ಮತ್ತು ಶುದ್ಧೀಕರಿಸಿದ ವೈಫಲ್ಯ ಕೋಡ್ಗಳನ್ನು ವಿವರಿಸಲಾದ ಫಲಿತಾಂಶದಲ್ಲಿ, ಗಾರ್ಡ್ರೇಲ್
ಮೆಟಾಡೇಟಾದಲ್ಲಿ (audioFusionRuns/audioFusionPartials/
audioFusionFailureCodes), ಫಲಿತಾಂಶ-ಕ್ಯಾಶ್ ಮೆಟಾಡೇಟಾದಲ್ಲಿ ಮತ್ತು ಬ್ರಿಡ್ಜ್
ಫ್ಯೂಷನ್ ಕೌಂಟರ್ಗಳಲ್ಲಿ ಉಳಿಸಲಾಗುತ್ತದೆ. ಡೀಫಾಲ್ಟ್ Video Bridge ಮಾರ್ಗವು ಸ್ಪೀಚ್-ಟು-ಟೆಕ್ಸ್ಟ್ ಅನ್ನು
ಆಹ್ವಾನಿಸುವುದಿಲ್ಲ ಅಥವಾ ಎರಡನೇ ಮಾಧ್ಯಮ ಪ್ರತಿಯನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡುವುದಿಲ್ಲ; ಆ ಸ್ಪಷ್ಟ ಟ್ರ್ಯಾಕ್ ಇಲ್ಲದಿದ್ದರೆ,
ಅದು ವೀಡಿಯೊಗೆ ಮಾತ್ರ ಸೀಮಿತವಾಗಿರುತ್ತದೆ.
ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಟ್ ಉಳಿಕೆ (#12150 P1). Video Bridge (ಸ್ವತಃ ಆಯ್ಕೆಯ ಮೂಲಕ ಸಕ್ರಿಯಗೊಳಿಸಬೇಕಾದದ್ದು)
ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಟ್ ಕ್ಯೂ ಅನ್ನು ರೆಂಡರ್ ಮಾಡಿದಾಗಲೆಲ್ಲ ಇದು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅನ್ವಯಿಸುತ್ತದೆ — ಪ್ರತ್ಯೇಕ
ಉಳಿಕೆ ಫ್ಲ್ಯಾಗ್ ಇಲ್ಲ. ವಿನಂತಿಯೊಂದು ಯಾವುದೇ ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಟ್ ಕ್ಯೂ ಅನ್ನು (ಕರೆಗಾರ ಘೋಷಿಸಿದ
transcript ಅಥವಾ ಫ್ಯೂಸ್ ಮಾಡಲಾದ audioTranscript) ರೆಂಡರ್ ಮಾಡಿದಾಗ, ಗಾರ್ಡ್ರೇಲ್ ಅದನ್ನು
videoBridgeObserved ಎಂದು ಗುರುತಿಸಿ ವೀಡಿಯೊ ವಿವರಣೆಯ ರೆಡ್ಯಾಕ್ಟ್ ಮಾಡಿದ ನೆರಳು ಪ್ರತಿಯನ್ನು ರಚಿಸುತ್ತದೆ —
ಒಂದೇ ರೀತಿಯ ರೆಂಡರಿಂಗ್ನಲ್ಲಿ ಪ್ರತಿ ಕ್ಯೂನ ಮುಕ್ತ-ಪಠ್ಯ ದೇಹವನ್ನು
[redacted-video-transcript] ನಿಂದ ಬದಲಿಸಲಾಗುತ್ತದೆ; ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಸಂಯೋಜಿಸುವ ಮೊದಲು
ರಚನಾತ್ಮಕ ಕ್ಯೂ ಕ್ಷೇತ್ರವನ್ನು ಪ್ರತಿಸ್ಥಾಪಿಸುವ ಮೂಲಕ ಇದನ್ನು ನಿರ್ಮಿಸಲಾಗುತ್ತದೆ (ಸಮತಟ್ಟುಗೊಳಿಸಿದ ಪಠ್ಯವನ್ನು
ಪಾರ್ಸ್ ಮಾಡುವ ಮೂಲಕ ಎಂದಿಗೂ ಅಲ್ಲ; ಆದ್ದರಿಂದ ಪ್ರತಿಕೂಲವಾಗಿರಲಿ ಅಥವಾ ಸಾಮಾನ್ಯವಾಗಿರಲಿ, ] ಅನ್ನು ಹೊಂದಿರುವ
[inaudible]/[music] ಮುಂತಾದ ದೇಹಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ಯಾವುದೇ ಕ್ಯೂ ವಿಷಯವೂ ಉಳಿಯಲು ಸಾಧ್ಯವಿಲ್ಲ).
ಉಳಿಸಲಾದ ಕಾಲ್-ಲಾಗ್ ವಿನಂತಿ ದೇಹವು ವಿಷಯದ ಸಮಾನತೆಯ ಆಧಾರದ ಮೇಲೆ ಹೊಂದಾಣಿಕೆ ಮಾಡಿ,
ವೀಡಿಯೊದಿಂದ ಪಡೆದ ಪ್ರತಿಯೊಂದು ಪಠ್ಯ ಭಾಗವನ್ನು ಆ ರೆಡ್ಯಾಕ್ಟ್ ಮಾಡಿದ ನೆರಳು ಪ್ರತಿಯಿಂದ ಬದಲಿಸುತ್ತದೆ;
fullText ಆಂಕರ್ ಅನ್ನು ಪೂರ್ಣಗೊಂಡ ಪೂರ್ವ-ಕರೆ ಗಾರ್ಡ್ರೇಲ್ ಪೇಲೋಡ್ನಿಂದ ಪುನಃ ಓದಲಾಗುತ್ತದೆ,
ಆದ್ದರಿಂದ ನಂತರದ ಚೈನ್ ಗಾರ್ಡ್ರೇಲ್ಗಳು (PII ಮತ್ತು ಕ್ರೆಡೆನ್ಶಿಯಲ್ ಮಾಸ್ಕರ್ಗಳು, ಆದ್ಯತೆಗಳು 10/95)
ವಿವರಣಾ ಪಠ್ಯವನ್ನು ಅಲ್ಲಿಯೇ ಮರುಬರೆದ ನಂತರವೂ ಹಾಗೂ ಸಿಸ್ಟಮ್-ಪ್ರಾಂಪ್ಟ್/ಹ್ಯಾಂಡ್ಆಫ್/ಮೆಮೊರಿ
ಇಂಜೆಕ್ಷನ್ ಸಂದೇಶ ಅರೆಯನ್ನು ಮರುರೂಪಿಸಿದ ನಂತರವೂ ಹೊಂದಾಣಿಕೆ ಯಶಸ್ವಿಯಾಗುತ್ತದೆ. ಮಾದರಿಗೆ ಅಪ್ಸ್ಟ್ರೀಮ್
ಕಳುಹಿಸಲಾದ ದೇಹವು ಬದಲಾಗುವುದಿಲ್ಲ. ಗಮನಿಸಲಾದ ವಿನಂತಿಯು ಯಾವುದೇ ಶಾಶ್ವತ Memory ಅನ್ನು ಸಹ ತುಂಬುವುದಿಲ್ಲ
(ವಿನಂತಿ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆಯಿಂದ ಪಡೆದ ಎರಡೂ ಹೊರತೆಗೆಯುವಿಕೆಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತದೆ),
ಆದ್ದರಿಂದ ಮಾದರಿಯ ಸ್ವಂತ ಪ್ರತಿಕ್ರಿಯೆಯು ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಟ್ ಪಠ್ಯವನ್ನು Memory ಗೆ ಪ್ರತಿಧ್ವನಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.
ಉಳಿಕೆ ಮೇಲ್ಮೈಗಳು ಇನ್ನೂ ತೆರೆದಿದ್ದು, ಮುಂದಿನ ಅನುಸರಣೆಗೆ ದಾಖಲಿಸಲಾಗಿದೆ (P2, #12430): ವಿವರವಾದ-ಲಾಗ್
ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ನಲ್ಲಿನ ಕಚ್ಚಾ ಪೂರ್ವ-ಗಾರ್ಡ್ರೇಲ್ ಕ್ಲೈಂಟ್-ವಿನಂತಿ ಸ್ನ್ಯಾಪ್ಶಾಟ್;
previous_response_id ಮುಂದುವರಿಕೆಯಲ್ಲಿ ಫೇಲ್-ಕ್ಲೋಸ್ಡ್ ವರ್ತನೆ; ಸಂಶ್ಲೇಷಿತ ಸ್ಟ್ರಿಂಗ್ ಪ್ರಾಂಪ್ಟ್ನೊಳಗೆ
ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಅಳವಡಿಸುವ ವ್ಯುತ್ಪನ್ನ-ಪ್ರಾಂಪ್ಟ್ ಆಂತರಿಕ ಡಿಸ್ಪ್ಯಾಚ್ಗಳು
(ಪೈಪ್ಲೈನ್ ಹಂತಗಳು, ಕಾಂಟೆಕ್ಸ್ಟ್-ಹ್ಯಾಂಡ್ಆಫ್); ಮತ್ತು ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಉಲ್ಲೇಖಿಸುವ ಮಾದರಿ
ಪ್ರತಿಕ್ರಿಯೆಯ ಪ್ರತಿಕ್ರಿಯಾ ದೇಹ / ಸೀಮ್ಯಾಂಟಿಕ್-ಕ್ಯಾಶ್ ಪ್ರತಿ. ಇವು P1 ನ ಉಳಿಸಲಾದ-ವಿನಂತಿ-ದೇಹ +
Memory ವ್ಯಾಪ್ತಿಯ ಹೊರಗಿನ ಕಚ್ಚಾ/ಪ್ರತಿಕ್ರಿಯಾ-ವರ್ಗದ ಅಥವಾ ಆಯ್ಕೆಯ ಮೂಲಕ ಸಕ್ರಿಯಗೊಳಿಸಬೇಕಾದ ಮೇಲ್ಮೈಗಳಾಗಿವೆ.
ಆಂತರಿಕ /api/modality-bridge/video/drilldown ಜೀವನಚಕ್ರವು ಪ್ರತ್ಯೇಕವಾದ,
ಲೂಪ್ಬ್ಯಾಕ್/ಟೋಕನ್-ದೃಢೀಕೃತ ಕ್ಯಾಶ್ ಆಧಾರವಾಗಿದೆ. ಪ್ರತಿಯೊಂದು ಕಾರ್ಯಾಚರಣೆಯೂ
ಕ್ಯಾನಾನಿಕಲ್ ಅಪಾರದರ್ಶಕ ಪ್ರಿನ್ಸಿಪಲ್ ID ಅನ್ನು ಸಹ ಅಗತ್ಯಪಡಿಸುತ್ತದೆ. ಉತ್ಪಾದನಾ ಕರೆಗಾರನನ್ನು
ಸಕ್ರಿಯಗೊಳಿಸುವ ಮೊದಲು, ಅದು ದೃಢೀಕೃತ ಟೆನಂಟ್ನಿಂದ ಆ ID ಅನ್ನು ಪಡೆಯಬೇಕು ಮತ್ತು
ಕ್ಲೈಂಟ್ ಆಯ್ಕೆಮಾಡಿದ ಮೌಲ್ಯವನ್ನು ಎಂದಿಗೂ ಫಾರ್ವರ್ಡ್ ಮಾಡಬಾರದು. ಕ್ಯಾಶ್ ಕೀಗಳು ಆ ಪ್ರಿನ್ಸಿಪಲ್ ಅನ್ನು
ಕ್ಯಾನಾನಿಕಲ್ ಸೆಷನ್ ಮತ್ತು ವೀಡಿಯೊ-ಉಲ್ಲೇಖ ID ಗಳಿಗೆ ಬಂಧಿಸುತ್ತವೆ, ಅವುಗಳ SHA-256-ವ್ಯುತ್ಪನ್ನ
ಕೀಗಳನ್ನು ಮಾತ್ರ ಸಂಗ್ರಹಿಸುತ್ತವೆ ಮತ್ತು ಓದುವಿಕೆ ಹಾಗೂ ಅಳಿಸುವಿಕೆ ಎರಡನ್ನೂ ಅದೇ ಪ್ರಿನ್ಸಿಪಲ್ಗೆ
ವ್ಯಾಪ್ತಿಗೊಳಿಸುತ್ತವೆ. ಕ್ಯಾಶ್ ಪ್ರತಿ ನಮೂದಿಗೆ ಗರಿಷ್ಠ 16 ವ್ಯುತ್ಪನ್ನ JPEG ಫ್ರೇಮ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ,
ಹತ್ತು ನಿಮಿಷಗಳ ನಂತರ ಅವುಗಳನ್ನು ಅವಧಿ ಮುಗಿಸುತ್ತದೆ ಮತ್ತು ಮಿತಿಗೊಳಿಸಿದ start/end ಓದುವಿಕೆಗಳು
ಅಥವಾ ಸ್ಪಷ್ಟ ಸೆಷನ್ ಅಳಿಸುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ.
ಪ್ರತಿ ಪ್ರಿನ್ಸಿಪಲ್ ಅನ್ನು 16 ನಮೂದುಗಳು ಮತ್ತು 64 MiB ಕ್ಯಾನಾನಿಕಲ್ JPEG ಡೇಟಾಕ್ಕೆ ಮಿತಿಗೊಳಿಸಲಾಗಿದೆ. ಆ ಮಿತಿಗಳು ಜಾಗತಿಕ 64-ನಮೂದು/256 MiB ಗರಿಷ್ಠ ಮಿತಿಯಿಂದ ಸ್ವತಂತ್ರವಾಗಿವೆ: ಜಾಗತಿಕ LRU ಹೊರಹಾಕುವಿಕೆಯನ್ನು ಪರಿಗಣಿಸುವ ಮೊದಲು, ಪ್ರಿನ್ಸಿಪಲ್ ಕೋಟಾ ಒತ್ತಡವು ಆ ಪ್ರಿನ್ಸಿಪಲ್ನ ಇತ್ತೀಚೆಗೆ ಅತ್ಯಲ್ಪವಾಗಿ ಬಳಸಲಾದ ನಮೂದುಗಳನ್ನು ಮಾತ್ರ ಹೊರಹಾಕುತ್ತದೆ. ಕ್ಯಾಶ್ ಚಟುವಟಿಕೆಯ ಸಮಯದಲ್ಲಿ ಅವಧಿ ಮುಗಿದ ನಮೂದುಗಳನ್ನು ಪ್ರಿನ್ಸಿಪಲ್ ಮತ್ತು ಜಾಗತಿಕ ಲೆಕ್ಕಾಚಾರ ಎರಡರಿಂದಲೂ ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ; ಆದರೆ ರದ್ದತಿ ಮತ್ತು ಮೌಲ್ಯಮಾಪನ ವೈಫಲ್ಯವು ಭಾಗಶಃ ಬದಲಿಯನ್ನು ಕಮಿಟ್ ಮಾಡುವುದಿಲ್ಲ.
ಕ್ಯಾಶ್ ಕ್ಯಾನಾನಿಕಲ್ ಅಲ್ಲದ Base64, ಅತಿಯಾದ ಪ್ಯಾಡಿಂಗ್, JPEG ಅಲ್ಲದ ಮಾಧ್ಯಮ, ದೋಷಪೂರಿತ ಅಥವಾ
ಅಪೂರ್ಣ JPEG ಗಳು ಮತ್ತು ಮಿತಿಗೊಳಿಸಿದ ಪೂರ್ಣ-ಚಿತ್ರ sharp ಡಿಕೋಡ್ ವೇಳೆ ಎಚ್ಚರಿಕೆಯನ್ನು ಉಂಟುಮಾಡುವ
JPEG ಗಳನ್ನು ತಿರಸ್ಕರಿಸುತ್ತದೆ. ಅದು ಸ್ವೀಕರಿಸಿದ ಪ್ರತಿಯೊಂದು ಚಿತ್ರವನ್ನು ಕ್ಯಾನಾನಿಕಲ್ JPEG ಆಗಿ
ಮರು-ಎನ್ಕೋಡ್ ಮಾಡುತ್ತದೆ, ಕರೆಗಾರನ ಕ್ಷೇತ್ರಗಳನ್ನು ನಂಬುವ ಬದಲು ಡಿಕೋಡ್ ಮಾಡಿದ ಬೈಟ್ಗಳಿಂದ ಅಗಲ ಮತ್ತು ಎತ್ತರವನ್ನು
ಪಡೆಯುತ್ತದೆ ಮತ್ತು ಕೊನೆಯಲ್ಲಿ ಸೇರಿಸಲಾದ ಯಾವುದೇ ಪಾಲಿಗ್ಲಾಟ್ ಬೈಟ್ಗಳನ್ನು ಉಳಿಸಿಕೊಳ್ಳದೆ ತ್ಯಜಿಸುತ್ತದೆ.
ಮಿತಿಗೊಳಿಸಿದ ಕ್ಯಾನಾನಿಕಲ್ ಸಂಕುಚಿತ ಬಫರ್ ಅನ್ನು ಮಾತ್ರ ಎರಡೂ ಕೋಟಾಗಳಿಗೆ ಲೆಕ್ಕಿಸಲಾಗುತ್ತದೆ. JSON ವೈರ್ ಮಿತಿಯು
32 MiB ಡಿಕೋಡ್ ಮಾಡಿದ-ಇನ್ಪುಟ್ ಗರಿಷ್ಠ ಮಿತಿಗಾಗಿ Base64 ಓವರ್ಹೆಡ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ಪ್ರತಿಯೊಂದು
ಸಂಗ್ರಹಿಸಲಾದ ವ್ಯುತ್ಪತ್ತಿಯು ಅದರ ಮೌಲ್ಯೀಕರಿಸಿದ JPEG ಸ್ವರೂಪ/ರೆಸಲ್ಯೂಷನ್, ಸ್ಯಾಂಪ್ಲಿಂಗ್ ನೀತಿ,
ವ್ಯುತ್ಪತ್ತಿ ಆವೃತ್ತಿ, ರಚನೆಯ ಸಮಯ, ಸರ್ವರ್-ಲೆಕ್ಕಿಸಿದ ವಿಷಯ ಹ್ಯಾಶ್ ಮತ್ತು ಹ್ಯಾಶ್ ಮಾಡಿದ ಪೋಷಕ
ಉಲ್ಲೇಖದ ಜೊತೆಗೆ ವಿಶ್ವಾಸಾರ್ಹ ಕರೆಗಾರನ ಪೋಷಕ-ವಿಷಯ ಹ್ಯಾಶ್ ಅನ್ನು ದಾಖಲಿಸುತ್ತದೆ. ಅಣುಸ್ವರೂಪದ ಕ್ಯಾಶ್
ಕಮಿಟ್ಗೆ ಮೊದಲು ಅಸಿಂಕ್ರೋನಸ್ ಡಿಕೋಡ್/ಹ್ಯಾಶ್ ಹಂತಗಳ ನಡುವೆ ರದ್ದತಿಯನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತದೆ.
ಈ ಹಂತವು ಇನ್ನೂ ಉತ್ಪಾದನಾ ಪ್ರೊಡ್ಯೂಸರ್ ಅನ್ನು ಮಾರ್ಗಕ್ಕೆ ಸಂಪರ್ಕಿಸುವುದಿಲ್ಲ ಮತ್ತು ಬಹು-ರೆಸಲ್ಯೂಷನ್ ರೂಪಾಂತರ ಆಯ್ಕೆಯನ್ನು ಒದಗಿಸುವುದಿಲ್ಲ. ಆದ್ದರಿಂದ ಪಾರದರ್ಶಕ Video Bridge ವಿನಂತಿ ಮಾರ್ಗವು ಯಾವುದೇ ಹೆಚ್ಚುವರಿ ಕೆಲಸವನ್ನು ಉಂಟುಮಾಡುವುದಿಲ್ಲ; ಟೆನಂಟ್ಗೆ ಬದ್ಧವಾದ ಪ್ರಿನ್ಸಿಪಲ್ ವ್ಯುತ್ಪತ್ತಿ ಮತ್ತು ಸಂಪೂರ್ಣ FU-08 ಬಹು-ರೆಸಲ್ಯೂಷನ್ ಜೀವನಚಕ್ರವು ಪೂರ್ಣಗೊಂಡ ವರ್ತನೆ ಎಂದು ದಾಖಲಿಸುವ ಬದಲು ಸ್ಪಷ್ಟ ಅನುಸರಣೆ ಕೆಲಸವಾಗಿಯೇ ಉಳಿಯುತ್ತವೆ.
ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾದ Video ಮಾದರಿಯನ್ನು ಬಳಸಿ ಫ್ರೇಮ್ಗಳಿಗೆ ಅನುಕ್ರಮವಾಗಿ ಶೀರ್ಷಿಕೆ ನೀಡಲಾಗುತ್ತದೆ. ಖಾಲಿ
Video override, Vision ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಅನುವಂಶಿಕವಾಗಿ ಪಡೆಯುತ್ತದೆ; ಎರಡೂ ಖಾಲಿಯಾಗಿದ್ದರೆ, Vision
auto-router ಪರಿಣಾಮಕಾರಿ vision-ಸಾಮರ್ಥ್ಯದ ಮಾದರಿಯನ್ನು ಆಯ್ಕೆಮಾಡುತ್ತದೆ. ಯಶಸ್ವಿ ಶೀರ್ಷಿಕೆಗಳು
ಮೂಲ ಭಾಗವನ್ನು ಸ್ಥಿರವಾದ [Video description: ಪೂರ್ವಪ್ರತ್ಯಯದಿಂದ ಬದಲಿಸುತ್ತವೆ; ಇದು
ಪಠ್ಯವನ್ನು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಮಾಧ್ಯಮ-ಜನ್ಯ ವೀಕ್ಷಣೆ ಎಂದು ಗುರುತಿಸುವುದರ ಜೊತೆಗೆ, ಮಾಧ್ಯಮದಲ್ಲಿ ಕಂಡುಬರುವ
ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಬಾರದೆಂದು ಕೆಳಹಂತದ ಮಾದರಿಗಳಿಗೆ ತಿಳಿಸುತ್ತದೆ. ಫ್ರೇಮ್-ಶೀರ್ಷಿಕೆ ಕ್ಯಾಶ್ ಕೀಲಿಗಳು
JPEG ಬೈಟ್ಗಳು, ಪ್ರಾಂಪ್ಟ್, ಸಮಯಮುದ್ರೆ ಮತ್ತು ಪರಿಣಾಮಕಾರಿ ಮಾದರಿಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ; ಯಶಸ್ವಿ
ಶೀರ್ಷಿಕೆಗಳನ್ನು ಮಾತ್ರ ಕ್ಯಾಶ್ ಮಾಡಲಾಗುತ್ತದೆ. ಕ್ಯಾಶ್ ನಮೂದುಗಳು fallback ಮಾದರಿಯನ್ನೂ ಒಳಗೊಂಡಂತೆ,
ವಾಸ್ತವವಾಗಿ ಯಶಸ್ವಿಯಾದ producer ಮಾದರಿಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತವೆ; ಬೇರೆ ಬೇರೆ ಫ್ರೇಮ್ಗಳನ್ನು ಬೇರೆ ಬೇರೆ
ಮಾದರಿಗಳು ರಚಿಸಿದಾಗ bridge mixed ಎಂದು ವರದಿ ಮಾಡುತ್ತದೆ. ಕ್ಯಾಶ್ hit, ಆ producer ಗುರುತನ್ನು
ವಿನಂತಿಸಿದ routing ಯೋಜನೆಯಾಗಿ ಮರುಲೇಬಲ್ ಮಾಡುವ ಬದಲು ಅದನ್ನೇ ಮರುಬಳಕೆ ಮಾಡುತ್ತದೆ. ಸಂಪೂರ್ಣ-video ಫಲಿತಾಂಶ
ಕ್ಯಾಶ್, ಔಟ್ಪುಟ್ ಅನ್ನು ಬದಲಾಯಿಸುವ ಪ್ರತಿಯೊಂದು ಇನ್ಪುಟ್ನ ಆಧಾರದ ಮೇಲೆ ಕೀಲಿಕರಣಗೊಳ್ಳುತ್ತದೆ — ಪ್ರಾಂಪ್ಟ್, ಪರಿಣಾಮಕಾರಿ
ಮಾದರಿ, sampling policy, ಫ್ರೇಮ್ ಎಣಿಕೆ, semantic analysis mode, ಸಾಮಾನ್ಯೀಕರಿಸಿದ focus hintನ SHA-256
ಫಿಂಗರ್ಪ್ರಿಂಟ್, focus window, transcript,
audioTranscript, ಮತ್ತು contact-sheet flag — ಆದ್ದರಿಂದ ಈ ಆಯಾಮಗಳಲ್ಲಿ ಯಾವುದನ್ನಾದರೂ
ಬದಲಾಯಿಸುವುದು cache miss ಆಗುತ್ತದೆ, ಹಳೆಯ ಫಲಿತಾಂಶದ ಮರುಬಳಕೆಯಾಗುವುದಿಲ್ಲ. ದೃಶ್ಯ dedup policy
ಆವೃತ್ತಿ, threshold ಮತ್ತು ಮಿತಿಗೊಳಿಸಲಾದ candidate-frame ಎಣಿಕೆ ಕೂಡ
result-cache ಕೀಲಿ ಮತ್ತು metadataಯಲ್ಲಿ ಸ್ಪಷ್ಟವಾಗಿ ಸೇರಿರುತ್ತವೆ; ಆದ್ದರಿಂದ policy ಬದಲಾವಣೆಯು ಹಳೆಯ
ಸಂಪೂರ್ಣ-video ವಿವರಣೆಯನ್ನು ಮರುಬಳಕೆ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. Result-cache v4 metadata mode ಮತ್ತು
ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಉಳಿಸುತ್ತದೆ, ಆದರೆ raw user task ಅನ್ನು ಎಂದಿಗೂ ಉಳಿಸುವುದಿಲ್ಲ. Guardrail metadata ವಿನಂತಿಸಿದ
ಮತ್ತು ಪರಿಣಾಮಕಾರಿ analysis modeಗಳೆರಡನ್ನೂ ವರದಿ ಮಾಡುತ್ತದೆ; ಬಳಸಬಹುದಾದ user text ಇಲ್ಲದೆ ವಿನಂತಿಸಲಾದ
focused mode ಅನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ full ಎಂದು ವರದಿ ಮಾಡಲಾಗುತ್ತದೆ.
Guardrail ಬೆಂಬಲಿತ ಪ್ರತಿಯೊಂದು video ಭಾಗವನ್ನು ಹೊರತೆಗೆಯುತ್ತದೆ, ಆದರೆ
modalityBridgeVideoMaxVideos ಗಿಂತ ಹೆಚ್ಚಿನದನ್ನು ವಿವರಿಸುವುದಿಲ್ಲ. ಗುರಿಯೊಂದು
supportsVideo === false ಹೊಂದಿದೆ ಎಂದು ಸಾಬೀತಾದರೆ, ವಿಫಲವಾದ ಮತ್ತು ಮಿತಿ ಮೀರಿದ videoಗಳು
ಸ್ಪಷ್ಟವಾದ ಸುರಕ್ಷಿತ ಪಠ್ಯ ಗುರುತುಗಳಾಗಿ ಪರಿವರ್ತನೆಯಾಗುತ್ತವೆ, ಇದರಿಂದ ಯಾವುದೇ raw video ಉಳಿಯುವುದಿಲ್ಲ.
ಸಾಮರ್ಥ್ಯ ತಿಳಿದಿಲ್ಲದಿದ್ದಾಗ, ಆ ಭಾಗಗಳು ಬದಲಾಗದೆ ಉಳಿಯುತ್ತವೆ.
supportsVideo === true ಹೊಂದಿರುವ ಗುರಿಗಳು bridge ಅನ್ನು ಬೈಪಾಸ್ ಮಾಡುತ್ತವೆ.
ಕ್ಲೈಂಟ್ ವಿನಂತಿಯ abort signal, download, broker queue,
subprocessಗಳು ಮತ್ತು caption callಗಳ ಮೂಲಕ ಪ್ರಸಾರವಾಗುತ್ತದೆ; abortಗಳು videoಗಳ ನಡುವೆ ಪ್ರಕ್ರಿಯೆಯನ್ನು ನಿಲ್ಲಿಸುತ್ತವೆ ಮತ್ತು
raw mediaಗೆ fail open ಆಗುವುದಿಲ್ಲ.
Runtime ಸೆಟ್ಟಿಂಗ್ಗಳು DB-backed ಆಗಿದ್ದು Zod ಮೂಲಕ ಮೌಲ್ಯೀಕರಿಸಲ್ಪಡುತ್ತವೆ:
| ಕೀಲಿ | ಡೀಫಾಲ್ಟ್ | ವ್ಯಾಪ್ತಿ / ವರ್ತನೆ |
|---|---|---|
modalityBridgeVideoEnabled |
false |
ಐಚ್ಛಿಕ runtime, opt-in |
modalityBridgeVideoAnalysisMode |
"full" |
full ಸಾಮಾನ್ಯ captions ಅನ್ನು ಉಳಿಸುತ್ತದೆ; focused ಮಿತಿಗೊಳಿಸಲಾದ, ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಇತ್ತೀಚಿನ-user context ಅನ್ನು ಬಳಸುತ್ತದೆ |
modalityBridgeVideoModel |
"" |
Vision Bridge ಮಾದರಿಯನ್ನು ಅನುವಂಶಿಕವಾಗಿ ಪಡೆಯುತ್ತದೆ |
modalityBridgeVideoFrameCount |
8 |
1–16 |
modalityBridgeVideoSamplingPolicy |
"uniform" |
uniform, scene_aware, ಅಥವಾ ಅನುಪಾತೀಯ segment_aware; detector ವೈಫಲ್ಯವಾದರೆ uniformಗೆ fallback ಆಗುತ್ತದೆ |
modalityBridgeVideoMaxVideos |
1 |
1–4 |
modalityBridgeVideoTimeout |
120000 |
1000–120000 ms |
120 ಸೆಕೆಂಡ್ಗಿಂತ ಹೆಚ್ಚಿನ ಹಳೆಯ persisted Video timeout ಮೌಲ್ಯಗಳನ್ನು
broker deadlineಗೆ clamp ಮಾಡಲಾಗುತ್ತದೆ; ಆ ಮಿತಿಗಿಂತ ಹೆಚ್ಚಿನ ಹೊಸ settings writeಗಳನ್ನು ತಿರಸ್ಕರಿಸಲಾಗುತ್ತದೆ.
GET /api/modality-bridge/video/runtime, authentication ಅಥವಾ runtime probingಗೆ ಮೊದಲು
ವಿಶ್ವಾಸಾರ್ಹ stamped loopback localityಯನ್ನು ಕಡ್ಡಾಯಗೊಳಿಸುತ್ತದೆ, ನಂತರ management
auth ಅನ್ನು ಕಡ್ಡಾಯಗೊಳಿಸುತ್ತದೆ. Runtime ಲಭ್ಯವಿಲ್ಲದಿದ್ದಾಗ ಇದು available, ಸ್ವಚ್ಛಗೊಳಿಸಲಾದ FFmpeg/ffprobe
ಆವೃತ್ತಿಗಳು ಮತ್ತು ಸ್ಥಿರ reason ಅನ್ನು ಮಾತ್ರ ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಆಂತರಿಕ extraction endpoint
ಸಾರ್ವಜನಿಕ upload API ಅಲ್ಲ: queue saturation ಆದಾಗ 503 ಜೊತೆಗೆ Retry-After ಹಿಂತಿರುಗುತ್ತದೆ, caller
disconnect ಆದಾಗ 499 ಹಿಂತಿರುಗುತ್ತದೆ ಮತ್ತು ಸ್ಥಿರ broker deadline ಆದಾಗ 504 ಹಿಂತಿರುಗುತ್ತದೆ. ಪರಿವರ್ತಿಸಲಾದ responseಗಳು
Vision ಅಥವಾ Audio segmentಗಳನ್ನು ತೆಗೆದುಹಾಕದೆ, ಕೇಂದ್ರ
x-omniroute-modality-bridge headerಗೆ
video->text;model=<visionModel>;parts=<videos> ಅನ್ನು ಸೇರಿಸುತ್ತವೆ.
PII Masker (piiMasker.ts)
ಎರಡೂ ಹಂತಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
preCallpayload ಅನ್ನು clone ಮಾಡುತ್ತದೆ,system,messages,input, ಮತ್ತುprompt(ಸರಳ string itemಗಳನ್ನೂ ಒಳಗೊಂಡಂತೆ) ಮೂಲಕ ಸಂಚರಿಸುತ್ತದೆ ಮತ್ತು stringcontent/textfieldಗಳಿಗೆ (@/shared/utils/inputSanitizerನಿಂದ)processPII()ಅನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ.PII_REDACTION_ENABLED=trueಆಗಿರುವಾಗ, ಪತ್ತೆಯಾದ PII ಅನ್ನು outbound payloadನಲ್ಲಿ redact ಮಾಡಲಾಗುತ್ತದೆ. ಇದುINPUT_SANITIZER_MODEನಿಂದ ಸ್ವತಂತ್ರವಾಗಿದೆ (ಅದು prompt-injection policyಯನ್ನು ಮಾತ್ರ ನಿಯಂತ್ರಿಸುತ್ತದೆ). Redaction ಆಫ್ ಆಗಿರುವಾಗ, content ಅನ್ನು ಮರುಬರೆಯದೆ call detection ಎಣಿಕೆಗಳನ್ನು ದಾಖಲಿಸುತ್ತದೆ.postCallresponse ಅನ್ನು deep-clone ಮಾಡುತ್ತದೆ ಮತ್ತುsanitizePIIResponse()ಜೊತೆಗೆ Responses-API-shape masker ಅನ್ನು (maskResponsesOutput— ಇದುoutput_textಮತ್ತುoutput[].content[].textಅನ್ನು ಒಳಗೊಳ್ಳುತ್ತದೆ) ಚಲಾಯಿಸುತ್ತದೆ. ಯಾವುದೇ redaction ಸಂಭವಿಸಿದರೆ, ಮಾರ್ಪಡಿಸಿದ response ಮೂಲ response ಅನ್ನು ಬದಲಿಸುತ್ತದೆ.
Guardrail ಎಂದಿಗೂ block ಮಾಡುವುದಿಲ್ಲ; ಅದು ಕೇವಲ annotation (meta.detections,
meta.redacted) ಸೇರಿಸುತ್ತದೆ ಅಥವಾ ಮರುಬರೆಯುತ್ತದೆ.
Prompt Injection (promptInjection.ts)
ಬಳಕೆದಾರರು ಒದಗಿಸಿದ contentನಲ್ಲಿನ ಪ್ರತಿಕೂಲ ರಚನೆಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಿ, ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾದ policyಯನ್ನು ಜಾರಿಗೊಳಿಸುತ್ತದೆ. ವರ್ತನೆಯನ್ನು environment variableಗಳು ಮತ್ತು constructor optionಗಳು ನಿಯಂತ್ರಿಸುತ್ತವೆ:
| ಸೆಟ್ಟಿಂಗ್ | ಪರಿಸರ ಚರ | ಡೀಫಾಲ್ಟ್ | ಪರಿಣಾಮ |
|---|---|---|---|
| ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ | INPUT_SANITIZER_ENABLED |
true |
false ಆಗಿರುವಾಗ, ಗಾರ್ಡ್ರೇಲ್ ಶಾರ್ಟ್-ಸರ್ಕ್ಯೂಟ್ ಆಗುತ್ತದೆ. |
| ಮೋಡ್ | INJECTION_GUARD_MODE / INPUT_SANITIZER_MODE |
warn |
ಇಂಜೆಕ್ಷನ್ ನೀತಿ: block, warn, ಅಥವಾ log. (redact ಅನ್ನು ಹಿಂಬದಿ ಹೊಂದಾಣಿಕೆಗಾಗಿ ಸ್ವೀಕರಿಸಲಾಗುತ್ತದೆ, ಆದರೆ ಅದು ಇಂಜೆಕ್ಷನ್ ಪಠ್ಯವನ್ನು ತೆಗೆದುಹಾಕುವುದಿಲ್ಲ; ವಿನಂತಿಯ PII ಮರುಬರೆಯುವಿಕೆಯನ್ನು PII_REDACTION_ENABLED ನಿಯಂತ್ರಿಸುತ್ತದೆ.) |
| ನಿರ್ಬಂಧಿಸುವ ಮಿತಿ | blockThreshold ಆಯ್ಕೆ / INPUT_SANITIZER_BLOCK_THRESHOLD (INJECTION_GUARD_BLOCK_THRESHOLD ಎಂಬ ಪರ್ಯಾಯ ಹೆಸರು) |
high |
ನಿರ್ಬಂಧಿಸಲು ಅಗತ್ಯವಿರುವ ಕನಿಷ್ಠ ತೀವ್ರತೆ. ಡೀಫಾಲ್ಟ್ನಲ್ಲಿ ಮಧ್ಯಮ ತೀವ್ರತೆಯು ವೀಕ್ಷಣೆಗೆ ಮಾತ್ರ ಸೀಮಿತವಾಗಿದೆ. |
ಮೋಡ್ ಆದ್ಯತೆ (getMode): ಕರೆ ಮಾಡುವವರ options.mode →
INJECTION_GUARD_MODE DB ವೈಶಿಷ್ಟ್ಯ-ಫ್ಲ್ಯಾಗ್ ಅತಿಕ್ರಮಣ (ಡ್ಯಾಶ್ಬೋರ್ಡ್ → ಸೆಟ್ಟಿಂಗ್ಗಳು →
ವೈಶಿಷ್ಟ್ಯ ಫ್ಲ್ಯಾಗ್ಗಳು) → INJECTION_GUARD_MODE ಪರಿಸರ ಚರ → INPUT_SANITIZER_MODE ಪರಿಸರ ಚರ →
warn. ಆದ್ದರಿಂದ ಡ್ಯಾಶ್ಬೋರ್ಡ್ ಅತಿಕ್ರಮಣವು ಪರಿಸರ ಚರಗಳಿಗಿಂತ ಆದ್ಯತೆ ಪಡೆಯುತ್ತದೆ, ಹೀಗಾಗಿ ವೈಶಿಷ್ಟ್ಯ
ಫ್ಲ್ಯಾಗ್ಗಳ UI ಚಾಲನೆಯಲ್ಲಿರುವ ಗಾರ್ಡ್ ಅನ್ನು ನೇರವಾಗಿ ನಿಯಂತ್ರಿಸುತ್ತದೆ (ಮರುಪ್ರಾರಂಭ ಅಗತ್ಯವಿಲ್ಲ). DB ಓದುವಿಕೆ ವೈಫಲ್ಯ-ಸುರಕ್ಷಿತವಾಗಿದೆ:
ಅದು ದೋಷಗೊಂಡರೆ, ಗಾರ್ಡ್ ಪರಿಸರ-ಆಧಾರಿತ ವರ್ತನೆಗೆ ಹಿಂತಿರುಗುತ್ತದೆ ಮತ್ತು ಯಾವುದೇ
ಅತಿಕ್ರಮಣ ಹೊಂದಿಸದಿದ್ದಾಗ ವರ್ತನೆಯು ಪರಿಸರ-ಮಾತ್ರದ ನಿರ್ಧಾರಕ್ಕೆ ಸಮಾನವಾಗಿರುತ್ತದೆ.
ಪತ್ತೆ ಮೂಲಗಳು:
@/shared/utils/inputSanitizerನಿಂದsanitizeRequest()(ಪೈಪ್ಲೈನ್ನ ಇತರ ಭಾಗಗಳಲ್ಲಿ ಬಳಸಲಾಗುವ ಹಂಚಿಕೆಯ ಡಿಟೆಕ್ಟರ್ ಸಮೂಹ).- ಅಂತರ್ನಿರ್ಮಿತ
DEFAULT_GUARD_PATTERNS(ಪ್ರಸ್ತುತsystem_override_inlineಮತ್ತುmarkdown_system_block, ಎರಡೂhighತೀವ್ರತೆ). - ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಆಯ್ಕೆಗಳ ಮೂಲಕ ರವಾನಿಸಲಾದ ಐಚ್ಛಿಕ
customPatterns(ಸ್ಟ್ರಿಂಗ್ಗಳು, ರೆಜೆಕ್ಸ್, ಅಥವಾ{ name, pattern, severity }ದಾಖಲೆಗಳು).
mode === "block" ಆಗಿರುವಾಗ ಮತ್ತು ಕನಿಷ್ಠ ಒಂದು ಪತ್ತೆಯು ತೀವ್ರತಾ
ಮಿತಿಯನ್ನು ತಲುಪಿದಾಗ, preCall { block: true, message: "Request rejected: suspicious content detected" } ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. warn/log ಮೋಡ್ಗಳಲ್ಲಿ ಗಾರ್ಡ್ರೇಲ್ ಲಾಗ್ ಮಾಡುತ್ತದೆ, ಆದರೆ
ಕರೆಯನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ರಿಜಿಸ್ಟ್ರಿ ಮೂಲಕ ಹೋಗದೆ ಪ್ರಾಂಪ್ಟ್ಗಳನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಬೇಕಾದ
ಕರೆ ಮಾಡುವವರಿಗಾಗಿ ಹಂಚಿಕೆಯ ಸಹಾಯಕ evaluatePromptInjection() ಅನ್ನೂ ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡಲಾಗಿದೆ.
ಸ್ಕ್ಯಾನ್ ಮಿತಿ (v3.8.20): ಡಿಟೆಕ್ಟರ್ ಸಂಯೋಜಿಸಲಾದ ಪ್ರಾಂಪ್ಟ್ ಪಠ್ಯದ ಮೊದಲ 16 KB ಅನ್ನು
ಮಾತ್ರ ಪರಿಶೀಲಿಸುತ್ತದೆ — src/shared/utils/inputSanitizer.ts ನಲ್ಲಿ
MAX_INJECTION_SCAN_BYTES = 16 * 1024 (16 384 ಬೈಟ್ಗಳು). ಪ್ಯಾಟರ್ನ್ ಲೂಪ್ ಅನ್ನು ಚಲಾಯಿಸುವ ಮೊದಲು
detectInjection() ಮತ್ತು evaluatePromptInjection() ಎರಡೂ
slice(0, MAX_INJECTION_SCAN_BYTES) ಅನ್ನು ಬಳಸುತ್ತವೆ. ಇಂಜೆಕ್ಷನ್ ನಿರ್ದೇಶನಗಳು ಇನ್ಪುಟ್ನ ಮೇಲ್ಭಾಗದ ಸಮೀಪದಲ್ಲಿರುತ್ತವೆ, ಆದ್ದರಿಂದ ಇದು
ಪತ್ತೆ ಸಾಮರ್ಥ್ಯವನ್ನು ದುರ್ಬಲಗೊಳಿಸದೆ ಬಹು-ನೂರು-KB ಪೇಲೋಡ್ಗಳಲ್ಲಿ ರೆಜೆಕ್ಸ್ CPU/GC ಬಳಕೆಯನ್ನು
ಮಿತಿಗೊಳಿಸುತ್ತದೆ (ನೋಡಿ #3932, #4041).
ರುಜುವಾತು ಮರೆಮಾಡುವಿಕೆ (credentialMasker.ts)
ಎರಡೂ ಹಂತಗಳಲ್ಲಿ, ಡೀಫಾಲ್ಟ್ ಸರಪಳಿಯ ಕೊನೆಯಲ್ಲಿ (ಆದ್ಯತೆ 95) ಚಲಿಸುತ್ತದೆ. ಹೊರಹೋಗುವ ಪೇಲೋಡ್ನಿಂದ (ಸಂದೇಶದ
ವಿಷಯ, ಟೂಲ್-ಕಾಲ್ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳು, ಟೂಲ್ ಫಲಿತಾಂಶಗಳು) ಹಾಗೂ ಪೂರೈಕೆದಾರರ ಪ್ರತಿಕ್ರಿಯೆಯಿಂದ
ಚಿರಪರಿಚಿತ API-ಕೀ / ರಹಸ್ಯ-ಟೋಕನ್ ಪ್ಯಾಟರ್ನ್ಗಳನ್ನು ಮರೆಮಾಡುತ್ತದೆ, ಇದರಿಂದ ಪ್ರಾಂಪ್ಟ್ಗೆ ಅಂಟಿಸಲಾದ
ರುಜುವಾತು (ಅಥವಾ ಟೂಲ್ ಫಲಿತಾಂಶದಿಂದ ಮರಳಿ ಪ್ರತಿಧ್ವನಿಸಲಾದದ್ದು) ಅಪ್ಸ್ಟ್ರೀಮ್ ಪೂರೈಕೆದಾರರಿಗೆ ಅಥವಾ
ಕ್ಲೈಂಟ್ಗೆ ಮರಳಿ ಸೋರಿಕೆಯಾಗುವುದಿಲ್ಲ.
- ಆಯ್ಕೆ ಮಾಡಿಕೊಂಡಾಗ ಮಾತ್ರ ಸಕ್ರಿಯ, PII ಮರೆಮಾಡುವಿಕೆಯಂತೆಯೇ ಅದೇ ಪದ್ಧತಿ (ಕಠಿಣ ನಿಯಮ #20 ಗೆ ಸಂಬಂಧಿತ):
settings.credentialRedactionEnabled === trueಅಥವಾCREDENTIAL_REDACTION_ENABLED=trueಆಗಿರದ ಹೊರತು ನಿಷ್ಕ್ರಿಯವಾಗಿರುತ್ತದೆ. ಇದು ಆಫ್ ಆಗಿರುವಾಗ, ಗಾರ್ಡ್ರೇಲ್ ಯಾವುದೇ ಕಾರ್ಯ ಮಾಡುವುದಿಲ್ಲ — ಅದು ಎಂದಿಗೂ ನಿರ್ಬಂಧಿಸುವುದಿಲ್ಲ ಮತ್ತು ಎಂದಿಗೂ ಮರುಬರೆಯುವುದಿಲ್ಲ. redactCredentials()ಸಂಪೂರ್ಣ ಪೇಲೋಡ್/ಪ್ರತಿಕ್ರಿಯೆ ವೃಕ್ಷದ ಮೂಲಕ ಸಾಗುತ್ತದೆ (walkValue(), ಪ್ರೋಟೋಟೈಪ್-ಪೊಲ್ಯೂಷನ್-ಸುರಕ್ಷಿತ,WeakSetಮೂಲಕ ಸೈಕಲ್-ಸುರಕ್ಷಿತ) ಮತ್ತು ಹೊಂದಾಣಿಕೆಗಳನ್ನು[REDACTED:<type>]ಪ್ಲೇಸ್ಹೋಲ್ಡರ್ನಿಂದ ಬದಲಾಯಿಸುತ್ತದೆ; ನಿಜವಾಗಿ ಬದಲಾದ ಶಾಖೆಗಳನ್ನು ಮಾತ್ರ ಕ್ಲೋನ್ ಮಾಡುತ್ತದೆ.CREDENTIAL_PATTERNSLLM ಪೂರೈಕೆದಾರರ ಕೀಗಳು (OpenAI, OpenAI-proj, Anthropic, Google, Hugging Face, Replicate), VCS/SaaS ಟೋಕನ್ಗಳು (GitHub, Slack, Linear, Notion, npm, Postman, Discord), ಪಾವತಿ ಕೀಗಳು (Stripe, Square), ಕ್ಲೌಡ್ ಕೀಗಳು (AWS ಪ್ರವೇಶ ಕೀ, Twilio, SendGrid, Mailgun), ಖಾಸಗಿ ಕೀಗಳು / JWTಗಳು, ರುಜುವಾತುಗಳನ್ನು ಹೊಂದಿರುವ ಸಂಪರ್ಕ ಸ್ಟ್ರಿಂಗ್ಗಳು (mongodb://user:pass@..., ಇತ್ಯಾದಿ), ಮತ್ತು ಸಾಮಾನ್ಯAuthorization/x-api-key/api-key/apikeyಹೆಡರ್-ಮೌಲ್ಯ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ಹೆಡರ್-ರೂಪದ ಕೀಗಳನ್ನು (authorization,x-api-key,api-key,apikey) ಸಾಮಾನ್ಯ ಪಠ್ಯ ರೆಜೆಕ್ಸ್ ಮೂಲಕವಲ್ಲದೆ ರಚನಾತ್ಮಕವಾಗಿ ಮರೆಮಾಡಲಾಗುತ್ತದೆ (ಮೌಲ್ಯ ಮಾತ್ರ,Bearer/Basicನಂತಹ ಸ್ಕೀಮ್ ಪೂರ್ವಪ್ರತ್ಯಯವನ್ನು ಉಳಿಸಲಾಗುತ್ತದೆ).- ಗಾರ್ಡ್ರೇಲ್ ಎಂದಿಗೂ ನಿರ್ಬಂಧಿಸುವುದಿಲ್ಲ; ಅದು ಮರುಬರೆಯುತ್ತದೆ (
modifiedPayload/modifiedResponse) ಮತ್ತು ಟಿಪ್ಪಣಿ ಸೇರಿಸುತ್ತದೆ (meta.credentialsRedacted,meta.count).
ರಿಗ್ರೆಷನ್ ಗಾರ್ಡ್: tests/unit/credential-masker-guardrail.test.ts.
ಮೂಲ ಒಪ್ಪಂದ (base.ts)
class BaseGuardrail {
enabled: boolean;
name: string;
priority: number;
constructor(name: string, options?: { enabled?: boolean; priority?: number });
async preCall(payload: unknown, context: GuardrailContext): Promise<GuardrailResult | void>;
async postCall(response: unknown, context: GuardrailContext): Promise<GuardrailResult | void>;
}
interface GuardrailResult<TValue = unknown> {
block?: boolean; // true ಸರಪಳಿಯನ್ನು ತಕ್ಷಣವೇ ಸ್ಥಗಿತಗೊಳಿಸುತ್ತದೆ
message?: string; // ನಿರ್ಬಂಧಿಸುವಾಗ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ
meta?: Record<string, unknown> | null;
modifiedPayload?: TValue; // ವಿನಂತಿಯನ್ನು ಮರುಬರೆಯಲು preCall ಮೂಲಕ ಹಿಂತಿರುಗಿಸಲಾಗುತ್ತದೆ
modifiedResponse?: TValue; // ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಮರುಬರೆಯಲು postCall ಮೂಲಕ ಹಿಂತಿರುಗಿಸಲಾಗುತ್ತದೆ
}
interface GuardrailContext {
apiKeyInfo?: Record<string, unknown> | null;
disabledGuardrails?: string[] | null;
endpoint?: string | null;
headers?: Headers | Record<string, unknown> | null;
log?: GuardrailLog | Console | null;
method?: string | null;
model?: string | null;
provider?: string | null;
signal?: AbortSignal;
sourceFormat?: string | null;
stream?: boolean;
targetFormat?: string | null;
}
void, {}, ಅಥವಾ { block: false } ಇವುಗಳಲ್ಲಿ ಯಾವುದನ್ನಾದರೂ ಹಿಂತಿರುಗಿಸುವ ಮೂಲಕ guardrail "ಯಾವುದೇ ಬದಲಾವಣೆ ಇಲ್ಲ" ಎಂದು ಸೂಚಿಸುತ್ತದೆ. modifiedPayload/modifiedResponse ಅನ್ನು ಹಿಂತಿರುಗಿಸುವುದರಿಂದ, ನಂತರದ guardrailಗಳಿಗಾಗಿ ಸರಪಳಿಯ ಮೂಲಕ ಹರಿಯುವ ಮೌಲ್ಯವನ್ನು ಅದು ಬದಲಿಸುತ್ತದೆ.
signal?: AbortSignal ಕಾಲರ್ನ ಜೀವನಚಕ್ರವನ್ನು guardrailಗಳಿಗೆ ಒಯ್ಯುತ್ತದೆ. ವಿನಂತಿಯ ರದ್ದತಿಯು ಉದ್ದೇಶಪೂರ್ವಕ fail-open ಅಪವಾದವಾಗಿದೆ: media bridgeಗಳು ಕೆಲಸವನ್ನು ನಿಲ್ಲಿಸಿ cleanup ಮಾಡುತ್ತವೆ ಮತ್ತು ಅದನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ ಎಂದು ತಿಳಿದಿರುವ ಗುರಿಗೆ raw media ಅನ್ನು ಮರುಸ್ಥಾಪಿಸುವುದಿಲ್ಲ.
ರಿಜಿಸ್ಟ್ರಿ (registry.ts)
singleton guardrailRegistry ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ:
register(guardrail)— guardrail ಅನ್ನು ಸೇರಿಸುತ್ತದೆ (ಅಥವಾ normalized name ಆಧಾರದಲ್ಲಿ ಬದಲಿಸುತ್ತದೆ) ಮತ್ತು ಏರಿಕೆ ಕ್ರಮದpriorityಪ್ರಕಾರ ಮರು-ವಿಂಗಡಿಸುತ್ತದೆ.clear()/list()— ಆಡಳಿತಾತ್ಮಕ ಸಹಾಯಕಗಳು.runPreCallHooks(payload, context)— ಸಕ್ರಿಯ guardrailಗಳ ಮೂಲಕ ಪುನರಾವರ್ತಿಸುತ್ತದೆ,modifiedPayloadಮೂಲಕ payload ಅನ್ನು ಮುಂದಕ್ಕೆ ಕೊಂಡೊಯ್ಯುತ್ತದೆ ಮತ್ತು ಮೊದಲblock: trueದೊರೆತಾಗ ನಿಲ್ಲುತ್ತದೆ.runPostCallHooks(response, context)— response ಭಾಗದಲ್ಲಿಯೂ ಇದೇ ಹರಿವನ್ನು ಅನುಸರಿಸುತ್ತದೆ.resetGuardrailsForTests({ registerDefaults })— ಸ್ಥಿತಿಯನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಸ್ವಚ್ಛ test isolationಗಾಗಿ ಐಚ್ಛಿಕವಾಗಿ defaults ಅನ್ನು ಮರು-ನೋಂದಾಯಿಸುತ್ತದೆ.
ಎರಡೂ runnerಗಳು { blocked, payload|response, results, guardrail?, message? } ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತವೆ, ಇಲ್ಲಿ results ಎಂಬುದು ಪ್ರತಿಯೊಂದು guardrailಗೆ ಸಂಬಂಧಿಸಿದ blocked, skipped, modified, error, ಮತ್ತು meta ಕ್ಷೇತ್ರಗಳನ್ನು ಒಳಗೊಂಡಿರುವ GuardrailExecutionResult recordಗಳ array ಆಗಿದ್ದು, tracingಗೆ ಉಪಯುಕ್ತವಾಗಿದೆ.
ಪ್ರತಿ ವಿನಂತಿಗೆ Guardrailಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವುದು
resolveDisabledGuardrails({ apiKeyInfo, body, headers }) ಪ್ರಸ್ತುತ ವಿನಂತಿಗಾಗಿ ಬಿಟ್ಟುಬಿಡಬೇಕಾದ guardrail ಹೆಸರುಗಳ duplicate ತೆಗೆದುಹಾಕಿದ ಪಟ್ಟಿಯನ್ನು ಒಟ್ಟುಗೂಡಿಸುತ್ತದೆ. ಮೂಲಗಳು (ಎಲ್ಲವೂ ಐಚ್ಛಿಕ, ಎಲ್ಲವನ್ನೂ ವಿಲೀನಗೊಳಿಸಲಾಗುತ್ತದೆ):
apiKeyInfo.disabledGuardrails- ವಿನಂತಿಯ bodyಯಲ್ಲಿನ
disabledGuardrails(top-level) - ವಿನಂತಿಯ bodyಯಲ್ಲಿನ
metadata.disabledGuardrails - Header
x-omniroute-disabled-guardrails(ಅಥವಾ ಹಳೆಯx-disabled-guardrails)
ಮೌಲ್ಯಗಳು stringಗಳ array ಆಗಿರಬಹುದು ಅಥವಾ comma-separated string ಆಗಿರಬಹುದು; ಹೆಸರುಗಳನ್ನು lowercase kebab-caseಗೆ normalize ಮಾಡಲಾಗುತ್ತದೆ (pii_masker → pii-masker). ಫಲಿತಾಂಶವನ್ನು context.disabledGuardrails ಮೂಲಕ registryಗೆ ರವಾನಿಸಲಾಗುತ್ತದೆ, ಅದು ಹೊಂದಿಕೆಯಾಗುವ guardrailಗಳನ್ನು ಬಿಟ್ಟುಬಿಡುತ್ತದೆ (results ನಲ್ಲಿ skipped: true).
ಕಾರ್ಯಗತಗೊಳಿಸುವ ಕ್ರಮ
src/sse/handlers/chat.ts ಮತ್ತು
open-sse/handlers/chatCore.ts ಮೂಲಕ ಹರಿಯುವ ಪ್ರತಿ ವಿನಂತಿಗಾಗಿ:
resolveDisabledGuardrails(...)API ಕೀ, ಬಾಡಿ ಮತ್ತು ಹೆಡರ್ಗಳಿಂದ ಬಿಟ್ಟುಬಿಡುವ ಪಟ್ಟಿಯನ್ನು ರಚಿಸುತ್ತದೆ.guardrailRegistry.runPreCallHooks(body, ctx)ಗಾರ್ಡ್ರೇಲ್ಗಳನ್ನು ಆದ್ಯತೆಯ ಆರೋಹಣ ಕ್ರಮದಲ್ಲಿ ಚಲಾಯಿಸುತ್ತದೆ:- ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾದ ಗಾರ್ಡ್ರೇಲ್ಗಳನ್ನು
skippedಎಂದು ದಾಖಲಿಸಲಾಗುತ್ತದೆ. - ಪ್ರತಿ ಗಾರ್ಡ್ರೇಲ್ನ
preCall,modifiedPayloadಮೂಲಕ ಪೇಲೋಡ್ ಅನ್ನು ಮರುಬರೆಯಬಹುದು. - ಮೊದಲ
block: trueಸರಪಳಿಯನ್ನು ಅಲ್ಲಿಯೇ ನಿಲ್ಲಿಸುತ್ತದೆ ಮತ್ತು ಹ್ಯಾಂಡ್ಲರ್ ಗಾರ್ಡ್ರೇಲ್ ನಿರಾಕರಣೆಯ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ.
- ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾದ ಗಾರ್ಡ್ರೇಲ್ಗಳನ್ನು
- (ಸಂಭಾವ್ಯವಾಗಿ ಮರುಬರೆಯಲಾದ) ಪೇಲೋಡ್ ಕಾಂಬೊ ರೂಟಿಂಗ್ ಮತ್ತು ಅಪ್ಸ್ಟ್ರೀಮ್ ಡಿಸ್ಪ್ಯಾಚ್ಗೆ ಹರಿಯುತ್ತದೆ.
- ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಜೋಡಿಸಿದ ನಂತರ,
guardrailRegistry.runPostCallHooks(...)ಪ್ರತಿಕ್ರಿಯೆಯ ಮೇಲೆ ಅದೇ ಸರಪಳಿಯನ್ನು ಚಲಾಯಿಸುತ್ತದೆ. ಇಲ್ಲಿblock: trueಅಪ್ಸ್ಟ್ರೀಮ್ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಕೈಬಿಡುತ್ತದೆ.
ದೋಷ ಎಸೆಯುವ ಗಾರ್ಡ್ರೇಲ್ಗಳನ್ನು error: <message> ಜೊತೆಗೆ ದಾಖಲಿಸಲಾಗುತ್ತದೆ ಮತ್ತು
logger.warn ಮೂಲಕ ಲಾಗ್ ಮಾಡಲಾಗುತ್ತದೆ, ಆದರೆ ಸರಪಳಿ ಮುಂದುವರಿಯುತ್ತದೆ — ವಿನ್ಯಾಸದ ಪ್ರಕಾರ ದೋಷ ಸಂಭವಿಸಿದಾಗಲೂ ಅನುಮತಿಸಲಾಗುತ್ತದೆ.
ಸಂರಚನೆ
ಅಂತರ್ನಿರ್ಮಿತ ಗಾರ್ಡ್ರೇಲ್ಗಳು ಓದುವ ಪರಿಸರ ಚರಗಳು:
| ಚರ | ಬಳಸುವುದು | ಪರಿಣಾಮ |
|---|---|---|
INPUT_SANITIZER_ENABLED |
prompt-injection |
ಪತ್ತೆಹಚ್ಚುವಿಕೆಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು false ಎಂದು ಹೊಂದಿಸಿ. |
INPUT_SANITIZER_MODE |
prompt-injection |
ಇಂಜೆಕ್ಷನ್ ನೀತಿ: warn, block, ಅಥವಾ log. ಹಳೆಯ redact ಮೌಲ್ಯವು ಇಂಜೆಕ್ಷನ್ ಪಠ್ಯವನ್ನು ಮರುಬರೆಯುವುದಿಲ್ಲ. |
INJECTION_GUARD_MODE |
prompt-injection |
ಇಂಜೆಕ್ಷನ್ ಗಾರ್ಡ್ನ ಮೋಡ್; ಪರಿಸರ ಚರಗಳನ್ನು ಅತಿಕ್ರಮಿಸುವ DB ವೈಶಿಷ್ಟ್ಯ ಫ್ಲ್ಯಾಗ್ ಕೂಡ ಹೌದು (DB > ENV). |
INPUT_SANITIZER_BLOCK_THRESHOLD |
prompt-injection |
MODE=block ನಿರಾಕರಿಸುವ ಕನಿಷ್ಠ ತೀವ್ರತೆ: high (ಡೀಫಾಲ್ಟ್), medium, ಅಥವಾ low. |
INJECTION_GUARD_BLOCK_THRESHOLD |
prompt-injection |
INPUT_SANITIZER_BLOCK_THRESHOLD ಗಾಗಿನ ಹಳೆಯ ಅಲಿಯಾಸ್. |
PII_REDACTION_ENABLED |
pii-masker |
true ಆಗಿದ್ದಾಗ, ವಿನಂತಿಯ PII ಅನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ (ಇಂಜೆಕ್ಷನ್ ಮೋಡ್ನಿಂದ ಸ್ವತಂತ್ರವಾಗಿ). |
PII_RESPONSE_SANITIZATION / _MODE |
pii-masker (ಡೌನ್ಸ್ಟ್ರೀಮ್) |
ಪ್ರತಿಕ್ರಿಯೆ-ಬದಿಯ ಮಾಸ್ಕರ್ ವರ್ತನೆಯನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. |
Modality Bridge ಗಾರ್ಡ್ರೇಲ್ಗಳು ಪರಿಸರ ಚರಗಳ ಬದಲಾಗಿ DB-ಬೆಂಬಲಿತ ಸೆಟ್ಟಿಂಗ್ಗಳ
ಸ್ಟೋರ್ನಿಂದ (getSettings()) ರನ್ಟೈಮ್ ಸಂರಚನೆಯನ್ನು ಓದುತ್ತವೆ. Vision ನ ಪ್ರಾಥಮಿಕ ಕೀಗಳು
modalityBridgeVisionEnabled, modalityBridgeVisionMode,
modalityBridgeVisionModel, modalityBridgeVisionTaskAware,
modalityBridgeVisionPrompt, modalityBridgeVisionTimeout,
modalityBridgeVisionMaxImages, modalityBridgeVisionMaxChars,
modalityBridgeCacheEnabled, modalityBridgeCacheTtlMinutes, ಮತ್ತು
modalityBridgeCacheMaxEntries. ಹಳೆಯ
visionBridge* ಕೀಗಳನ್ನು ದಾಖಲಿಸಲಾದ ಒಂದು-ಚಕ್ರದ ಓದು ಫಾಲ್ಬ್ಯಾಕ್ ಆಗಿ ಮಾತ್ರ
ಸ್ವೀಕರಿಸಲಾಗುತ್ತದೆ; ಡ್ಯಾಶ್ಬೋರ್ಡ್ ಬರಹಗಳು ಪ್ರಾಥಮಿಕ ಕೀಗಳನ್ನು ಬಳಸುತ್ತವೆ. ಡೀಫಾಲ್ಟ್ಗಳು ಮತ್ತು ಫಾಲ್ಬ್ಯಾಕ್
ರಿಸಾಲ್ವರ್ src/shared/constants/modalityBridgeDefaults.ts ನಲ್ಲಿ ಇವೆ; ಹಳೆಯ
ಸ್ಥಿರಾಂಕಗಳನ್ನು src/shared/constants/visionBridgeDefaults.ts ನಲ್ಲಿ ಉಳಿಸಿಕೊಳ್ಳಲಾಗಿದೆ.
Audio, modalityBridgeAudioEnabled, modalityBridgeAudioModel,
modalityBridgeAudioTimeout, ಮತ್ತು modalityBridgeAudioMaxClips ಜೊತೆಗೆ ಹಂಚಿಕೊಂಡ
modalityBridgeCache* ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬಳಸುತ್ತದೆ. ಈ ಕೀಗಳನ್ನು Modality Bridge ಸ್ಕೀಮಾ ಜೊತೆಗೆ
ಪರಿಚಯಿಸಿದ್ದರಿಂದ Audioಗೆ ಹಳೆಯ ಕೀಗಳ ಫಾಲ್ಬ್ಯಾಕ್ ಇಲ್ಲ.
Video, modalityBridgeVideoEnabled, modalityBridgeVideoAnalysisMode,
modalityBridgeVideoModel,
modalityBridgeVideoFrameCount, modalityBridgeVideoSamplingPolicy,
modalityBridgeVideoMaxVideos, ಮತ್ತು
modalityBridgeVideoTimeout ಜೊತೆಗೆ ಹಂಚಿಕೊಂಡ modalityBridgeCache* ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬಳಸುತ್ತದೆ.
FFmpeg/ffprobe ಐಚ್ಛಿಕ ಕಾರ್ಯಾಚರಣಾ ಅವಲಂಬನೆಗಳಾಗಿರುವುದರಿಂದ ಮತ್ತು ಫ್ರೇಮ್ ಕ್ಯಾಪ್ಷನಿಂಗ್ ವಿಳಂಬ ಹಾಗೂ ಮಾದರಿ ವೆಚ್ಚವನ್ನು ಹೆಚ್ಚಿಸುವುದರಿಂದ
ಇದು ಡೀಫಾಲ್ಟ್ ಆಗಿ ನಿಷ್ಕ್ರಿಯಗೊಂಡಿರುತ್ತದೆ.
ಕಸ್ಟಮ್ ಗಾರ್ಡ್ರೈಲ್ಗಳು
import { BaseGuardrail, guardrailRegistry } from "@/lib/guardrails";
class BudgetGuardrail extends BaseGuardrail {
constructor() {
super("budget", { priority: 50 });
}
async preCall(payload, ctx) {
if (ctx.apiKeyInfo?.budgetExceeded) {
return { block: true, message: "Daily budget exceeded" };
}
return { block: false };
}
}
guardrailRegistry.register(new BudgetGuardrail());
ಹಂತಗಳು:
BaseGuardrailಅನ್ನು ವಿಸ್ತರಿಸುವsrc/lib/guardrails/myGuardrail.tsಅನ್ನು ರಚಿಸಿ.preCallಮತ್ತು/ಅಥವಾpostCallಅನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸಿ.- ಇಂಪೋರ್ಟ್ ಸಮಯದಲ್ಲಿಯೇ ನೋಂದಾಯಿಸಿ (
registerDefaultGuardrailsನಿಂದ ಪುಶ್ ಮಾಡಿ) ಅಥವಾ ರನ್ಟೈಮ್ನಲ್ಲಿguardrailRegistry.register(...)ಅನ್ನು ಕರೆ ಮಾಡಿ — ಅದೇ ಸಾಮಾನ್ಯೀಕರಿಸಿದ ಹೆಸರನ್ನು ಹೊಂದಿರುವ ಯಾವುದೇ ಹಿಂದಿನ ಗಾರ್ಡ್ರೈಲ್ ಅನ್ನು ರಿಜಿಸ್ಟ್ರಿ ಬದಲಿಸುತ್ತದೆ. tests/unit/ಅಡಿಯಲ್ಲಿ ಪರೀಕ್ಷೆಗಳನ್ನು ಸೇರಿಸಿ (ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಉದಾಹರಣೆಗಳು:tests/unit/guardrails-registry.test.ts,tests/unit/prompt-injection-guard.test.ts,tests/unit/guardrails/visionBridge.test.ts).
ಪರೀಕ್ಷೆ
ತಿಳಿದಿರುವ ಸ್ಥಿತಿಯಿಂದ ಪ್ರಾರಂಭಿಸಲು ಪರೀಕ್ಷೆಗಳ ನಡುವೆ resetGuardrailsForTests() ಅನ್ನು ಬಳಸಿ.
ಖಾಲಿ ರಿಜಿಸ್ಟ್ರಿಯೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಲು { registerDefaults: false } ಅನ್ನು ಪಾಸ್ ಮಾಡಿ ಮತ್ತು
ಪರೀಕ್ಷೆಯಲ್ಲಿರುವ ಗಾರ್ಡ್ರೈಲ್ಗಳನ್ನು ಮಾತ್ರ ನೋಂದಾಯಿಸಿ. Vision Bridge ಡಿಪೆಂಡೆನ್ಸಿ
ಇಂಜೆಕ್ಷನ್ ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ (deps.getSettings, deps.callVisionModel); Audio Bridge,
ಸೆಟ್ಟಿಂಗ್ಗಳು, ಸಾಮರ್ಥ್ಯಗಳು, STT ಮಾದರಿ ಆಯ್ಕೆ, ಕ್ರೆಡೆನ್ಶಿಯಲ್ ಪರಿಶೀಲನೆಗಳು ಮತ್ತು
ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಷನ್ಗಾಗಿ ಸಮಾನವಾದ ಸೀಮ್ಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ ಪರೀಕ್ಷೆಗಳು DB
ಅಥವಾ ನೆಟ್ವರ್ಕ್ ಪ್ರವೇಶವಿಲ್ಲದೆಯೇ ಎರಡೂ ಫ್ಲೋಗಳನ್ನು ಪರೀಕ್ಷಿಸಬಹುದು.
ಇದನ್ನೂ ನೋಡಿ
src/lib/guardrails/— ಅನುಷ್ಠಾನsrc/shared/utils/inputSanitizer.ts— ಪ್ರಾಂಪ್ಟ್ ಇಂಜೆಕ್ಷನ್ ಮತ್ತು PII ಮಾಸ್ಕಿಂಗ್ಗೆ ಶಕ್ತಿ ನೀಡುವ ಹಂಚಿಕೆಯ ಡಿಟೆಕ್ಟರ್src/shared/constants/visionBridgeDefaults.ts— Vision Bridge ಡೀಫಾಲ್ಟ್ಗಳು ಮತ್ತು ಫೋರ್ಸ್ಡ್-ಬ್ರಿಡ್ಜ್ ಮಾದರಿಗಳ ಪಟ್ಟಿsrc/shared/constants/modalityBridgeDefaults.ts— ಹಂಚಿಕೆಯ Vision/Audio ರನ್ಟೈಮ್ ಡೀಫಾಲ್ಟ್ಗಳುdocs/architecture/RESILIENCE_GUIDE.md— ಆರ್ಥೋಗೊನಲ್ ಲೇಯರ್ (ಸರ್ಕ್ಯೂಟ್ ಬ್ರೇಕರ್, ಕೂಲ್ಡೌನ್ಗಳು)docs/reference/ENVIRONMENT.md— ಸಂಪೂರ್ಣ ಎನ್ವಿರಾನ್ಮೆಂಟ್ ವೇರಿಯಬಲ್ ಉಲ್ಲೇಖ
ಇಂಜೆಕ್ಷನ್-ಗಾರ್ಡ್ ರೂಟ್ ವ್ಯಾಪ್ತಿ ಮತ್ತು ರೆಡ್-ಟೀಮ್ (ಹಂತ 8 · ಬ್ಲಾಕ್ D)
ಇಂಜೆಕ್ಷನ್-ಗಾರ್ಡ್ (createInjectionGuard / withInjectionGuard) ಬಳಕೆದಾರರ
ಪ್ರಾಂಪ್ಟ್ಗಳನ್ನು ಸ್ವೀಕರಿಸುವ ಎಲ್ಲಾ ರೂಟ್ಗಳನ್ನು ಒಳಗೊಳ್ಳುತ್ತದೆ. ಇದು INJECTION_GUARD_MODE
ಅನ್ನು ಗೌರವಿಸುತ್ತದೆ (ಡೀಫಾಲ್ಟ್ warn = ಲಾಗ್ ಮಾತ್ರ; block = HTTP 400 SECURITY_001 ಅನ್ನು ಹಿಂದಿರುಗಿಸುತ್ತದೆ).
| ಪ್ರಕಾರ | ರೂಟ್ಗಳು | ಡೀಫಾಲ್ಟ್ ಮೋಡ್ |
|---|---|---|
| ಪಠ್ಯ (ಅಸ್ತಿತ್ವದಲ್ಲಿರುವುದು) | /v1/chat/completions, /v1/completions, /v1/relay/chat/completions |
warn |
| ಜನರೇಟಿವ್ | /v1/messages, /v1/responses, /v1/images/generations, /v1/images/edits, /v1/videos/generations, /v1/music/generations, /v1/audio/speech |
warn |
| ಡೇಟಾ | /v1/embeddings, /v1/rerank, /v1/search, /v1/moderations |
warn |
ಪಠ್ಯ ಹೊರತೆಗೆಯುವಿಕೆ (extractMessageContents) messages/input/prompt/query+documents/instructions/system ಅನ್ನು ಒಳಗೊಳ್ಳುತ್ತದೆ.
ರೆಡ್-ಟೀಮ್ (ಪ್ರತಿ ರಾತ್ರಿ, nightly-llm-security.yml): INJECTION_GUARD_MODE=block
ನಲ್ಲಿ ಪ್ರತಿಯೊಂದು ರೂಟ್, OWASP-LLM ಕಾರ್ಪಸ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ ಎಂಬುದನ್ನು promptfoo
ಮೌಲ್ಯೀಕರಿಸುತ್ತದೆ; garak ಪ್ರೋಬ್ಗಳನ್ನು ಚಲಾಯಿಸುತ್ತದೆ (ಸೀಕ್ರೆಟ್ ಇಲ್ಲದಿದ್ದರೆ ಬಿಟ್ಟುಬಿಡುತ್ತದೆ).
ಸ್ಥಿರತೆಗಾಗಿ moderations ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ — ಬ್ಲಾಕ್-ಮೋಡ್ನಲ್ಲಿರುವ ಆಪರೇಟರ್ಗಳು
resolveDisabledGuardrails ಮೂಲಕ ಅದಕ್ಕೆ ವಿನಾಯಿತಿ ನೀಡಬಹುದು.
ಪ್ರತಿ ರಾತ್ರಿಯ ವರ್ಕ್ಫ್ಲೋ (.github/workflows/nightly-llm-security.yml, cron + ಮ್ಯಾನುಯಲ್
ಡಿಸ್ಪ್ಯಾಚ್) ಎರಡು ಜಾಬ್ಗಳನ್ನು ಹೊಂದಿದೆ:
promptfoo-guard(ನಿರ್ಬಂಧಿಸುವುದು) —INJECTION_GUARD_MODE=blockಜೊತೆಗೆpromptfoo eval -c promptfooconfig.yamlಅನ್ನು ಚಲಾಯಿಸುತ್ತದೆ. ಪ್ರತಿಯೊಂದು ಪ್ರತಿಕೂಲ ಪ್ರಕರಣವು (ಉದಾ. "ಹಿಂದಿನ ಎಲ್ಲಾ ಸೂಚನೆಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಿ…", DAN-ಶೈಲಿಯ ಜೈಲ್ಬ್ರೇಕ್ಗಳು) ಪ್ರತಿಕ್ರಿಯೆಯುerror.code === "SECURITY_001"ಅನ್ನು ಹೊಂದಿದೆ ಎಂದು ದೃಢೀಕರಿಸುತ್ತದೆ, ಅಂದರೆ ಗಾರ್ಡ್ ನಿಜವಾಗಿಯೂ ವಿನಂತಿಯನ್ನು ತಿರಸ್ಕರಿಸಿದೆ.garak(ಸಲಹಾತ್ಮಕ) — ಸ್ಥಳೀಯ OmniRoute ಇನ್ಸ್ಟನ್ಸ್ (http://localhost:20128/v1) ವಿರುದ್ಧ garak--probes promptinject,dan,leakreplayಅನ್ನು ಚಲಾಯಿಸುತ್ತದೆ. ಇದು ಪ್ರೊವೈಡರ್ ಸೀಕ್ರೆಟ್ (PROMPTFOO_PROVIDER_KEY) ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ; ಸೀಕ್ರೆಟ್ ಇಲ್ಲದಿದ್ದರೆ ಸರಾಗವಾಗಿ ಬಿಟ್ಟುಬಿಡುತ್ತದೆ ಮತ್ತು|| trueಪ್ರತ್ಯಯವನ್ನು ಹೊಂದಿರುತ್ತದೆ, ಆದ್ದರಿಂದ CI ವಿಫಲಗೊಳಿಸದೆಯೇ ವರದಿ ಮಾಡುತ್ತದೆ.
ಗಾರ್ಡ್ ಹೆಲ್ಪರ್ನ (createInjectionGuard / withInjectionGuard) ವ್ಯಾಪ್ತಿಯು ಪ್ರಾಂಪ್ಟ್
ಹೊಂದಿರುವ ಪ್ರತಿಯೊಂದು /v1 ರೂಟ್ಗೆ ವಿಸ್ತರಿಸುತ್ತದೆ; ಪ್ರಾಂಪ್ಟ್ ಪಠ್ಯವನ್ನು
src/shared/utils/inputSanitizer.ts ನಲ್ಲಿರುವ extractMessageContents() ಮೂಲಕ
messages/input/prompt/query+documents/instructions/system ನಿಂದ
ಪಡೆಯಲಾಗುತ್ತದೆ.