Files
OmniRoute/docs/i18n/ta/docs/security/GUARDRAILS.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* 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.
2026-09-18 13:16:46 -03:00

144 KiB
Raw Blame History

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 · 🇮🇳 kn · 🇰🇷 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 · 🇮🇳 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-இன்படி தெளிவுபடுத்தப்பட்டது)

OmniRoute-க்கும் மேல்நிலை வழங்குநர்களுக்கும் இடையிலான எல்லையில் பாதுகாப்பு, கொள்கை மற்றும் உள்ளடக்க மாற்றங்களை Guardrails செயல்படுத்துகின்றன. ஒவ்வொரு guardrail-உம் கோரிக்கை payload-களை (preCall) மற்றும் மேல்நிலை பதில்களை (postCall) ஆய்வு செய்து, விருப்பமாக அவற்றை நிராகரிக்கவோ, மாற்றவோ அல்லது குறிப்புரையிடவோ முடியும்.

இந்த அமைப்பு fail-open முறையில் இயங்குகிறது: செயல்பாட்டின்போது ஒரு guardrail பிழையை எறிந்தால், registry அந்தப் பிழையைப் பதிவுசெய்துவிட்டு, கோரிக்கையைத் தோல்வியடையச் செய்வதற்குப் பதிலாக அடுத்த guardrail-உடன் தொடரும். தடுத்தல் என்பது எப்போதும் வெளிப்படையான முடிவு (block: true); அது ஒருபோதும் தற்செயலாக நிகழாது.

உள்ளமைந்த Guardrails

இறக்குமதி செய்யப்படும்போது, registry முன்னுரிமை வரிசையில் ஆறு guardrail-களைத் தானாக ஏற்றுகிறது (registry.tsregisterDefaultGuardrails() என்பதைப் பார்க்கவும்):

முன்னுரிமை பெயர் கட்டம்(கள்) கோப்பு
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

பார்வைத் திறனற்ற மாதிரிகளை இலக்காகக் கொண்ட, படங்களைக் கொண்டிருக்கும் கோரிக்கைகளை இடைமறித்து, முழுக் கோரிக்கையையும் பார்வைத் திறனுள்ள மாதிரிக்கு மாற்றிவிடுகிறது அல்லது மேல்நிலை அழைப்புக்கு முன், படப் பகுதிகளை அமைவடிவமைக்கக்கூடிய பார்வை மாதிரி உருவாக்கிய உரை விளக்கங்களால் மாற்றுகிறது. இதனால் உரை-மட்டும் வழங்குநர்கள் பல்புலன் payload-களை வெளிப்படையாகக் கையாள முடியும்.

