მულტიმოდალური შინაარსის დამუშავება
PRX მხარს უჭერს მულტიმოდალურ შინაარსს -- გამოსახულებებს, აუდიოსა და ვიდეოს -- მის არხებსა და LLM პროვაიდერებში. მულტიმოდალური ქვესისტემა ამუშავებს შინაარსის ტიპის ამოცნობას, ფორმატის ტრანსკოდირებას, ზომის აღსრულებასა და შესაძლებლობების მოლაპარაკებას არხებსა და პროვაიდერებს შორის.
მიმოხილვა
როდესაც მომხმარებელი მედია დანართს (ფოტო, ხმოვანი შეტყობინება, დოკუმენტი) აგზავნის არხით, მულტიმოდალური პაიპლაინი:
- ამოიცნობს შინაარსის ტიპს მაგიური ბაიტებისა და ფაილის გაფართოების მიხედვით
- ამოწმებს შინაარსს ზომისა და ფორმატის შეზღუდვების მიხედვით
- ტრანსკოდირებს შინაარსს, თუ სამიზნე პროვაიდერი წყარო ფორმატს მხარს არ უჭერს
- აგზავნის შინაარსს LLM პროვაიდერზე საუბრის კონტექსტის ნაწილის სახით
- ამუშავებს მედიას პასუხში, თუ პროვაიდერი გამოსახულებებს ან აუდიოს გენერირებს
არხის შეყვანა პროვაიდერის გამოტანა
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ შინაარსის │ │ პასუხის │
│ ტიპის ამოცნ.│ │ მედია │
└──────┬───────┘ └──────┬───────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ ვალიდაცია │ │ ტრანსკოდირება│
│ & ლიმიტები │ │ (საჭიროებისას)│
└──────┬───────┘ └──────┬───────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ ტრანსკოდირება│ │ არხით │
│ (საჭიროებისას)│ │ მიწოდება │
└──────┬───────┘ └──────────────┘
│
▼
┌──────────────┐
│ პროვაიდერზე │
│ გაგზავნა │
└──────────────┘მხარდაჭერილი შინაარსის ტიპები
გამოსახულებები
| ფორმატი | ამოცნობა | პროვაიდერზე გაგზავნა | პროვაიდერიდან მიღება |
|---|---|---|---|
| JPEG | მაგიური ბაიტები FF D8 FF | დიახ | დიახ |
| PNG | მაგიური ბაიტები 89 50 4E 47 | დიახ | დიახ |
| GIF | მაგიური ბაიტები 47 49 46 | დიახ (პირველი ფრეიმი) | არა |
| WebP | RIFF ჰედერი + WEBP | დიახ | დიახ |
| BMP | მაგიური ბაიტები 42 4D | ტრანსკოდირდება PNG-ში | არა |
| TIFF | მაგიური ბაიტები 49 49 ან 4D 4D | ტრანსკოდირდება PNG-ში | არა |
| SVG | XML ამოცნობა | რასტერიზდება PNG-ში | არა |
აუდიო
| ფორმატი | ამოცნობა | ტრანსკრიფცია | პროვაიდერის შეყვანა |
|---|---|---|---|
| OGG/Opus | OGG ჰედერი | დიახ (STT-ით) | ტრანსკრიბირებული ტექსტი |
| MP3 | ID3/sync ჰედერი | დიახ (STT-ით) | ტრანსკრიბირებული ტექსტი |
| WAV | RIFF + WAVE | დიახ (STT-ით) | ტრანსკრიბირებული ტექსტი |
| M4A/AAC | ftyp box | დიახ (STT-ით) | ტრანსკრიბირებული ტექსტი |
| WebM | EBML ჰედერი | დიახ (STT-ით) | ტრანსკრიბირებული ტექსტი |
ვიდეო
| ფორმატი | ამოცნობა | დამუშავება |
|---|---|---|
| MP4 | ftyp box | საკვანძო ფრეიმების + აუდიო ტრეკის ამოღება |
| WebM | EBML ჰედერი | საკვანძო ფრეიმების + აუდიო ტრეკის ამოღება |
| MOV | ftyp box | საკვანძო ფრეიმების + აუდიო ტრეკის ამოღება |
ვიდეო ფაილები იშლება საკვანძო ფრეიმ გამოსახულებებად და აუდიო ტრეკად. საკვანძო ფრეიმები იგზავნება როგორც გამოსახულებები, ხოლო აუდიო ტრანსკრიბირდება.
შინაარსის ტიპის ამოცნობა
ამოცნობა ორ-საფეხურიან მიდგომას იყენებს:
- მაგიური ბაიტები -- ფაილის პირველი 16 ბაიტი შემოწმდება ცნობილ ხელმოწერებთან
- ფაილის გაფართოება -- თუ მაგიური ბაიტები არასაკმარისია, ფაილის გაფართოება გამოიყენება როგორც სარეზერვო
- MIME ტიპის ჰედერი -- HTTP-ით მიღებული შინაარსისთვის,
Content-Typeჰედერი გამოიკითხება
ამოცნობის შედეგი განსაზღვრავს, რომელი დამუშავების პაიპლაინი ამუშავებს შინაარსს.
კონფიგურაცია
[multimodal]
enabled = true
[multimodal.images]
max_size_bytes = 20_971_520 # 20 MB
max_resolution = "4096x4096" # მაქსიმალური სიგანე x სიმაღლე
auto_resize = true # max_resolution-ის გადამეტებული გამოსახულებების ავტომატური ზომის შეცვლა
resize_quality = 85 # JPEG ხარისხი ზომაშეცვლილი გამოსახულებებისთვის (1-100)
strip_exif = true # EXIF მეტამონაცემების წაშლა კონფიდენციალურობისთვის
[multimodal.audio]
max_size_bytes = 26_214_400 # 25 MB
max_duration_secs = 300 # 5 წუთი
stt_provider = "whisper" # "whisper", "deepgram", ან "provider" (LLM პროვაიდერის STT-ის გამოყენება)
stt_model = "whisper-1"
stt_language = "auto" # "auto" ენის ამოცნობისთვის, ან ISO 639-1 კოდი
[multimodal.video]
max_size_bytes = 104_857_600 # 100 MB
max_duration_secs = 120 # 2 წუთი
keyframe_interval_secs = 5 # ერთი საკვანძო ფრეიმის ამოღება ყოველ 5 წამში
max_keyframes = 20 # ამოსაღები საკვანძო ფრეიმების მაქსიმალური რაოდენობა
extract_audio = true # აუდიო ტრეკის ტრანსკრიბირებაკონფიგურაციის მითითება
გამოსახულებები
| ველი | ტიპი | ნაგულისხმევი | აღწერა |
|---|---|---|---|
max_size_bytes | u64 | 20971520 | გამოსახულების ფაილის მაქსიმალური ზომა (20 MB) |
max_resolution | String | "4096x4096" | გამოსახულების მაქსიმალური ზომები (WxH) |
auto_resize | bool | true | ზომაგადაჭარბებული გამოსახულებების ავტომატური ზომის შეცვლა |
resize_quality | u8 | 85 | JPEG ხარისხი ზომაშეცვლილი გამოსახულებებისთვის (1--100) |
strip_exif | bool | true | EXIF მეტამონაცემების წაშლა გამოსახულებებიდან |
აუდიო
| ველი | ტიპი | ნაგულისხმევი | აღწერა |
|---|---|---|---|
max_size_bytes | u64 | 26214400 | აუდიო ფაილის მაქსიმალური ზომა (25 MB) |
max_duration_secs | u64 | 300 | აუდიოს მაქსიმალური ხანგრძლივობა (5 წუთი) |
stt_provider | String | "whisper" | მეტყველებიდან ტექსტში პროვაიდერი |
stt_model | String | "whisper-1" | STT მოდელის სახელი |
stt_language | String | "auto" | ენის მინიშნება ტრანსკრიფციისთვის |
ვიდეო
| ველი | ტიპი | ნაგულისხმევი | აღწერა |
|---|---|---|---|
max_size_bytes | u64 | 104857600 | ვიდეო ფაილის მაქსიმალური ზომა (100 MB) |
max_duration_secs | u64 | 120 | ვიდეოს მაქსიმალური ხანგრძლივობა (2 წუთი) |
keyframe_interval_secs | u64 | 5 | წამები ამოღებულ საკვანძო ფრეიმებს შორის |
max_keyframes | usize | 20 | ამოსაღები საკვანძო ფრეიმების მაქსიმალური რაოდენობა |
extract_audio | bool | true | ვიდეოს აუდიო ტრეკის ტრანსკრიბირება |
პროვაიდერების შესაძლებლობები
ყველა LLM პროვაიდერი არ უჭერს მხარს ერთნაირ მედია ტიპებს. PRX ავტომატურად აწარმოებს შესაძლებლობების მოლაპარაკებას:
| პროვაიდერი | გამოსახულების შეყვანა | გამოსახულების გამოტანა | აუდიო შეყვანა | მშობლიური მულტიმოდალური |
|---|---|---|---|---|
| Anthropic (Claude) | დიახ | არა | არა (ჯერ ტრანსკრიბირება) | დიახ (ხედვა) |
| OpenAI (GPT-4o) | დიახ | დიახ (DALL-E) | დიახ (Whisper) | დიახ |
| Google (Gemini) | დიახ | დიახ (Imagen) | დიახ | დიახ |
| Ollama (LLaVA) | დიახ | არა | არა | დიახ (ხედვა) |
| AWS Bedrock | მოდელზე დამოკიდებული | მოდელზე დამოკიდებული | არა | მოდელზე დამოკიდებული |
როდესაც პროვაიდერი მედია ტიპს მშობლიურად მხარს არ უჭერს, PRX სარეზერვო დამუშავებას იყენებს:
- გამოსახულება მხარდაუჭერელია -- გამოსახულება აღიწერება ხედვის შესაძლებლობის მქონე მოდელით და აღწერა ტექსტის სახით იგზავნება
- აუდიო მხარდაუჭერელია -- აუდიო ტრანსკრიბირდება კონფიგურირებული STT პროვაიდერით და ტრანსკრიპტი ტექსტის სახით იგზავნება
- ვიდეო მხარდაუჭერელია -- საკვანძო ფრეიმები და აუდიო ტრანსკრიპტი კომპოზიტური შეტყობინების სახით იგზავნება
არხების მედია ლიმიტები
თითოეული არხი საკუთარ ფაილის ზომისა და ფორმატის შეზღუდვებს ადგენს:
| არხი | მაქსიმალური ატვირთვა | მაქსიმალური ჩამოტვირთვა | მხარდაჭერილი ფორმატები |
|---|---|---|---|
| Telegram | 50 MB | 20 MB | გამოსახულებები, აუდიო, ვიდეო, დოკუმენტები |
| Discord | 25 MB (უფასო) | 25 MB | გამოსახულებები, აუდიო, ვიდეო, დოკუმენტები |
| 16 MB (მედია) | 16 MB | JPEG, PNG, MP3, MP4, PDF | |
| 20 MB | 20 MB | გამოსახულებები, აუდიო, დოკუმენტები | |
| DingTalk | 20 MB | 20 MB | გამოსახულებები, აუდიო, დოკუმენტები |
| Lark | 25 MB | 25 MB | გამოსახულებები, აუდიო, ვიდეო, დოკუმენტები |
| Matrix | ჰომსერვერზე დამოკიდებული | ჰომსერვერზე დამოკიდებული | ყველა გავრცელებული ფორმატი |
| 25 MB (ტიპიური) | 25 MB | ყველა MIME დანართებით | |
| CLI | ფაილური სისტემის ლიმიტი | ფაილური სისტემის ლიმიტი | ყველა ფორმატი |
PRX არხის ლიმიტებს აღასრულებს პასუხის გაგზავნის მცდელობამდე. თუ გენერირებული გამოსახულება ან ფაილი არხის ლიმიტს აჭარბებს, ის იკუმშება ან ჩამოტვირთვის ბმული მიეწოდება.
ტრანსკოდირების პაიპლაინი
ფორმატის კონვერტაცის საჭიროებისას, PRX შემდეგ ტრანსკოდირების პაიპლაინს იყენებს:
- გამოსახულების ტრანსკოდირება -- ხორციელდება
imageკრეიტით (სუფთა Rust, გარე დამოკიდებულებების გარეშე) - აუდიო ტრანსკოდირება -- ხორციელდება FFmpeg-ით, თუ დაყენებულია, სხვა შემთხვევაში გავრცელებული ფორმატებისთვის მშობლიურ დეკოდერებზე გადადის
- ვიდეო საკვანძო ფრეიმების ამოღება -- მოითხოვს FFmpeg-ს
FFmpeg-ის ამოცნობა
PRX ავტომატურად ამოიცნობს FFmpeg-ს გაშვებისას:
prx doctor multimodalგამოტანა:
Multimodal Support:
Images: OK (native)
Audio transcoding: OK (ffmpeg 6.1 detected)
Video processing: OK (ffmpeg 6.1 detected)
STT provider: OK (whisper-1 via OpenAI)FFmpeg-ის დაყენების გარეშე, აუდიო ტრანსკოდირება და ვიდეოს დამუშავება შეზღუდულია მშობლიურად მხარდაჭერილი ფორმატებით.
შეზღუდვები
- ვიდეოს დამუშავება მოითხოვს FFmpeg-ის სისტემაში დაყენებას
- მსხვილ მედია ფაილებმა შეიძლება მნიშვნელოვნად გაზარდოს LLM ტოკენების მოხმარება (განსაკუთრებით მრავალი საკვანძო ფრეიმი)
- ზოგიერთი პროვაიდერი დამატებით საკომისიოს იხდის ხედვის/მულტიმოდალური API გამოძახებებისთვის
- რეალურ დროში აუდიო სტრიმინგი (ცოცხალი ხმოვანი საუბარი) ჯერ მხარდაუჭერელია
- პროვაიდერებიდან გენერირებული გამოსახულებები (DALL-E, Imagen) ექვემდებარება პროვაიდერის შინაარსის პოლიტიკას
- SVG რასტერიზაცია ბაზისურ რენდერერს იყენებს; რთული SVG-ები შეიძლება ზუსტად არ გამოისახოს
დაკავშირებული გვერდები
- აგენტის გაშვების გარემო -- როგორ გადის მედია შინაარსი აგენტის ციკლში
- არხების მიმოხილვა -- არხისთვის სპეციფიკური მედიის დამუშავება
- პროვაიდერების მიმოხილვა -- პროვაიდერების მულტიმოდალური შესაძლებლობები
- ემბედინგების ბექენდი -- ემბედინგ მოდელები მეხსიერებისთვის