

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# TwelveLabs Marengo Embed 3.0
<a name="model-parameters-marengo-3"></a>

TwelveLabs Marengo Embed 3.0 모델은 비디오, 텍스트, 오디오, 이미지 또는 다중 입력(여러 이미지가 있는 텍스트) 입력에서 향상된 임베딩을 생성합니다. 이 최신 버전은 유사성 검색, 클러스터링 및 기타 기계 학습 작업에 향상된 성능과 정확도를 제공합니다.
+ 공급자 - TwelveLabs
+ 모델 ID - twelvelabs.marengo-embed-3-0-v1:0

Marengo Embed 3.0은 몇 가지 주요 개선 사항을 제공합니다.
+ **확장된 비디오 처리 용량** - 최대 4시간의 비디오 및 오디오 콘텐츠를 처리합니다. 파일은 최대 6GB일 수 있으며, 이는 이전 버전의 두 배 용량입니다. 따라서 전체 스포츠 이벤트, 확장 훈련 비디오 및 전체 영화 제작을 분석하는 데 적합합니다.
+ **향상된 스포츠 분석** - 모델은 상당한 개선을 제공합니다. 게임 플레이 역학, 플레이어 움직임 및 이벤트 감지를 더 잘 이해할 수 있습니다.
+ **글로벌 다국어 지원** - 12개 언어에서 36개 언어로 언어 기능을 확장했습니다. 이를 통해 글로벌 조직은 다양한 리전과 시장에서 원활하게 작동하는 통합 검색 및 검색 시스템을 구축할 수 있습니다.
+ **멀티모달 검색 정밀도** - 이미지와 설명 텍스트를 단일 임베딩 요청으로 결합합니다. 이를 통해 시각적 유사성과 의미론적 이해를 결합하여 보다 정확하고 상황에 맞는 검색 결과를 제공할 수 있습니다.
+ **임베딩 차원 감소** - 1024에서 512로 감소하여 스토리지 비용을 절감할 수 있습니다.

TwelveLabs Marengo Embed 3.0 모델은 다음 표에서 Amazon Bedrock 런타임 작업을 지원합니다.
+ 다양한 API 방법 사용 사례에 대한 자세한 내용은 [추론 요청](inference.md) 섹션을 참조하세요.
+ 사용자 정의 모델 유형에 대한 자세한 내용은 [추론 요청](inference.md) 섹션을 참조하세요.
  + 모델 IDs 목록과에서 TwelveLabs Marengo Embed 3.0 지원되는 모델 및 AWS 리전을 보려면의 표에서 모델을 검색합니다[Amazon Bedrock에서 지원되는 파운데이션 모델](models-supported.md).
  + 추론 프로파일 ID의 전체 목록의 경우 [추론 프로파일에 지원되는 리전 및 모델](inference-profiles-support.md) 섹션을 참조하세요. 추론 프로필 ID는 AWS 리전을 기반으로 합니다.


****  

| API 작업 | 지원되는 모델 유형 | 입력 양식 | 출력 양식 | 
| --- | --- | --- | --- | 
| InvokeModel | 미국 동부(버지니아 북부) - [기본 모델](models-supported.md) 및 [추론 프로필](inference-profiles-support.md)<br />유럽(아일랜드) - [추론 프로필](inference-profiles-support.md)<br />아시아 태평양(서울) - [기본 모델](models-supported.md) | 텍스트<br />이미지<br />다중 입력(여러 이미지가 있는 텍스트)<br />**참고:** 텍스트 및 이미지 인터리브도 지원됩니다. | 임베딩 | 
| StartAsyncInvoke | 미국 동부(버지니아 북부) - [기본 모델](models-supported.md)<br />유럽(아일랜드) - [기본 모델](models-supported.md)<br />아시아 태평양(서울) - [기본 모델](models-supported.md) | 비디오<br />오디오<br />이미지<br />텍스트<br />다중 입력(여러 이미지가 있는 텍스트)<br />**참고:** 텍스트 및 이미지 인터리브도 지원됩니다. | 임베딩 | 