செயலோட்டம்:

  1. இலக்கு மாதிரி ஏற்கனவே பார்வையை ஆதரித்தால் தவிர்க்கவும் (அது கட்டாய bridge பட்டியலான isVisionBridgeForcedModel-இல் இடம்பெற்றிருந்தால் மட்டும் தவிர்க்க வேண்டாம்).
  2. extractImageParts(messages) (visionBridgeHelpers.ts) வழியாகப் படப் பகுதிகளைப் பிரித்தெடுக்கவும். இது open-sse/utils/mediaParts.ts-இல் உள்ள ஒருங்கிணைந்த ஊடகக் கண்டறிவி detectMediaParts()-இடம் பணியை ஒப்படைக்கிறது — combo பொருந்துதன்மை வடிப்பானுடன் பகிரப்படும் ஒரே உண்மை ஆதாரம் இதுவாகும். replaceImageParts மீண்டும் இணைக்கக்கூடிய வடிவங்களின் மேல்நிலைப் பகுதிகளுக்கு மட்டும் பிரித்தெடுத்தல் அனுமதிப் பட்டியலிடப்பட்டுள்ளது (பிரித்தெடுத்தல்↔மாற்றுதல் ஒப்பந்தம்): OpenAI image_url, Anthropic base64 source.type:"base64", Anthropic URL source.type:"url" மற்றும் Responses API input_image. உள்ளமைந்த பொருத்தங்களும் சுட்டிக்காட்டி-மட்டும் வடிவங்களும் combo-filter-க்குரியவை; அவை ஒருபோதும் பிரித்தெடுக்கப்படாது. எதுவும் கிடைக்காவிட்டால் தவிர்க்கவும்.
  3. resolveVisionBridgeRuntimeSettings() (src/shared/constants/modalityBridgeDefaults.ts) வழியாக இயக்கநேர அமைவடிவத்தைத் தீர்மானிக்கவும்: புதிய modalityBridge* அமைவுகள் முன்னுரிமை பெறும்; பழைய visionBridge* அமைவுகள் ஒரு சுழற்சிக்கான மாற்று வழியாக (பின்சுருட்டல் காலவாய்ப்பு) தொடர்ந்து இருக்கும். bridge முடக்கப்பட்டிருந்தால் எந்த ஊடகச் சுழற்சிக்கும் முன்பே தவிர்க்கவும்.
  4. Mode selector (modalityBridgeVisionMode, கீழேயுள்ள அட்டவணையைப் பார்க்கவும்) reroute அல்லது describe என்பதைத் தீர்மானிக்கிறது. Reroute, model மட்டும் மாற்றப்பட்ட modifiedPayload-ஐயும், { rerouted, fromModel, toModel, imagesKept } meta-வையும் வழங்குகிறது.
  5. Describe பாதை: படங்களின் எண்ணிக்கையை maxImages வரை கட்டுப்படுத்தி, பணியை உணர்ந்த prompt-ஐ உருவாக்கி, describe cache-ஐச் சரிபார்த்து, பார்வை மாதிரியை இணையாக (Promise.allSettled) அழைத்து, அவற்றின் இடத்தில் [Image N]: <description> உரைப் பகுதிகளைச் சேர்க்கிறது. தோல்வியுற்ற describe null-ஐ வழங்கும்; அசல் படப் பகுதி பாதுகாக்கப்படும் (#4012) — ஆனால் combo describe பாதையில் ஒவ்வொரு describe-உம் தோல்வியுற்று, பார்வைத் திறனற்ற மேல்நிலை உறுதிசெய்யப்பட்டிருந்தால் மட்டும், அதற்குப் பதிலாக (கிடைக்கவில்லை — பார்வைத் திறனுள்ள வழங்குநர் எவரும் இணைக்கப்படவில்லை) என்ற stub பயன்படுத்தப்படும் (#8430).
  6. modifiedPayload + meta (imagesProcessed, descriptions, processingTimeMs, visionModel) ஆகியவற்றை வழங்கவும்.

Mode selector (modalityBridgeVisionMode)

முறை இயல்புநிலை நடத்தை
auto மாற்றப்படாத பழைய heuristic (#6640/#7204): அசல் மாதிரியிடம் ஏற்கத்தக்க credentials ஏற்கனவே இல்லாவிட்டால், non-combo/auto/ மாதிரிகள் சிறந்த பார்வை மாதிரிக்கு reroute செய்யப்படும் (இருந்தால் describe செய்யப்படும்); combo இலக்குகள் எப்போதும் describe செய்யப்படும்.
describe எப்போதும் describe செய்யும் — reroute தொகுதி முழுமையாகத் தவிர்க்கப்படும்; பயனர் தேர்ந்தெடுத்த மாதிரியே எப்போதும் பதிலளிக்கும்.
reroute reroute-ஐக் கட்டாயப்படுத்தும்: credential உள்ள மாதிரியைத் தக்கவைக்கும் guard புறக்கணிக்கப்படும். Reroute-இலக்கு credential guard தொடர்ந்து செயல்படும் — பயன்படுத்தக்கூடிய பார்வை இலக்கு எதுவும் இல்லாதபோது, கோரிக்கை describe-க்கு மாறும்; இதனால் மூலப் படங்கள் உரை-மட்டும் backend-ஐ ஒருபோதும் சென்றடையாது (#8430).

கட்டாய முறைகள், auto heuristic இயங்குவதற்கு முன்பே குறுக்குவழியில் முடிவடைகின்றன; auto நடத்தை PR-1-க்கு முந்தைய guardrail-உடன் byte அளவில் முற்றிலும் ஒத்ததாக இருக்கும்.

பணியை உணர்ந்த describe prompt (modalityBridgeVisionTaskAware)

இயல்புநிலை true. composeVisionPrompt() (visionBridgeHelpers.ts) அடிப்படை describe prompt-உடன் கடைசி பயனர் செய்தியின் உரையை (500 எழுத்துகளாகச் சுருக்கி) இணைக்கிறது. இதன் மூலம் விளக்கம், பயனர் உண்மையில் கேட்டதை நோக்கி வழிநடத்தப்படுகிறது (codex-vision-proxy முறை); மேலும் காணக்கூடிய உரையை எழுத்துப்பெயர்க்குமாறு பார்வை மாதிரியிடம் கேட்கப்படுகிறது. Flag முடக்கப்பட்டிருந்தால் — அல்லது பயனர் உரை இல்லாவிட்டால் — அடிப்படை prompt மாற்றமின்றிப் பயன்படுத்தப்படும்.

விவரிப்பு self-loop-இன் சொந்த OpenAI-இணக்கமான கோரிக்கை (callVisionModelSingle() visionBridgeHelpers.ts-இல்) எப்போதும் image_url.detail: "high" என்பதைக் கோருகிறது — நிபந்தனையின்றி, ஒவ்வொரு caller/provider-க்கும், எந்த client signal-ஐயும் சாராமல். இந்த prompt கோரும் உரை-படியெடுத்தல் பணியில் low-detail sampling, OCR துல்லியத்தைக் குறைக்கிறது. எனவே, அசல் உள்வரும் கோரிக்கை எந்த detail level-ஐப் பயன்படுத்தியிருந்தாலும், விவரிப்பு அழைப்பே எப்போதும் high detail-ஐக் கோருகிறது. இது உட்புற விவரிப்பு கோரிக்கையின் body-ஐ மட்டுமே பாதிக்கிறது; முதன்மைக் கோரிக்கையில் caller-இன் சொந்த image_url.detail-ஐ OmniRoute எவ்வாறு முன்னனுப்புகிறது என்பதை இது மாற்றாது — அந்த default தனியாகப் பயன்படுத்தப்படுகிறது, அதுவும் கண்டறியப்பட்ட OpenCode clients-க்கு மட்டும், defaultImageDetail()-இல் (open-sse/handlers/chatCore/upstreamBody.ts). விவரிப்பு self-loop-இன் Anthropic wire-format கிளையில் detail field இல்லை; எனவே, எந்த default-ஆலும் அது பாதிக்கப்படாது.

விவரிப்பு வெளியீட்டு வரம்பு (modalityBridgeVisionMaxChars)

Key இயல்புநிலை வரம்பு
modalityBridgeVisionMaxChars 0 0 அல்லது 10050000

0 (இயல்புநிலை) என்பது வரம்பு இல்லை என்பதைக் குறிக்கிறது — callVisionModel() வழங்கும் விவரிப்பு மாற்றமின்றி அனுப்பப்பட்டு, தற்போதுள்ள நடத்தைப் பாதுகாக்கப்படுகிறது. 10050000 வரம்பிலுள்ள எந்த மதிப்பும், விவரிப்பு [Image N]: <description> ஆக மீண்டும் சேர்க்கப்படுவதற்கு முன், அதை பின்னொட்டுடன் துண்டிக்கிறது (src/lib/guardrails/visionBridge.ts-இல் VisionBridgeGuardrail.preCall()). கீழ்நிலை model-க்கு முழுப் படியெடுத்தல் தேவைப்படும், அதிக விவரங்களைக் கொண்ட OCR பணிகளுக்கு இதை உயர்த்தவும்; அதிகமாகப் பேசும் vision models-இன் token பயன்பாட்டைக் கட்டுப்படுத்த இதைக் குறைக்கவும். Dashboard field, Vision tab-இன் Advanced panel-இல் உள்ளது (ModalityBridgeVisionTab.tsx-இல் modality-bridge-max-chars) மற்றும் வெளிப்படையாகக் கொடுக்கப்பட்ட 0-ஐ மாற்றாமல் வைத்துக்கொண்டு, 1 முதல் 99 வரையிலான எந்த மதிப்பையும் குறைந்தபட்சமான 100-க்கு உயர்த்துகிறது — 0 என்பது வெறும் "அமைக்கப்படாத" இயல்புநிலை மட்டுமல்ல; அது தனிப்பட்ட முறையில் செல்லுபடியாகும் Zod மதிப்பாகும் (z.union([z.literal(0), z.number().int().min(100).max(50000)])).

விவரிப்பு cache (modalityBridge/bridgeCache.ts)

விவரிப்பு வெளியீடுகளுக்கான in-memory LRU + TTL cache, process முழுவதும் பகிரப்படுகிறது. Key = sha256(imageRef + composedPrompt + configuredBridgeModel), இதில் length-prefix framing பயன்படுத்தப்படுகிறது (field-boundary மோதல்கள் இல்லை). Model கூறு என்பது கட்டமைக்கப்பட்ட bridge model ஆகும்; உண்மையில் பதிலளித்த model அல்ல — callVisionModel உட்புறமாக fallback செய்யக்கூடும், மேலும் ஒவ்வொரு முயற்சிக்கும் தனித்தனியாக key அமைப்பது cache-ஐச் சிதறடிக்கும். தோல்வியடைந்த விவரிப்புகள் ஒருபோதும் cache செய்யப்படாது. அமைப்புகள்:

Key இயல்புநிலை வரம்பு
modalityBridgeCacheEnabled true
modalityBridgeCacheTtlMinutes 60 11440
modalityBridgeCacheMaxEntries 200 105000

தொலைநிலைப் படத்தை இயல்பாக்குதல் (self-loop விவரிப்பு/base64 fetch)

Bridge ஒரு தொலைநிலை படத்தைத் தானே பெறும்போது — Anthropic விவரிப்பு self-call மற்றும் claude-wire-format base64 மாற்றம் (ensureBase64ImagesForClaudeWire), இவை இரண்டும் visionBridgeHelpers.ts-இல் உள்ள fetchRemoteImageAsDataUri() வழியாகச் செயல்படுகின்றன — கிடைக்கும் data URI, vision-model கோரிக்கையில் உட்பொதிக்கப்படுவதற்கு முன் normalizeDataUri() (open-sse/utils/imageNormalize.ts) வழியாக அனுப்பப்படுகிறது. அளவுக்கு அதிகமான படங்கள் 2048px நீளமான விளிம்புக்கு குறைக்கப்படுகின்றன (OpenAI/Anthropic ஏற்கெனவே server-side-இல் பயன்படுத்தும் resize வரம்புடன் பொருந்துமாறு); இதனால் vision model காண்பதை மாற்றாமல் upload bytes/latency குறைக்கப்படுகிறது. Resizing, dynamic import வழியாக ஏற்றப்படும் sharp-ஐப் பயன்படுத்துகிறது: அதன் native binary ஏற்றப்படத் தவறும் platform-இல், normalizeDataUri() ஒருபோதும் exception-ஐ எழுப்பாது — அது அசல் bytes-ஐ மாற்றமின்றி அனுப்பும் fallback-ஐப் பயன்படுத்துகிறது; எனவே விவரிப்பு/base64-மாற்றப் பாதை எப்போதும் தொடர்ந்து செயல்படும். படமல்லாத bytes (decode செய்யக்கூடிய படத்தை வழங்காத fetch) கூட மாற்றமின்றி அனுப்பப்படுகின்றன. இந்த இயல்பாக்குதல், bridge தனது சொந்த self-call-க்காகப் பெறும் படங்களுக்கு மட்டுமே வரையறுக்கப்பட்டுள்ளது — caller-இன் raw passthrough payload-க்கு இது ஒருபோதும் பயன்படுத்தப்படாது; இது opt-in-only mutation கொள்கைக்கு (Hard Rule #20) இணங்குகிறது.

அமைப்புகளின் schema + migration

புதிய modalityBridge* keys, updateSettingsSchema-இல் (src/shared/validation/settingsSchemas.ts) Zod மூலம் சரிபார்க்கப்படுகின்றன: modalityBridgeVisionEnabled, modalityBridgeVisionMode, modalityBridgeVisionModel, modalityBridgeVisionTaskAware, modalityBridgeVisionPrompt, modalityBridgeVisionTimeout, modalityBridgeVisionMaxImages, modalityBridgeVisionMaxChars, modalityBridgeCache* மூன்றும், மேலும் Audio Bridge பயன்படுத்தும் modalityBridgeAudio* குழுவும் இதில் அடங்கும். Migration 141_modality_bridge_settings.sql, ஏற்கெனவே உள்ள legacy visionBridge* மதிப்புகளைப் பொருந்தும் புதிய keys-க்கு நகலெடுக்கிறது (idempotent; operator அமைத்த modalityBridge* மதிப்பை ஒருபோதும் மேலெழுதாது); ஒரு release cycle-க்கு legacy keys, read fallback ஆகத் தொடர்ந்து ஏற்கப்படுகின்றன.

வெளிப்படைத்தன்மை header + புள்ளிவிவரங்கள்

விவரிப்பு மூலம் மாற்றப்பட்ட responses பின்வருவதைத் தாங்குகின்றன: x-omniroute-modality-bridge: image->text;model=<visionModel>;parts=<n> (modalityBridge/bridgeStats.ts-இல் உள்ள buildModalityBridgeHeader() மூலம் உருவாக்கப்பட்டு, src/sse/handlers/chatHelpers.ts-இல் உள்ள withModalityBridgeHeader() மூலம் பதிக்கப்படுகிறது). மாற்றுப்பாதையில் அனுப்பப்பட்ட கோரிக்கைகளுக்கு 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, அனைத்து attempts-ஐயும் அல்லாமல் latencySamples-ஐத் தனது denominator ஆகப் பயன்படுத்துகிறது; timing இல்லாத operation, பூஜ்ஜிய-millisecond sample-ஐப் போலியாக உருவாக்காது. வெற்றிகரமான conversions-க்கான backward-compatible alias ஆக bridged தொடர்கிறது; தோல்வியடைந்த attempts அதை அதிகரிப்பதில்லை. வடிவமைப்பின்படி process restart ஆகும்போது counters reset ஆகின்றன (telemetry, accounting அல்ல).

Dashboard கட்டமைப்பு

பிரத்யேக டாஷ்போர்டு பக்கம் /dashboard/settings/modality-bridge ஆகும். URL வழியாக அணுகக்கூடிய அதன் Vision, Audio, மற்றும் Video தாவல்கள், tab மதிப்பை மாற்றும்போது வினவல் அளவுருக்களைத் தக்கவைத்துக்கொள்கின்றன. Vision தாவல், செயல்படுத்தல், பயன்முறை, மாதிரித் தேர்வு (தானியங்கி இயல்புநிலை உட்பட), பணி சார்ந்த prompt அமைப்பு, மேம்பட்ட காலக்கெடு/படம்/விளக்க நீளம்/cache வரம்புகள், runtime எண்ணிகள், மற்றும் பாதுகாக்கப்பட்ட மாதிரிக் கோரிக்கை ஆகியவற்றை வழங்குகிறது. Audio தாவலும் செயல்பாட்டில் உள்ளது: இது செயல்படுத்தல், Auto உடனான STT-மட்டும் மாதிரித் தேர்வி, காலக்கெடு/அதிகபட்சக் கிளிப் வரம்புகள், audio எண்ணிகள் மற்றும் ஓர் input_audio மாதிரிச் சோதனையை வழங்குகிறது. Video தாவல் செயல்படுகிறது: இது FFmpeg/ffprobe runtime நிலையைப் புகாரளிக்கிறது — நான்கு வெளிப்படையான UI நிலைகளில் ஒன்று (unknown என்பது ஆய்வு நடைபெற்றுக்கொண்டிருக்கும்போது அல்லது அதை நிறைவுசெய்ய முடியாதபோது, restricted என்பது loopback அல்லாத டாஷ்போர்டு host-இல் ஆய்வு client-side-இல் தவிர்க்கப்படும்போது, unavailable என்பது ஆய்வு செய்யப்பட்டு கிடைக்கவில்லை என்று உறுதிசெய்யப்பட்டவுடன், அல்லது FFmpeg/ffprobe பதிப்புகளுடன் available) — enable/model/frame/video/timeout வரம்புகளை நிலையாகச் சேமிக்கிறது, vision திறனுள்ள மாதிரிகளுக்கு மட்டும் மாதிரித் தேர்வியை வடிகட்டுகிறது, மேலும் video எண்ணிகளை வழங்குகிறது.

AI அமைப்புகளின் கீழிருந்த முந்தைய Vision Bridge அட்டை, புதிய பக்கத்திற்கான ஓர் இணக்கத்தன்மை இணைப்பாகும்; அது இனி படிவத்தின் இரண்டாவது நகலைக் கொண்டிருக்காது. Media Providers, ஏற்கனவே உள்ள Speech-to-Text playground-ஐ அகற்றாமல், Image-to-Text மற்றும் Speech-to-Text பணிப்பாய்வுகளையும் அவற்றுக்குரிய Modality Bridge தாவல்களுடன் இணைக்கிறது.

சுய-loop அனுமதி bypass: describe அழைப்பு OmniRoute-இன் சொந்த /v1 சுய-loop வழியாகச் செல்லும்போது (தரநிலையற்ற provider model), துணைக் கோரிக்கை x-omniroute-admission-bypass: internal என்பதை அனுப்புகிறது மற்றும் தீர்மானிக்கப்பட்ட சுய-loop நற்சான்றுடன் அங்கீகரிக்கப்படுகிறது — local mode-இல் உள்ள local sk_omniroute sentinel, அல்லது operator கட்டமைத்த OMNIROUTE_API_KEY / ROUTER_API_KEY env key (#1350); இதனால் REQUIRE_API_KEY=true deployment-களிலும் describe அழைப்பை இயக்க முடியும். அந்தத் துல்லியமான நற்சான்றுகளுக்கு மட்டுமே bypass ஏற்கப்படும்; எனவே வெளிப்புற client-கள் அனுமதியைத் தவிர்க்க இந்த header-ஐப் பயன்படுத்த முடியாது.

Legacy இயல்புநிலைகள் src/shared/constants/visionBridgeDefaults.ts-இல் உள்ளன; புதிய mode/task-aware/cache இயல்புநிலைகளும் settings resolver-உம் src/shared/constants/modalityBridgeDefaults.ts-இல் உள்ளன. சோதனைகள் போலியான getSettings மற்றும் callVisionModel செயலாக்கங்களைச் செலுத்துவதற்காக, guardrail ஒரு deps constructor விருப்பத்தை வழங்குகிறது.

Audio Bridge (audioBridge.ts) — Modality Bridge PR-3

Audio உள்ளீட்டை ஏற்கும் என்று அறியப்படாத இலக்கை audio கொண்ட chat கோரிக்கைகள் அடைவதற்கு முன் அவற்றை இடைமறிக்கிறது. இது chat கோரிக்கையை ஒருபோதும் வேறு வழிக்குத் திருப்பாது: ஏற்கனவே உள்ள OpenAI-இணக்கமான multipart endpoint வழியாக audio பகுதிகள் எழுத்துப்பெயர்க்கப்படுகின்றன; தேர்ந்தெடுக்கப்பட்ட chat model, உரை transcript-களுடன் தொடர்ந்து செயல்படுகிறது.

ஓட்டம்:

  1. getResolvedModelCapabilities() மூலம் supportsAudio-ஐத் தீர்மானிக்கவும். வெளிப்படையான provider-registry metadata முதலில் முன்னுரிமை பெறும்; அடுத்து static model metadata, பின்னர் ஒத்திசைக்கப்பட்ட modalities_input. audio இல்லாத, அறிவிக்கப்பட்ட input பட்டியல் false ஆகும்; எந்த capability ஆதாரமும் இல்லாவிட்டால் null ஆகும். false மற்றும் null இரண்டுமே பாதுகாப்பான bridge-ஐச் செயல்படுத்துகின்றன; true அதைத் தவிர்க்கிறது.
  2. modalityBridgeAudio* அமைப்புகளைத் தீர்மானித்து, பகிரப்பட்ட detectMediaParts() detector மூலம் ஒவ்வொரு message-இலிருந்தும் splice செய்யக்கூடிய top-level audio பகுதிகளைப் பிரித்தெடுக்கவும். ஆதரிக்கப்படும் wire வடிவங்கள் OpenAI input_audio, audio_url, மற்றும் source.media_type: "audio/*" ஆகும். Nested audio routing-க்காகக் கண்டறியப்படும், ஆனால் splice பாதையால் அகற்றப்படாது. பணி modalityBridgeAudioMaxClips மூலம் வரம்பிடப்படுகிறது; பின்னர் வரும் பகுதிகள் மாற்றமின்றி இருக்கும்.
  3. கட்டமைக்கப்பட்ட provider/model-ஐப் பின்பற்றவும், அல்லது selectAudioBridgeModel() நிலையான catalog வரிசையில் AUDIO_TRANSCRIPTION_PROVIDERS-ஐச் சுற்றி, பயன்படுத்தக்கூடிய செயலில் உள்ள provider நற்சான்றைக் கொண்ட முதல் model-ஐத் தேர்ந்தெடுக்க அனுமதிக்கவும்.
  4. callAudioTranscription() base64/data-URI audio-வை multipart file ஆக மாற்றுகிறது, அல்லது DNS pinning மற்றும் 25 MB வரம்புடன் public-only outbound guard வழியாக தொலைநிலை audio_url-ஐப் பதிவிறக்குகிறது. பின்னர் file மற்றும் தேர்ந்தெடுக்கப்பட்ட model-ஐ, resolveSelfLoopBearer() மூலம் அங்கீகரிக்கப்பட்ட local /v1/audio/transcriptions சுய-loop-க்கு POST செய்கிறது. ஏற்கனவே உள்ள transcription route, வழக்கமான credential lookup, cooldown/rate-limit கையாளுதல் மற்றும் provider dispatch ஆகியவற்றைச் செய்கிறது.
  5. வெற்றிகரமான அழைப்புகள் அவற்றின் பகுதிகளை [Audio N]: <transcript> என்பதால் மாற்றுகின்றன. அழைப்புகள் Promise.allSettled உடன் இயங்குகின்றன: தனிப்பட்ட தோல்வி, அந்த அசல் audio பகுதியைப் பாதுகாக்கிறது (#4012 ஒப்பந்தம்). ஒவ்வொரு அழைப்பும் தோல்வியடைந்து, இலக்கு supportsAudio === false என்பது நிரூபிக்கப்பட்டிருந்தால், பகுதிகள் [Audio N]: (unavailable — no STT provider connected) ஆகின்றன (#8430 ஒப்பந்தம்). அறியப்படாத இலக்குக்கு (null), அனைத்தும் தோல்வியடைந்த முடிவு மாற்றமின்றி இருக்கும். பயன்படுத்தக்கூடிய STT நற்சான்று இல்லாத, நிரூபிக்கப்பட்ட text-only இலக்கு, network அழைப்பை மேற்கொள்ளாமல் அதே வெளிப்படையான stub-ஐப் பெறுகிறது.

வெற்றிகரமான transcript-கள் process-wide Modality Bridge LRU/TTL cache-ஐப் பயன்படுத்துகின்றன. Key ஆனது audio reference, நிலையான audio-transcription operation label மற்றும் தேர்ந்தெடுக்கப்பட்ட STT model ஆகியவற்றை ஒருங்கிணைக்கிறது; தோல்விகள் ஒருபோதும் cache செய்யப்படாது. Audio முயற்சிகள் பகிரப்பட்ட bridged, cacheHits, failures, மற்றும் lastUsedAt எண்ணிகளைப் புதுப்பிக்கின்றன. மாற்றப்பட்ட response-கள் x-omniroute-modality-bridge: audio->text;model=<sttModel>;parts=<n> என்பதைக் கொண்டிருக்கும்; மாற்றப்படாத கோரிக்கைகள் Audio Bridge segment-ஐப் பெறாது.

Runtime அமைப்புகள் DB-backed மற்றும் Zod-validated ஆகும்:

Key இயல்புநிலை வரம்பு
modalityBridgeAudioEnabled true
modalityBridgeAudioModel "" Auto அல்லது STT ID
modalityBridgeAudioTimeout 60000 1000300000
modalityBridgeAudioMaxClips 3 110

பகிரப்பட்ட cache தொடர்ந்து 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 வரம்பிற்குள் பதிவிறக்கப்படுகின்றன; மாதிரி/செய்திகள்/ஃபிரேமிங் உறை 50 MiB என்ற பொது JSON கோரிக்கை அனுமதி வரம்பிற்குள் இருப்பதற்காக, இன்லைன் base64 வீடியோக்களுக்கு ஒவ்வொரு வீடியோவுக்கும் எச்சரிக்கையான 36 MiB குறியாக்கநீக்கம் செய்யப்பட்ட அளவு வரம்பு உள்ளது. ஒதுக்கீட்டிற்கு முன் இன்லைன் நீளமும் குறியாக்கநீக்கம் செய்யப்பட்ட அளவு மதிப்பீடுகளும் சரிபார்க்கப்படுகின்றன. தொடக்கத் தொலைநிலை URL மற்றும் ஒவ்வொரு திசைமாற்றத்திலும் HTTPS கட்டாயமாகும்; இதற்காக DNS பின்செய்தலுடன் ஏற்கனவே உள்ள பொது-மட்டும் வெளிச்செல்லும் பாதுகாப்பு பயன்படுத்தப்படுகிறது. பின்னர் பைட்டுகள் துல்லியமான உள் POST /api/modality-bridge/video/extract தரகர் எல்லையைக் கடக்கின்றன. அந்த வழித்தடம் LOCAL_ONLY மற்றும் SPAWN_CAPABLE ஆகிய இரண்டுமாகும்; ஒவ்வொரு செயல்முறைக்கும் அங்கீகரிக்கப்பட்ட, நம்பகமான loopback கோரிக்கைகளை மட்டுமே அது ஏற்கிறது, மேலும் URL, கோப்பு முறைமைப் பாதை, இயங்கக்கூடிய கோப்பு அல்லது மதிப்புருப் பட்டியலை ஒருபோதும் ஏற்காது. API உடல்-அளவு குழாயமைப்பும் கையாளுநரின் அதிகரிப்படிப் உடல் வாசிப்பானும் தனித்தனியாக 50 MiB தரகர் உள்ளீட்டு வரம்பைச் செயல்படுத்துகின்றன. அதன் வரம்பிடப்பட்ட வரிசை ஒரு நேரத்தில் ஒரு பிரித்தெடுப்பை இயக்குகிறது, நிலுவையில் நான்கு வேலைகளை அனுமதிக்கிறது, மேலும் நிலுவை உள்ளீட்டை 100 MiB-ஆக வரம்பிடுகிறது.

தரகருக்குள், ffprobe ஒரு தனிப்பட்ட உள்ளகக் கோப்பைப் படிக்கிறது; நிலையான வடிவ அனுமதிப்பட்டியல் playlist மற்றும் manifest வடிவங்களை விலக்குகிறது. அனுமதிக்கப்பட்ட MOV-குடும்பக் கொள்கலன்களுக்கு, வெளிப்புற MOV தரவுக் குறிப்புகள் இயல்பாகவே முடக்கப்பட்டிருக்கும்; நிலையான கட்டளை அவற்றைத் தெரிவுசெய்து இயக்குவதில்லை. ffprobe மற்றும் ffmpeg இரண்டும் file-மட்டும் நெறிமுறை அனுமதிப்பட்டியல், ஒரு thread, நிலையான மதிப்புரு அணிகள், shell இல்லாமை மற்றும் PATH-இலிருந்து தீர்மானிக்கப்படும் இயங்கக்கூடிய கோப்புகளைப் பயன்படுத்துகின்றன. இணைக்கப்பட்ட-பட அட்டை ஸ்ட்ரீம்கள் இயக்கக்கூடிய வேட்பாளர்கள் அல்ல. இயக்கக்கூடிய எல்லா ஸ்ட்ரீம்களும் வரம்புகளைப் பூர்த்தி செய்ய வேண்டும்; நிர்ணயகரமான மிகக் குறைந்த-index மாற்றுத் தேர்வுக்கு முன் வெளிப்படையான இயல்புநிலை ஸ்ட்ரீம் விரும்பப்படுகிறது. வீடியோக்கள் 600 வினாடிகள், ஒரு பரிமாணத்திற்கு 8,192 பிக்சல்கள் மற்றும் 33,554,432 மூலப் பிக்சல்கள் என வரம்பிடப்படுகின்றன. FFmpeg 116 நடுப்புள்ளி JPEG ஃபிரேம்களை மாதிரி எடுக்கிறது; சிறிய உள்ளீடுகளைப் பெரிதாக்காமல் நீளமான விளிம்பை அதிகபட்சம் 1,024 பிக்சல்களுக்கு அளவுக் குறைக்கிறது; மேலும் அது ஒருபோதும் URL-ஐப் பெறுவதில்லை. மாதிரியாக்கம் இயல்பாக uniform ஆகும். விருப்பத்தேர்வான scene_aware மற்றும் பரிசோதனைநிலை segment_aware கொள்கைகள் ஏற்கனவே சரிபார்க்கப்பட்ட உள்ளக ஸ்ட்ரீம் மீது ஒரு கூடுதல் நிலையான FFmpeg சுற்றைச் செயல்படுத்துகின்றன, வரம்பிடப்பட்ட showinfo காட்சி நேரமுத்திரைகளைத் தேர்ந்தெடுக்கின்றன, மேலும் கண்டறிவான் தோல்வி, காலக்கெடு, தவறான வடிவமைப்பிலான வெளியீடு அல்லது வெற்று வேட்பாளர் தொகுப்பு ஏற்பட்டால் அதே சீரான நடுப்புள்ளிகளுக்கு நிர்ணயகரமாக மீள்கின்றன. Segment-aware பயன்முறை, சரிபார்க்கப்பட்ட காட்சி இடைவெளிகளுக்கு விகிதாசாரமாக நடுப்புள்ளி மாதிரிகளை ஒதுக்குகிறது; segment-aware ஆதாரமும் மாற்றுத் தேர்வு நடத்தையும் கீழே விரிவாகக் கொடுக்கப்பட்டுள்ளன. ஒவ்வொரு கொள்கையிலும் தேர்வுக்குப் பிறகு கடுமையான 16-ஃபிரேம் வரம்பு பயன்படுத்தப்படுகிறது. ஒரு scene-aware கோரிக்கைக்கு ஒரு ஃபிரேம் மட்டுமே ஒதுக்கப்பட்டிருக்கும்போது, அது செயலில் உள்ள முழு-வீடியோ அல்லது கவனச் சாளரத்தின் சீரான நடுப்புள்ளியைப் பயன்படுத்தி policyEffective: uniform என அறிக்கையிடுகிறது: தேர்ந்தெடுக்கப்பட்ட ஒரே காட்சி ஃபிரேமால் நேரவரிசையின் இரு முனைகளையும் தக்கவைக்க முடியாது. அழைப்பாளர் விருப்பத்தேர்வாக வரையறுக்கப்பட்ட கவனச் சாளரத்தை (start/end வினாடிகள்) வழங்கலாம்; எல்லைகள் ஊடகத்தின் காலஅளவுக்குள் கட்டுப்படுத்தப்படுகின்றன, தலைகீழான அல்லது வரையறுக்கப்படாத சாளரங்கள் நிராகரிக்கப்படுகின்றன, மேலும் அனைத்து மாதிரியாக்கக் கொள்கைகளும் சீராக்கப்பட்ட இடைவெளிக்குள் மட்டுமே செயல்படுத்தப்படுகின்றன. விளைவாகக் கிடைக்கும் சாளரம் மாதிரியாக்க மெட்டாடேட்டாவிலும் நம்பகமற்ற விளக்க முன்னொட்டிலும் சேர்க்கப்படுகிறது; இதனால் கீழோட்ட மாதிரிகள் கவனம் செலுத்தப்பட்ட பகுதியை முழு நேரவரிசையிலிருந்து வேறுபடுத்த முடியும்.

சொற்பொருள் சார்ந்த தலைப்பு கவனம் என்பது தனியான, வெளிப்படையான அமைப்பாகும். இயல்புநிலை full பகுப்பாய்வுப் பயன்முறை ஏற்கனவே உள்ள ஃபிரேம் prompt-ஐப் பாதுகாக்கிறது மற்றும் கோரிக்கை உரையைத் தலைப்பு மாதிரிக்கு ஒருபோதும் அனுப்பாது. focused பயன்முறையில், அதே Chat அல்லது Responses கொள்கலனிலிருந்து பயனர் எழுதிய சமீபத்திய வெற்றில்லா text/input_text-ஐ மட்டும் bridge படிக்கிறது; அதை NFC-க்கு சீராக்குகிறது; கட்டுப்பாட்டு எழுத்துகளையும் இடைவெளிகளையும் சுருக்குகிறது; மேலும் அதை 500 Unicode code point-களுக்கு வரம்பிடுகிறது. வெற்று முடிவு துல்லியமான full prompt-க்கு மீள்கிறது. பயன்படுத்தக்கூடிய குறிப்பு ஒரு பிரத்யேக நம்பகமற்ற-பயனர்-சூழல் தொகுதியில் JSON ஆகத் தொடராக்கப்படுகிறது; அது கவனிக்கக்கூடிய விவரங்களுக்கு மட்டுமே முன்னுரிமை அளிக்கலாம். ஊடகத்தில் காணக்கூடிய அல்லது கேட்கக்கூடிய வழிமுறைகளைப் பின்பற்றக்கூடாது என்ற தனிப்பட்ட எச்சரிக்கையை அது மீற முடியாது. உரைசார் கவனம் ஒருபோதும் start/end-ஐ ஊகிப்பதில்லை அல்லது காலம் சார்ந்த மாதிரியாக்கியை மாற்றுவதில்லை.

FU-07 கட்டமைப்பு segment ஆதாரம்

segment_aware, ஏற்கனவே சரிபார்க்கப்பட்ட உள்ளக வீடியோ ஸ்ட்ரீம் மீது வரம்பிடப்பட்ட ஒரு முன்-பகுப்பாய்வுச் சுற்றைப் பயன்படுத்துகிறது. நிலையான filter சங்கிலி முதலில் அதிகபட்சம் 320 பிக்சல்கள் அகலத்திற்கு அளவிடுகிறது, காட்சி மாற்றங்களையும் உறைந்த இடைவெளிகளையும் கண்டறிகிறது, பின்னர் blur, சராசரி luma மற்றும் இடஞ்சார்/காலஞ்சார் தகவல்களுக்காக ஒரு வினாடிக்கு 1 ஃபிரேம் வீதம் மாதிரி எடுக்கிறது. இந்தச் சுற்று 600 கட்டமைப்பு மாதிரிகள், ஒரு FFmpeg/filter thread, அதே file-மட்டும் நெறிமுறை மற்றும் கொள்கலன் அனுமதிப்பட்டியல்கள், 1 MiB செயல்முறை-வெளியீட்டு வரம்பு, மேலும் தரகரின் பகிரப்பட்ட நிறுத்தம்/காலக்கெடுவுக்குள் அதிகபட்சம் 30 வினாடிகள் என வரம்பிடப்பட்டுள்ளது. கோரிக்கையிலிருந்து எந்தக் கட்டளை, filter, பாதை அல்லது URL-ஐயும் இது ஒருபோதும் ஏற்காது.

கட்டமைப்பு மதிப்புகள் நிர்ணயிக்கப்பட்ட மாதிரியாக்கச் சான்றுகள் மட்டுமே; அவை காணொளியின் பொருள்சார் புரிதல் அல்ல. அவை பொருள்கள், செயல்கள், தலைப்புரைகள், பேச்சு அல்லது பயனர் நோக்கம் ஆகியவற்றை ஊகிப்பதில்லை. காட்சி மற்றும் உறைநிலை எல்லைகள் துண்டுகளை உருவாக்குகின்றன; உறைநிலைப் பரவல், மங்கல், ஒளியளவு, இடஞ்சார் விவரம் மற்றும் காலம்சார் மாற்றம் ஆகியவை ஏற்கெனவே உள்ள 116 சட்டக ஒதுக்கீடு எவ்வாறு பகிரப்படுகிறது என்பதை மட்டுமே பாதிக்கின்றன. முழுமையாக உறைந்த ஒரு துண்டு ஒரு சட்டகத்திற்கு வரம்பிடப்படுகிறது; உறையாத துண்டுகள் மீதமுள்ள ஒதுக்கீட்டிற்காகப் போட்டியிடுகின்றன. சட்டகங்களின் எண்ணிக்கையைவிட எல்லைகளின் எண்ணிக்கை அதிகமாக இருக்கும்போது, தொடக்கத்தில் வேகமாக நிகழும் வெட்டுகள் நீண்ட இறுதித் துண்டை மறைக்க முடியாதவாறு காலவரிசை முழுவதும் சீரான உள்ளடக்கம் தக்கவைக்கப்படுகிறது. உறைநிலை எல்லையின் 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 வாழ்நிலைச் சுழற்சி என்பது தனியான, லூப்பேக்/டோக்கன்-அங்கீகரிக்கப்பட்ட தற்காலிகச் சேமிப்பு அடித்தளமாகும். ஒவ்வொரு செயல்பாட்டுக்கும் நியமப்படுத்தப்பட்ட ஒளிபுகா முதன்மை அடையாளமும் தேவை. ஒரு உற்பத்தி அழைப்பாளர் இயக்கப்படுவதற்கு முன், அது அங்கீகரிக்கப்பட்ட குத்தகையாளரிலிருந்து அந்த அடையாளத்தைப் பெற வேண்டும்; கிளையன்ட் தேர்ந்தெடுத்த மதிப்பை ஒருபோதும் முன்னனுப்பக் கூடாது. தற்காலிகச் சேமிப்புச் சாவிகள் அந்த முதன்மை அடையாளத்தை நியமப்படுத்தப்பட்ட அமர்வு மற்றும் வீடியோ-குறிப்பு அடையாளங்களுடன் பிணைத்து, அவற்றின் 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 பொருத்தமான பார்வைத் திறன் கொண்ட மாதிரியைத் தேர்ந்தெடுக்கிறது. வெற்றிகரமான விளக்கவுரைகள் அசல் பகுதியை நிலையான [Video description: முன்னொட்டுடன் மாற்றுகின்றன; இது அந்த உரையை நம்பகமற்ற, ஊடகத்திலிருந்து பெறப்பட்ட அவதானிப்பாகவும் குறிக்கிறது மற்றும் ஊடகத்தில் காணப்படும் வழிமுறைகளைப் பின்பற்ற வேண்டாம் என்று downstream மாதிரிகளுக்குத் தெரிவிக்கிறது. ஃப்ரேம்-விளக்கவுரை cache விசைகளில் JPEG பைட்டுகள், prompt, timestamp, மற்றும் பயன்படுத்தப்படும் மாதிரி ஆகியவை அடங்கும்; வெற்றிகரமான விளக்கவுரைகள் மட்டுமே cache செய்யப்படுகின்றன. Cache பதிவுகள் fallback மாதிரி உட்பட, உண்மையில் வெற்றிகரமாக உருவாக்கிய producer மாதிரியைத் தக்கவைக்கின்றன; வெவ்வேறு ஃப்ரேம்கள் வெவ்வேறு மாதிரிகளால் உருவாக்கப்பட்டிருந்தால் bridge mixed எனத் தெரிவிக்கிறது. Cache hit, கோரப்பட்ட routing திட்டமாக மீண்டும் label செய்யாமல், அந்த producer அடையாளத்தையே மீண்டும் பயன்படுத்துகிறது. முழு-வீடியோ முடிவு cache, வெளியீட்டை மாற்றும் ஒவ்வொரு உள்ளீட்டையும் அடிப்படையாகக் கொண்டு விசையிடப்படுகிறது — prompt, பயன்படுத்தப்படும் மாதிரி, sampling policy, frame count, semantic analysis mode, இயல்பாக்கப்பட்ட focus hint-இன் SHA-256 fingerprint, focus window, transcript, audioTranscript, மற்றும் contact-sheet flag — எனவே இவற்றில் எந்தவொரு பரிமாணத்தையும் மாற்றுவது cache miss ஆகும்; பழைய முடிவு ஒருபோதும் மீண்டும் பயன்படுத்தப்படாது. Visual dedup policy version, threshold, மற்றும் வரம்பிடப்பட்ட candidate-frame count ஆகியவையும் result-cache விசையிலும் metadata-விலும் வெளிப்படையாகச் சேர்க்கப்படுகின்றன; எனவே policy மாற்றம் பழைய முழு-வீடியோ விளக்கத்தை மீண்டும் பயன்படுத்த முடியாது. Result-cache v4 metadata, mode மற்றும் fingerprint-ஐ வைத்திருக்கும்; raw user task-ஐ ஒருபோதும் வைத்திருக்காது. Guardrail metadata, கோரப்பட்ட மற்றும் பயன்படுத்தப்பட்ட analysis mode-கள் இரண்டையும் தெரிவிக்கிறது; பயன்படுத்தக்கூடிய user text இல்லாமல் கோரப்பட்ட focused mode, நடைமுறையில் full எனத் தெரிவிக்கப்படுகிறது.

Guardrail ஆதரிக்கப்படும் ஒவ்வொரு video part-ஐயும் பிரித்தெடுக்கிறது, ஆனால் modalityBridgeVideoMaxVideos எண்ணிக்கையை விட அதிகமாக விளக்காது. ஒரு target-க்கு supportsVideo === false என்பது உறுதிசெய்யப்பட்டிருந்தால், தோல்வியடைந்த மற்றும் வரம்பை மீறிய வீடியோக்கள் வெளிப்படையான பாதுகாப்பான உரை markers-ஆக மாற்றப்படுகின்றன; எனவே எந்த raw video-வும் எஞ்சாது. திறன் தெரியாதபோது, அந்தப் பகுதிகள் மாற்றமின்றி விடப்படுகின்றன. supportsVideo === true கொண்ட targets bridge-ஐத் தவிர்க்கின்றன. Client request abort signal, download, broker queue, subprocesses, மற்றும் caption calls முழுவதும் பரவுகிறது; abort ஏற்பட்டால் வீடியோக்களுக்கு இடையில் செயலாக்கம் நிறுத்தப்படுகிறது, மேலும் raw media-ஐ அனுமதிக்கும் வகையில் ஒருபோதும் fail open ஆகாது.

Runtime அமைப்புகள் DB-ல் சேமிக்கப்பட்டு Zod மூலம் சரிபார்க்கப்படுகின்றன:

விசை இயல்புநிலை வரம்பு / செயல்பாடு
modalityBridgeVideoEnabled false விருப்பமான runtime, opt-in
modalityBridgeVideoAnalysisMode "full" full பொதுவான விளக்கவுரைகளைப் பாதுகாக்கிறது; focused வரம்பிடப்பட்ட, நம்பகமற்ற சமீபத்திய-user context-ஐப் பயன்படுத்துகிறது
modalityBridgeVideoModel "" Vision Bridge மாதிரியைப் பெறுகிறது
modalityBridgeVideoFrameCount 8 116
modalityBridgeVideoSamplingPolicy "uniform" uniform, scene_aware, அல்லது விகிதாசார segment_aware; detector தோல்வியடைந்தால் uniform-க்கு fallback ஆகும்
modalityBridgeVideoMaxVideos 1 14
modalityBridgeVideoTimeout 120000 1000120000 ms

120 வினாடிகளை விட அதிகமான legacy persisted Video timeout மதிப்புகள் broker deadline-க்கு clamp செய்யப்படுகின்றன; அந்த வரம்பை மீறும் புதிய settings writes நிராகரிக்கப்படுகின்றன. GET /api/modality-bridge/video/runtime, authentication அல்லது runtime probing-க்கு முன் நம்பகமான stamped loopback locality-ஐக் கோருகிறது; அதன் பின்னர் management auth-ஐக் கோருகிறது. இது available, சுத்திகரிக்கப்பட்ட FFmpeg/ffprobe versions, மற்றும் runtime கிடைக்காதபோது ஒரு நிலையான காரணம் ஆகியவற்றை மட்டுமே வழங்குகிறது. அக extraction endpoint ஒரு பொது upload API அல்ல: queue saturation 503 மற்றும் Retry-After-ஐ வழங்குகிறது, caller disconnect 499-ஐ வழங்குகிறது, மேலும் நிலையான broker deadline 504-ஐ வழங்குகிறது. மாற்றப்பட்ட responses, Vision அல்லது Audio segments-ஐ அகற்றாமல் மைய x-omniroute-modality-bridge header-க்கு video->text;model=<visionModel>;parts=<videos>-ஐச் சேர்க்கின்றன.

PII மறைப்பான் (piiMasker.ts)

இரண்டு stages-லும் இயங்குகிறது.

  • preCall payload-ஐ clone செய்து, system, messages, input, மற்றும் prompt (plain string items உட்பட) வழியாகச் சென்று, string content/text fields-க்கு (@/shared/utils/inputSanitizer-இலிருந்து) processPII()-ஐப் பயன்படுத்துகிறது. PII_REDACTION_ENABLED=true ஆக இருக்கும்போது, கண்டறியப்பட்ட PII outbound payload-ல் மறைக்கப்படுகிறது. இது INPUT_SANITIZER_MODE-இலிருந்து சுயாதீனமானது (அது prompt-injection policy-ஐ மட்டுமே கட்டுப்படுத்துகிறது). Redaction முடக்கப்பட்டிருக்கும்போது, content-ஐ மாற்றி எழுதாமல் detection counts பதிவு செய்யப்படுகின்றன.
  • postCall response-ஐ deep-clone செய்து, sanitizePIIResponse() மற்றும் Responses-API-shape masker (maskResponsesOutputoutput_text மற்றும் output[].content[].text ஆகியவற்றை உள்ளடக்குகிறது) ஆகியவற்றை இயக்குகிறது. ஏதேனும் redaction ஏற்பட்டால், மாற்றப்பட்ட response அசலை மாற்றீடு செய்கிறது.

Guardrail ஒருபோதும் block செய்யாது; அது annotation (meta.detections, meta.redacted) அல்லது rewriting மட்டுமே செய்கிறது.

Prompt Injection (promptInjection.ts)

User வழங்கிய content-இல் உள்ள தாக்குதல் நோக்கமுள்ள கட்டமைப்புகளைக் கண்டறிந்து, கட்டமைக்கப்பட்ட policy-ஐ அமல்படுத்துகிறது. செயல்பாடு environment variables மற்றும் constructor options மூலம் கட்டுப்படுத்தப்படுகிறது:

அமைப்பு சூழல் மாறி இயல்புநிலை விளைவு
இயக்கப்பட்டது 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 தடுப்பதற்குத் தேவையான குறைந்தபட்ச தீவிரம். இயல்புநிலையில் Medium கண்காணிப்புக்கு மட்டுமே உரியது.

பயன்முறை முன்னுரிமை (getMode): அழைப்பவரின் options.modeINJECTION_GUARD_MODE DB அம்சக் கொடி மேலெழுதல் (Dashboard → Settings → Feature Flags) → INJECTION_GUARD_MODE சூழல் மாறி → INPUT_SANITIZER_MODE சூழல் மாறி → warn. எனவே Dashboard மேலெழுதல் சூழல் மாறிகளைவிட முன்னுரிமை பெறுகிறது; ஆகவே Feature Flags UI இயங்கிக்கொண்டிருக்கும் பாதுகாப்புக் கட்டுப்பாட்டை நேரடியாகக் கட்டுப்படுத்துகிறது (மறுதொடக்கம் தேவையில்லை). DB வாசிப்பு தோல்வி-பாதுகாப்பானது: அதில் பிழை ஏற்பட்டால், பாதுகாப்புக் கட்டுப்பாடு சூழல் மாறி அடிப்படையிலான நடத்தைக்குத் திரும்பும்; மேலும் எந்த மேலெழுதலும் அமைக்கப்படாதபோது, நடத்தை சூழல் மாறி மட்டும் கொண்டு தீர்மானிக்கப்படுவதற்கு ஒத்ததாக இருக்கும்.

கண்டறிதல் மூலங்கள்:

  1. @/shared/utils/inputSanitizer-இலிருந்து sanitizeRequest() (செயலாக்கத் தொடரின் பிற இடங்களிலும் பயன்படுத்தப்படும் பகிரப்பட்ட கண்டறிவான் தொகுப்பு).
  2. உள்ளமைக்கப்பட்ட DEFAULT_GUARD_PATTERNS (தற்போது system_override_inline மற்றும் markdown_system_block; இரண்டும் high தீவிரம் கொண்டவை).
  3. உருவாக்கி விருப்பங்கள் வழியாக வழங்கப்படும் விருப்பத் தேர்வான customPatterns (சரங்கள், regex, அல்லது { 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 தரவுச் சுமைகளின் regex CPU/GC பயன்பாட்டைக் கட்டுப்படுத்துகிறது (ஒப்பிடுக: #3932, #4041).

நற்சான்று மறைப்பான் (credentialMasker.ts)

இரண்டு கட்டங்களிலும், இயல்புநிலைச் சங்கிலியில் கடைசியாக (முன்னுரிமை 95) இயங்குகிறது. வெளியேறும் தரவுச் சுமையிலுள்ள (செய்தி உள்ளடக்கம், கருவி-அழைப்பு அளவுருக்கள், கருவி முடிவுகள்) நன்கு அறியப்பட்ட API-key / ரகசிய-token வடிவங்களை மற்றும் வழங்குநரின் பதிலையும் மறைக்கிறது. இதனால் ஒரு தூண்டலில் ஒட்டப்பட்ட நற்சான்று (அல்லது கருவி முடிவால் மீண்டும் வெளியிடப்பட்டது) மேல்நிலை வழங்குநருக்கோ அல்லது மீண்டும் வாடிக்கையாளருக்கோ கசியாது.

  • விருப்பத் தேர்வால் மட்டும் இயக்கப்படும், PII மறைப்பின் அதே மரபைப் பின்பற்றுகிறது (கடுமையான விதி #20-க்கு அருகிலானது): settings.credentialRedactionEnabled === true அல்லது CREDENTIAL_REDACTION_ENABLED=true ஆக இல்லாவிட்டால் முடக்கப்பட்டிருக்கும். இது முடக்கப்பட்டிருக்கும்போது, பாதுகாப்புக் கட்டுப்பாடு எந்தச் செயலையும் செய்யாது — அது ஒருபோதும் தடுக்காது, மீண்டும் எழுதவும் செய்யாது.
  • redactCredentials() முழு தரவுச் சுமை/பதில் மரத்தையும் travers செய்கிறது (walkValue(), prototype-pollution-இலிருந்து பாதுகாப்பானது, WeakSet வழியாக சுழற்சிகளிலிருந்து பாதுகாப்பானது) மற்றும் பொருத்தங்களுக்குப் பதிலாக [REDACTED:<type>] இடநிரப்பியை வைக்கிறது; உண்மையில் மாற்றப்பட்ட கிளைகளை மட்டுமே நகலெடுக்கிறது.
  • CREDENTIAL_PATTERNS ஆனது LLM வழங்குநர் சாவிகள் (OpenAI, OpenAI-proj, Anthropic, Google, Hugging Face, Replicate), VCS/SaaS token-கள் (GitHub, Slack, Linear, Notion, npm, Postman, Discord), கட்டணச் சாவிகள் (Stripe, Square), cloud சாவிகள் (AWS access key, Twilio, SendGrid, Mailgun), தனிப்பட்ட சாவிகள் / JWT-கள், நற்சான்றுகளைக் கொண்ட இணைப்புச் சரங்கள் (mongodb://user:pass@..., போன்றவை), மற்றும் பொதுவான Authorization/x-api-key/api-key/apikey தலைப்பு-மதிப்பு வடிவம் ஆகியவற்றை உள்ளடக்குகிறது. தலைப்பு வடிவிலான சாவிகள் (authorization, x-api-key, api-key, apikey) பொதுவான உரை regex வழியாக அல்லாமல், கட்டமைப்பு ரீதியாக மறைக்கப்படுகின்றன (மதிப்பு மட்டும்; 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;
}

ஒரு guardrail, void, {}, அல்லது { block: false } ஆகியவற்றில் ஒன்றைத் திருப்பி அனுப்புவதன் மூலம் "மாற்றம் இல்லை" என்பதைக் குறிக்கிறது. modifiedPayload/modifiedResponse-ஐத் திருப்பி அனுப்புவது, அடுத்தடுத்த guardrail-களுக்குச் சங்கிலி வழியாகச் செல்லும் மதிப்பை மாற்றுகிறது. signal?: AbortSignal, அழைப்பவரின் வாழ்க்கைச் சுழற்சியை guardrail-களுக்குக் கொண்டு செல்கிறது. ஒரு கோரிக்கை கைவிடப்படுவது திட்டமிட்ட fail-open விதிவிலக்காகும்: இலக்கு மூல ஊடகத்தை ஆதரிக்காது என்று அறியப்பட்டிருந்தால், media bridge-கள் அதை மீட்டமைக்காமல் பணியை நிறுத்தி சுத்தப்படுத்துகின்றன.

பதிவகம் (registry.ts)

singleton guardrailRegistry பின்வருவனவற்றை வெளிப்படுத்துகிறது:

  • register(guardrail) — ஒரு guardrail-ஐச் சேர்க்கிறது (அல்லது இயல்பாக்கப்பட்ட பெயரின் அடிப்படையில் மாற்றுகிறது) மற்றும் ஏறுவரிசை priority அடிப்படையில் மீண்டும் வரிசைப்படுத்துகிறது.
  • clear() / list() — நிர்வாக உதவிச் செயல்பாடுகள்.
  • runPreCallHooks(payload, context) — செயலில் உள்ள guardrail-களை வரிசையாகச் செயல்படுத்தி, modifiedPayload வழியாக payload-ஐ அனுப்பி, முதல் block: true-இல் நிறுத்துகிறது.
  • runPostCallHooks(response, context) — பதில் பக்கத்தில் அதே செயலோட்டத்தைப் பயன்படுத்துகிறது.
  • resetGuardrailsForTests({ registerDefaults }) — நிலையை அழித்து, சுத்தமான சோதனைத் தனிமைப்படுத்தலுக்காக விருப்பப்பட்டால் இயல்புநிலைகளை மீண்டும் பதிவு செய்கிறது.

இரண்டு இயக்கிகளும் { blocked, payload|response, results, guardrail?, message? }-ஐத் திருப்பி அனுப்புகின்றன; இதில் results என்பது ஒவ்வொரு guardrail-க்கும் உரிய blocked, skipped, modified, error, மற்றும் meta புலங்களை உள்ளடக்கிய GuardrailExecutionResult பதிவுகளின் வரிசையாகும்; இது தடமறிதலுக்குப் பயனுள்ளதாக இருக்கும்.

ஒவ்வொரு கோரிக்கைக்கும் Guardrail-களை முடக்குதல்

resolveDisabledGuardrails({ apiKeyInfo, body, headers }), தற்போதைய கோரிக்கைக்குத் தவிர்க்கப்பட வேண்டிய guardrail பெயர்களின் நகல் நீக்கப்பட்ட பட்டியலைத் தொகுக்கிறது. மூலங்கள் (அனைத்தும் விருப்பமானவை, அனைத்தும் ஒன்றிணைக்கப்படும்):

  • apiKeyInfo.disabledGuardrails
  • கோரிக்கை body-யின் disabledGuardrails (மேல்நிலை)
  • கோரிக்கை body-யின் metadata.disabledGuardrails
  • Header x-omniroute-disabled-guardrails (அல்லது பழைய x-disabled-guardrails)

மதிப்புகள் string-களின் array-களாகவோ அல்லது காற்புள்ளியால் பிரிக்கப்பட்ட string ஆகவோ இருக்கலாம்; பெயர்கள் lowercase kebab-case-க்கு இயல்பாக்கப்படுகின்றன (pii_maskerpii-masker). முடிவு context.disabledGuardrails வழியாகப் பதிவகத்திற்கு அனுப்பப்படுகிறது; அது பொருந்தும் guardrail-களைத் தவிர்க்கிறது (results-இல் skipped: true).

செயல்படுத்தும் வரிசை

src/sse/handlers/chat.ts மற்றும் open-sse/handlers/chatCore.ts வழியாகச் செல்லும் ஒவ்வொரு கோரிக்கைக்கும்:

  1. resolveDisabledGuardrails(...) ஆனது API விசை, உடல் மற்றும் தலைப்புகளிலிருந்து தவிர்ப்புப் பட்டியலை உருவாக்குகிறது.
  2. guardrailRegistry.runPreCallHooks(body, ctx) ஆனது முன்னுரிமையின் ஏறுவரிசையில் பாதுகாப்புக் கட்டுப்பாடுகளை இயக்குகிறது:
    • முடக்கப்பட்ட பாதுகாப்புக் கட்டுப்பாடுகள் skipped எனப் பதிவு செய்யப்படுகின்றன.
    • ஒவ்வொரு பாதுகாப்புக் கட்டுப்பாட்டின் preCall ஆனதும் modifiedPayload மூலம் தரவுச்சுமையை மாற்றி எழுதலாம்.
    • முதலில் வரும் block: true, சங்கிலியின் செயல்பாட்டை உடனடியாக நிறுத்துகிறது; மேலும் கையாளுநர் பாதுகாப்புக் கட்டுப்பாட்டு நிராகரிப்புப் பதிலை வழங்குகிறார்.
  3. மாற்றி எழுதப்பட்டிருக்கக்கூடிய தரவுச்சுமை, கூட்டு வழிப்படுத்தல் மற்றும் அப்ஸ்ட்ரீம் அனுப்புதலுக்குள் செல்கிறது.
  4. பதில் உருவாக்கப்பட்ட பிறகு, 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 உட்செலுத்தல் பாதுகாப்பிற்கான பயன்முறை; இது env vars-ஐ மேலெழுதும் 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 பாதுகாப்புக் கட்டுப்பாடுகள் env vars-இலிருந்து அல்லாமல், 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());

படிகள்:

  1. BaseGuardrail-ஐ நீட்டித்து src/lib/guardrails/myGuardrail.ts-ஐ உருவாக்கவும்.
  2. preCall மற்றும்/அல்லது postCall-ஐச் செயல்படுத்தவும்.
  3. இறக்குமதி செய்யும் நேரத்தில் பதிவுசெய்யவும் (registerDefaultGuardrails-இலிருந்து சேர்க்கவும்) அல்லது இயக்க நேரத்தில் guardrailRegistry.register(...)-ஐ அழைக்கவும் — அதே இயல்பாக்கப்பட்ட பெயரைக் கொண்ட முந்தைய பாதுகாப்புத் தடுப்பை பதிவகம் மாற்றிவிடும்.
  4. 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 — prompt-injection மற்றும் PII மறைத்தலுக்கு ஆதாரமாகச் செயல்படும் பகிரப்பட்ட கண்டறிதல் கருவி
  • src/shared/constants/visionBridgeDefaults.ts — Vision Bridge இயல்புநிலைகள் மற்றும் கட்டாய-bridge மாதிரிப் பட்டியல்
  • src/shared/constants/modalityBridgeDefaults.ts — பகிரப்பட்ட Vision/Audio இயக்கநேர இயல்புநிலைகள்
  • docs/architecture/RESILIENCE_GUIDE.md — செங்குத்தான அடுக்கு (circuit breaker, cooldowns)
  • docs/reference/ENVIRONMENT.md — முழுமையான சூழல் மாறி மேற்கோள்

Injection-guard வழித்தட உள்ளடக்கம் & red-team (கட்டம் 8 · தொகுதி D)

பயனர் prompts-ஐ ஏற்கும் அனைத்து வழித்தடங்களையும் injection-guard (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 ஆகியவற்றை உள்ளடக்குகிறது.

Red-team (இரவுதோறும், nightly-llm-security.yml): INJECTION_GUARD_MODE=block நிலையில் ஒவ்வொரு வழித்தடமும் OWASP-LLM corpus-ஐத் தடுக்கிறது என்பதை promptfoo சரிபார்க்கிறது; garak சோதனைத் தேடல்களை இயக்குகிறது (ரகசியம் இல்லாவிட்டால் தவிர்க்கும்). ஒருமைத்தன்மைக்காக moderations சேர்க்கப்பட்டுள்ளது — block-mode-இல் உள்ள இயக்குநர்கள் resolveDisabledGuardrails வழியாக இதற்கு விலக்கு அளிக்கலாம்.

இரவுநேர பணிப்பாய்வு (.github/workflows/nightly-llm-security.yml, cron + கைமுறை dispatch) இரண்டு பணிகளைக் கொண்டுள்ளது:

  • promptfoo-guard (தடுக்கும்)INJECTION_GUARD_MODE=block உடன் promptfoo eval -c promptfooconfig.yaml-ஐ இயக்குகிறது. ஒவ்வொரு எதிர்மறைச் சோதனை நிலையும் (எ.கா. "முந்தைய அனைத்து அறிவுறுத்தல்களையும் புறக்கணிக்கவும்…", DAN-பாணி jailbreaks), பதிலில் error.code === "SECURITY_001" இருப்பதை உறுதிசெய்கிறது; அதாவது, பாதுகாப்புத் தடுப்பு உண்மையிலேயே கோரிக்கையை நிராகரித்தது.
  • garak (ஆலோசனை சார்ந்தது) — உள்ளக OmniRoute instance-க்கு (http://localhost:20128/v1) எதிராக garak --probes promptinject,dan,leakreplay-ஐ இயக்குகிறது. இது வழங்குநர் ரகசியத்தை (PROMPTFOO_PROVIDER_KEY) சார்ந்தது; ரகசியம் இல்லாவிட்டால் சீராகத் தவிர்க்கப்பட்டு || true பின்னொட்டுடன் இயக்கப்படும், எனவே CI-ஐத் தோல்வியடையச் செய்யாமல் அறிக்கையிடும்.

பாதுகாப்புத் தடுப்பு உதவிக்கருவியின் (createInjectionGuard / withInjectionGuard) உள்ளடக்கம் prompt கொண்ட ஒவ்வொரு /v1 வழித்தடத்தையும் உள்ளடக்குகிறது; prompt உரை src/shared/utils/inputSanitizer.ts-இல் உள்ள extractMessageContents() மூலம் messages/input/prompt/query+documents/instructions/system ஆகியவற்றிலிருந்து பெறப்படுகிறது.