**참고**  
`InvokeModel`을 사용하여 검색 쿼리에 대한 임베딩을 생성합니다. `StartAsyncInvoke`를 사용하여 자산에 대한 임베딩을 대규모로 생성합니다.

입력에는 다음과 같은 할당량이 적용됩니다.


****  

| 입력 양식 | 최대 | 
| --- | --- | 
| 텍스트 | 토큰 500개 | 
| 이미지 | 이미지당 5MB | 
| 비디오(S3) | 6GB, 4시간 길이 | 
| 오디오(S3) | 6GB, 4시간 길이 | 

**참고**  
base64 인코딩을 사용하여 오디오 또는 비디오를 인라인으로 정의하는 경우 요청 본문 페이로드가 Amazon Bedrock 25MB 모델 간접 호출 할당량을 초과하지 않는지 확인합니다.

## TwelveLabs Marengo Embed 2.7에서 TwelveLabs Marengo Embed 3.0로 마이그레이션
<a name="model-parameters-marengo-3-migration"></a>

**중요**  
TwelveLabs Marengo Embed 2.7는 더 이상 사용되지 않습니다. 로 생성한 임베딩TwelveLabs Marengo Embed 2.7은와 호환되지 않습니다TwelveLabs Marengo Embed 3.0. 를 사용하여 모든 임베딩을 다시 생성해야 합니다TwelveLabs Marengo Embed 3.0.

에서 TwelveLabs Marengo Embed 2.7로 마이그레이션하려면 다음 단계를 TwelveLabs Marengo Embed 3.0완료합니다.

1. 다음 섹션에 설명된 새로운 중첩 입력 구조 및 파라미터 변경 사항을 사용하도록 코드를 업데이트합니다.

1. 모델 ID를 로 업데이트합니다`twelvelabs.marengo-embed-3-0-v1:0`.

1. 새 버전과의 통합을 테스트합니다.

다음은 TwelveLabs Marengo Embed 2.7와 간의 주요 변경 사항입니다TwelveLabs Marengo Embed 3.0.
+ **중첩 입력 구조** - 이제 `inputType` 값을 기반으로 객체 내부에 입력 파라미터가 구성됩니다. 예를 들어 `inputType`가 인 경우 `text` 객체 `inputText` 내에 `text`중첩합니다.
+ **텍스트 및 이미지 입력 결합** - 새로운 `text_image` 입력 유형을 사용하면 텍스트와 이미지를 단일 요청으로 결합할 수 있습니다. 이 입력 유형은에서 지원되지 않습니다TwelveLabs Marengo Embed 2.7.
+ **파라미터 변경** - `embeddingOption` 파라미터 값이 변경되었습니다.
  + TwelveLabs Marengo Embed 2.7: `visual-text`, `visual-image`, `audio`
  + TwelveLabs Marengo Embed 3.0: `visual`, `audio`, `transcription`

다음 예제에서는 텍스트 입력의 구조적 변경 사항을 보여줍니다.

**TwelveLabs Marengo Embed 2.7 (평탄 구조)**

```
{
    "inputType": "text",
    "inputText": "{{your-text}}",
    "embeddingOption": "visual-text"
}
```

**TwelveLabs Marengo Embed 3.0 (중첩 구조)**

```
{
    "inputType": "text",
    "text": {
        "inputText": "{{your-text}}"
    },
    "embeddingOption": "visual"
}
```

다음 예제에서는 미디어 입력(이미지, 비디오 또는 오디오)의 구조적 변경 사항을 보여줍니다.

**TwelveLabs Marengo Embed 2.7 (평탄 구조)**

```
{
    "inputType": "{{image|video|audio}}",
    "mediaSource": {
        "s3Location": {
            "bucketName": "{{your-bucket}}",
            "objectKey": "{{your-key}}"
        }
    },
    "embeddingOption": "{{visual-image|audio}}"
}
```

**TwelveLabs Marengo Embed 3.0 (중첩 구조)**

```
{
    "inputType": "{{image|video|audio}}",
    "{{image|video|audio}}": {
        "mediaSource": {
            "s3Location": {
                "bucketName": "{{your-bucket}}",
                "objectKey": "{{your-key}}"
            }
        }
    },
    "embeddingOption": "{{visual|audio|transcription}}"
}
```

**Topics**
+ [TwelveLabs Marengo Embed 2.7에서 TwelveLabs Marengo Embed 3.0로 마이그레이션](#model-parameters-marengo-3-migration)
+ [TwelveLabs Marengo Embed 3.0 요청 파라미터](#model-parameters-marengo-3-async-request)
+ [TwelveLabs Marengo Embed 3.0 응답](#model-parameters-marengo-3-response)
+ [TwelveLabs Marengo Embed 3.0 코드 예제](#model-parameters-marengo-3-examples)

## TwelveLabs Marengo Embed 3.0 요청 파라미터
<a name="model-parameters-marengo-3-async-request"></a>

요청을 할 때 모델별 입력이 지정된 필드는 API 작업에 따라 달라집니다.
+ [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) – `body` 요청입니다.
+ [StartAsyncInvoke](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_StartAsyncInvoke.html) - 요청 본문의 `modelInput` 필드에 있습니다.

모델 입력 형식은 입력 형식에 따라 다릅니다.

------
#### [ Text ]

```
{
    "inputType": "text",
    "text": {
        "inputText": "{{string}}"
    }
}
```

------
#### [ Image ]

```
{
  "inputType": "image",
  "image": {
    "mediaSource": {
      "base64String": "{{base64-encoded string}}", // base64String OR s3Location, exactly one
      "s3Location": {
        "uri": "s3://{{amzn-s3-demo-bucket}}/folder/dog.jpg",
        "bucketOwner": "{{123456789012}}"
      }
    }
  }
}
```

------
#### [ Text & image ]

```
{
  "inputType": "text_image",
  "text_image": {
    "inputText": "man walking a dog",
    "mediaSource": {
      "base64String": "{{base64-encoded string}}", // base64String OR s3Location, exactly one
      "s3Location": {
        "uri": "s3://{{amzn-s3-demo-bucket}}/folder/dog.jpg",
        "bucketOwner": "{{123456789012}}"
      }
    }
  }
}
```

------
#### [ Audio ]

```
{
  "inputType": "audio",
  "audio": {
    "mediaSource": {
      "base64String": "{{base64-encoded string}}", // base64String OR s3Location, exactly one
      "s3Location": {
        "uri": "s3://{{amzn-s3-demo-bucket}}/audio/a.wav",
        "bucketOwner": "{{123456789012}}"
      }
    },
    "startSec": 0,
    "endSec": 6,
    "segmentation": {
      "method": "fixed", 
      "fixed": {
        "durationSec": 6
      }
    },
    "embeddingOption": [
      "audio",
      "transcription"
    ], // optional, default=both
    "embeddingType": [
      "separate_embedding"
    ], // optional, default=["separate_embedding"]
    "embeddingScope": [
      "clip",
      "asset"
    ] // optional, one or both
  }
}
```

------
#### [ Video ]

```
{
  "inputType": "video",
  "video": {
    "mediaSource": {
      "base64String": "{{base64-encoded string}}", // base64String OR s3Location, exactly one
      "s3Location": {
        "uri": "s3://{{amzn-s3-demo-bucket}}/video/clip.mp4",
        "bucketOwner": "{{123456789012}}"
      }
    },
    "startSec": 0,
    "endSec": 6,
    "segmentation": {
      "method": "dynamic", // dynamic OR fixed, exactly one
      "dynamic": {
        "minDurationSec": 4
      }
      "method": "fixed",
      "fixed": {
        "durationSec": 6
      }
    },
    "embeddingOption": [
      "visual",
      "audio", 
      "transcription"
    ], // optional, default=all
    "embeddingType": [
      "separate_embedding"
    ], // optional, default=["separate_embedding"]
    "embeddingScope": [
      "clip",
      "asset"
    ] // optional, one or both
  }
}
```

------
#### [ Multi-input ]

```
{
  "inputType": "multi_input",
  "multi_input": {
    "inputText": "<@img1> walking a dog with <@img2>", // optional
    "mediaSources": [
      {
        "name": "img1", // required if inputText uses <@name> placeholders
        "mediaType": "image",
        "base64String": "{{base64-encoded string}}", // base64String OR s3Location, exactly one
        "s3Location": {
          "uri": "s3://{{amzn-s3-demo-bucket}}/images/person.jpg",
          "bucketOwner": "{{123456789012}}"
        }
      },
      {
        "name": "img2",
        "mediaType": "image",
        "base64String": "{{base64-encoded string}}", // base64String OR s3Location, exactly one
        "s3Location": {
          "uri": "s3://{{amzn-s3-demo-bucket}}/images/dog.jpg",
          "bucketOwner": "{{123456789012}}"
        }
      }
    ]
  }
}
```

------

입력 파라미터에 대한 자세한 내용은 다음 섹션을 확장하세요.

### inputType
<a name="model-parameters-marengo-3-inputType"></a>

임베딩 방식입니다.
+ **유형**: 문자열
+ **필수 항목 여부:** 예
+ 유효한 값****: `text` \| `image` \| `text_image` \| `audio` \| `video` \| `multi_input`

### inputText
<a name="model-parameters-marengo-3-inputText"></a>

임베딩할 텍스트입니다.
+ **유형**: 문자열
+ **필수:** 예(호환되는 입력 유형의 경우)
+ **호환되는 입력 유형:** 텍스트

### mediaSource
<a name="model-parameters-marengo-3-mediaSource"></a>

미디어 소스에 대한 정보를 포함합니다.
+ **유형:** 객체
+ **필수:** 예(호환되는 유형인 경우)
+ **호환되는 입력 유형:** 이미지, 비디오, 오디오

요청 본문의 `mediaSource` 객체 형식은 미디어가 Base64 인코딩 문자열 또는 S3 위치로 정의되는지 여부에 따라 달라집니다.
+ **Base64-encoded 문자열**

  ```
  {
      "mediaSource": {
          "base64String": "base64-encoded string"
      }
  }
  ```
  + `base64String` - 미디어용 Base64 인코딩 문자열입니다.
+ **S3 위치** - S3 URI와 버킷 소유자를 지정합니다.

  ```
  {
      "s3Location": {
          "uri": "string",
          "bucketOwner": "string"
      }
  }
  ```
  + `uri` - 미디어가 포함된 S3 URI입니다.
  + `bucketOwner` - S3 버킷 소유자의 AWS 계정 ID입니다.

### embeddingOption
<a name="model-parameters-marengo-3-embeddingOption"></a>

검색할 임베딩 유형을 지정합니다.
+ **유형**: 목록
+ **필수 항목 여부**: 아니요
+ **목록 멤버에 유효한 값:**
  + `visual` - 비디오의 시각적 임베딩입니다.
  + `audio` - 비디오에 오디오를 임베딩합니다.
  + `transcription` - 트랜스크립션된 텍스트의 임베딩입니다.
+ **기본값:**
  + 동영상: ["시각", "오디오", "트랜스크립션"]
  + 오디오: ["audio", "transcription"]
+ **호환되는 입력 유형:** 비디오, 오디오

### embeddingScope
<a name="model-parameters-marengo-3-embeddingScope"></a>

검색할 임베딩의 범위를 지정합니다.
+ **유형**: 목록
+ **필수 항목 여부**: 아니요
+ **목록 멤버에 유효한 값:**
  + `clip` - 각 클립에 대한 임베딩을 반환합니다.
  + `asset` - 전체 자산에 대한 임베딩을 반환합니다.
+ **호환되는 입력 유형:** 비디오, 오디오

### startSec
<a name="model-parameters-marengo-3-startSec"></a>

처리가 시작되어야 하는 클립의 초 단위 시점입니다.
+ **유형**: Double
+ **필수 항목 여부**: 아니요
+ **최솟값:** 0
+ **기본값:** 0
+ **호환되는 입력 유형:** 비디오, 오디오

### endSec
<a name="model-parameters-marengo-3-endSec"></a>

처리가 종료되어야 하는 초 단위 시점입니다.
+ **유형**: Double
+ **필수 항목 여부**: 아니요
+ **최소값:** startSec \+ 세그먼트 길이
+ **최댓값:** 미디어 기간
+ **기본값:** 미디어 기간
+ **호환되는 입력 유형:** 비디오, 오디오

### 세분화
<a name="model-parameters-marengo-3-segmentation"></a>

임베딩 생성을 위해 미디어를 세그먼트로 나누는 방법을 정의합니다.
+ **유형:** 객체
+ **필수 항목 여부**: 아니요
+ **호환되는 입력 유형:** 비디오, 오디오

분할 객체에는 `method` 필드와 메서드별 파라미터가 포함됩니다.
+ `method` - 사용할 분할 방법입니다. 유효한 값: `dynamic` \| `fixed`
+ `dynamic` - 비디오의 경우는 샷 경계 감지를 사용하여 콘텐츠를 동적으로 분할합니다. 다음으로 구성됩니다.
  + `minDurationSec` - 각 세그먼트의 최소 지속 시간을 초 단위로 표시합니다. 유형: 정수입니다. 범위: 1\~5. 기본값: 4.
+ `fixed` - 콘텐츠를 동일한 기간의 세그먼트로 나눕니다. 다음으로 구성됩니다.
  + `durationSec` - 각 세그먼트의 초 단위 지속 시간입니다. 유형: 정수입니다. 범위: 1\~10. 기본값: 6.

**기본 동작**:
+ 비디오: 샷 경계 감지와 함께 동적 분할을 사용합니다.
+ 오디오: 고정 분할을 사용합니다. 콘텐츠는 가능한 한 균등하게 분할되며 세그먼트는 10초에 가깝습니다.

### multi\_input
<a name="model-parameters-marengo-3-multi-input"></a>

단일 임베딩 요청에서 텍스트를 여러 이미지와 결합하기 위한 다중 입력 구성을 포함합니다. 텍스트와 여러 이미지 간의 관계를 캡처하는 임베딩을 생성하려는 경우이 입력 유형을 사용합니다.
+ **유형:** 객체
+ **필수:** 예(가 `inputType`인 경우`multi_input`)

`multi_input` 객체는 다음 필드를 포함합니다.
+ `inputText` – (선택 사항) 자리 표시자 구문이 있는 텍스트 쿼리입니다. `<@name>`를 사용하여 미디어 소스(예: `"<@img1> walking with <@img2>"`)를 참조합니다. 자리 표시자와 함께 제공되는 경우 각 자리 표시자는와 일치해야 `<@name>` 합니다`mediaSources[].name`. 최대: 자리 표시자를 포함하여 토큰 500개.
+ `mediaSources` – (필수) 미디어 소스 객체의 배열입니다. 각 미디어 소스에는 이미지 데이터가 포함되어 있습니다. 배열에는 하나 이상의 항목이 포함되어야 합니다.
  + `name` - (조건부)이 미디어 소스의 고유 식별자입니다. 가 `<@name>` 자리 표시자를 `inputText` 사용하는 경우에만 필요합니다. 제공된 경우의 자리 표시자와 일치해야 합니다`inputText`( `<@` 및 `>` 문자 제외).
  + `mediaType` – (필수) 미디어 유형입니다. 현재 `"image"`만 지원됩니다.
  + `base64String` Base64-encoded 이미지 페이로드입니다. 최대: 이미지당 5MB. `base64String` 또는 중 정확히 하나를 제공합니다`s3Location`.
  + `s3Location` - `uri` (S3 URI) 및 `bucketOwner` (12자리 AWS 계정 ID)를 포함하는 S3 위치 객체입니다. 최대: 이미지당 5MB. `base64String` 또는 중 정확히 하나를 제공합니다`s3Location`.

**미디어 주문:**
+ 에 `<@name>` 자리 표시자가 `inputText` 포함된 경우 순서는의 자리 표시자 순서에 따라 결정됩니다`inputText`.
+ `inputText`이 생략되거나 비어 있는 경우 순서는 기본적으로 배열 순서 로 설정됩니다`mediaSources`.

### embeddingType
<a name="model-parameters-marengo-3-embeddingType"></a>

임베딩이 여러 양식에서 집계되는 방법을 제어합니다.
+ **유형**: 목록
+ **필수 항목 여부**: 아니요
+ **목록 멤버에 유효한 값:**
  + `separate_embedding` - 각 양식(시각적, 오디오, 트랜스크립션)에 대한 임베딩을 개별적으로 반환합니다.
  + `fused_embedding` - 여러 임베딩 양식의 가중치 기반 융합을 반환합니다.
+ **기본값:** ["separate\_embedding"]
+ **호환되는 입력 유형:** 비디오, 오디오

**제약 조건**:
+ 비디오의 경우:에 최소 2개의 임베딩 유형이 `fused_embedding` 필요합니다`embeddingOption`.
+ 오디오의 경우: `transcription`에 `audio` 및가 모두 `fused_embedding` 필요합니다`embeddingOption`.

### inferenceId
<a name="model-parameters-marengo-3-inferenceId"></a>

추론 요청의 고유 식별자입니다.
+ **유형**: 문자열
+ **필수 항목 여부**: 아니요

## TwelveLabs Marengo Embed 3.0 응답
<a name="model-parameters-marengo-3-response"></a>

출력 임베딩 및 관련 메타데이터의 위치는 간접 호출 방법에 따라 달라집니다.
+ InvokeModel - 응답 본문에 있습니다.
+ StartAsyncInvoke -에 정의된 S3 버킷에서 비동기 호출 작업이 완료된 `s3OutputDataConfig`후.

임베딩 벡터가 여러 개 있는 경우 출력은 각각 벡터와 관련 메타데이터를 포함하는 객체 목록입니다.

출력 임베딩 벡터의 형식은 다음과 같습니다.

```
{
  "data": {
    "embedding": [
    0.111, 0.234, ...
    ],
    "embeddingOption": ["visual", "audio", "transcription", "fused" (for video input) | "audio", "transcription", "fused" (for audio input)],
    "embeddingScope": ["asset" | "clip"],
    "startSec": 0,
    "endSec": 4.2
  }
}
```

임베딩은 부동 소수점 배열로 반환됩니다.

이 응답이 표시되는 위치는 사용한 API 메서드에 따라 달라집니다.
+ InvokeModel - 응답 본문에 표시됩니다.
+ StartAsyncInvoke - 요청에 지정한 S3 위치에 표시됩니다. 응답은를 반환합니다`invocationArn`. 이를 사용하여 비동기 호출에 대한 메타데이터를 가져올 수 있습니다. 여기에는 상태 및 결과가 기록되는 S3 위치가 포함됩니다.

응답 파라미터에 대한 자세한 내용은 다음 섹션을 확장하세요.

### 임베딩
<a name="model-parameters-marengo-3-embedding"></a>

입력의 벡터 표현을 임베딩합니다.
+ **유형:** Double 목록

### embeddingOption
<a name="model-parameters-marengo-3-embeddingOption-response"></a>

임베딩의 유형입니다.
+ **유형**: 문자열
+ **가능한 값:**
  + 시각적 객체 - 비디오의 시각적 객체 임베딩입니다.
  + 오디오 - 비디오에 오디오를 임베딩합니다.
  + 트랜스크립션 - 트랜스크립션된 텍스트의 임베딩입니다.
  + 융합 - 여러 임베딩 유형의 가중치 기반 융합입니다. 가 요청에 `embeddingType` `"fused_embedding"` 포함된 경우에만 반환됩니다.
+ **호환되는 입력 유형:** 비디오, 오디오

**참고**  
텍스트, 이미지, text\_image 및 multi\_input 입력 유형에는 적용되지 않습니다. 필드 없이 단일 임베딩을 반환합니다`embeddingOption`.

### embeddingScope
<a name="model-parameters-marengo-3-embeddingScope"></a>

검색할 임베딩의 범위를 지정합니다.
+ **유형**: 문자열

다음 값 중 하나 이상을 포함할 수 있습니다.
+ 클립: 각 클립에 대한 임베딩을 반환합니다.
+ asset: 전체 자산에 대한 임베딩을 반환합니다.

### startSec
<a name="model-parameters-marengo-3-startSec-response"></a>

클립의 시작 오프셋입니다.
+ **유형**: Double
+ **호환되는 입력 유형:** 비디오, 오디오

### endSec
<a name="model-parameters-marengo-3-endSec-response"></a>

클립의 끝 오프셋입니다. 텍스트, 이미지, text\_image 및 multi\_input 임베딩에는 적용되지 않습니다.
+ **유형**: Double
+ **호환되는 입력 유형:** 비디오, 오디오

## TwelveLabs Marengo Embed 3.0 코드 예제
<a name="model-parameters-marengo-3-examples"></a>

이 섹션에서는 Python을 사용하여 다양한 입력 유형으로 TwelveLabs Marengo Embed 3.0 모델을 사용하는 방법을 보여줍니다. 이 예제에서는 모델별 입력을 정의하고 모델 호출을 실행하는 방법을 보여줍니다.

**참고**  
InvokeModel은 텍스트, 이미지, 다중 입력 및 이미지 인터리브 입력이 있는 텍스트를 지원합니다. 비디오 및 오디오 입력의 경우 StartAsyncInvoke를 사용합니다.

다음 단계에 따라 코드를 통합합니다.

**1. 모델별 입력 정의**  
입력 유형에 따라 모델별 입력을 정의합니다.

------
#### [ Text ]

```
# Create the model-specific input
model_id = "twelvelabs.marengo-embed-3-0-v1:0"
# Replace the us prefix depending on your region
inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0"

model_input = {
    "inputType": "text",
    "text": {
        "inputText": "man walking a dog"
    }
}
```

------
#### [ Image ]

```
# Create the model-specific input
model_id = "twelvelabs.marengo-embed-3-0-v1:0"
# Replace the us prefix depending on your region
inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0"

model_input = {
    "inputType": "image",
    "image": {
        "mediaSource": {
            "s3Location": {
                "uri": "s3://{{amzn-s3-demo-bucket}}/my_image.png",
                "bucketOwner": "{{123456789012}}"
            }
        }
    }
}
```

------
#### [ Text & image ]

```
# Create the model-specific input
model_id = "twelvelabs.marengo-embed-3-0-v1:0"
# Replace the us prefix depending on your region
inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0"

model_input = {
    "inputType": "text_image",
    "text_image": {
        "inputText": "man walking a dog",
        "mediaSource": {
            "s3Location": {
                "uri": "s3://{{amzn-s3-demo-bucket}}/my_image.jpg",
                "bucketOwner": "{{123456789012}}"
            }
        }
    }
}
```

------
#### [ Audio ]

```
# Create the model-specific input
model_id = "twelvelabs.marengo-embed-3-0-v1:0"
# Replace the us prefix depending on your region
inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0"
 
model_input = {
    "inputType": "audio",
    "audio": {
        "mediaSource": {  
            "s3Location": { 
                "uri": "s3://{{amzn-s3-demo-bucket}}/my-audio.wav", 
                "bucketOwner": "{{123456789012}}" 
            }
        },
        "startSec": 0,
        "endSec": 5,
        "segmentation": {
            "method": "fixed",
            "fixed": {
                "durationSec": 5
            }
        },
        "embeddingScope": ["clip", "asset"],
        "embeddingOption": ["audio", "transcription"],
        "embeddingType": ["separate_embedding", "fused_embedding"]
    }
}
```

------
#### [ Video ]

```
# Create the model-specific input
model_id = "twelvelabs.marengo-embed-3-0-v1:0"
# Replace the us prefix depending on your region
inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0"
 
model_input = {
    "inputType": "video",
    "video": {
        "mediaSource": {
            "s3Location": {
                "uri": "s3://{{amzn-s3-demo-bucket}}/my-video.mp4",
                "bucketOwner": "{{123456789012}}"
            }
        },
        "startSec": 10,
        "endSec": 20,
        "segmentation": {
            "method": "fixed",
            "fixed": {
                "durationSec": 5
            }
        },
        "embeddingOption": [
            "visual", 
            "audio"
        ],
        "embeddingType": ["separate_embedding", "fused_embedding"],
        "embeddingScope": [
            "clip",
            "asset"
        ]
    }
}
```

------
#### [ Multi-input ]

```
# Create the model-specific input
model_id = "twelvelabs.marengo-embed-3-0-v1:0"
# Replace the us prefix depending on your region
inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0"

model_input = {
    "inputType": "multi_input",
    "multi_input": {
        "inputText": "<@img1> walking a dog with <@img2>",
        "mediaSources": [
            {
                "name": "img1",
                "mediaType": "image",
                "s3Location": {
                    "uri": "s3://{{amzn-s3-demo-bucket}}/images/person.jpg",
                    "bucketOwner": "{{123456789012}}"
                }
            },
            {
                "name": "img2",
                "mediaType": "image",
                "s3Location": {
                    "uri": "s3://{{amzn-s3-demo-bucket}}/images/dog.jpg",
                    "bucketOwner": "{{123456789012}}"
                }
            }
        ]
    }
}
```

------

**2. 모델 입력을 사용하여 모델 간접 호출 실행**  
그런 다음 선택한 모델 간접 호출 방법에 해당하는 코드 조각을 추가합니다.

------
#### [ InvokeModel ]

```
# Run model invocation with InvokeModel
import boto3
import json

# Initialize the Bedrock Runtime client
client = boto3.client('bedrock-runtime')

# Make the request
response = client.invoke_model(
    modelId=inference_profile_id,
    body=json.dumps(model_input)
)

# Print the response body
response_body = json.loads(response['body'].read().decode('utf-8'))

print(response_body)
```

------
#### [ StartAsyncInvoke ]

```
# Run model invocation asynchronously
import boto3
import json

# Initalize the Bedrock Runtime client.
client = boto3.client("bedrock-runtime")

try:
    # Start the asynchronous job
    invocation = client.start_async_invoke(
        modelId=model_id,
        modelInput=model_input,
        outputDataConfig={
            "s3OutputDataConfig": {
                "s3Uri": "s3://amzn-s3-demo-bucket"
            }
        }
    )

    # Print the response JSON
    print("Response:")
    print(json.dumps(invocation, indent=2, default=str))

except Exception as e:
    # Implement error handling here.
    message = e.response["Error"]["Message"]
    print(f"Error: {message}")
```

------