Quick Start

This Quick Start guide demonstrates Synvo's multimodal AI capabilities using real demo files. You will learn how to upload and query different file types: PDFs, images, videos, and audio files. Each demo includes downloadable files and specific questions to showcase AI understanding across modalities. You can also manage your files and queries in Synvo Dashboard.

Demo Files Overview

We will use these real files to demonstrate multimodal capabilities. Click on each tab below to preview and interact with the content:

NTU Annual Report 2024

Question: "How many patents did NTU file in FY2023?"

Expected Answer: 672

šŸ“„ Download PDF | šŸ“Š This report contains detailed patent filing statistics for FY2023

WellFest Event Poster

Question: "When is the WellFest Finale event and where is it located?"

Expected Answer: 23rd October 2025 (Thursday), 11am to 4pm, Nanyang Auditorium Foyer

WellFest Event Poster

šŸ“„ Download Image | šŸŽŖ Click image to view full size | Contains event timing and location details

Andrew's Machine Learning Lecture

Question: "What is the answer to the in-video quiz in Andrew's lecture?"

Expected Answer: a_2^3 = g(\Omega_2^3 \cdot a^2 + b_2^3)

šŸ“„ Download Video | šŸŽ“ Educational ML content with mathematical formulas and quiz questions

Finance Lecture on EBIT

Question: "In the lecture about the operating profit margin formula, what is the value of EBIT used in the example calculation for the year 2018?"

Expected Answer: EBIT = $8 million

šŸ“„ Download Audio | šŸ’° Finance lecture covering EBIT calculations and profit margin formulas

Step 1: Setup

1.1 Create API Key

First, create an API key to authenticate your requests:

  1. Log into your Synvo dashboard
  2. Navigate to API Keys section
  3. Click "Create New Key"
  4. Give it a name (e.g., "My First Key")
  5. Copy and save the key immediately - you won't see it again!

1.2 Set API Key as Environment Variable

Set your API key as an environment variable:

export SYNVO_API_KEY="your_api_key_here"

1.3 Download Demo Files

Download all demo files to your local directory:

Save all files to the same directory where you will run the code examples.

Step 2: Upload All Files

Upload all four demo files at once and wait for processing to complete.

import requests
import json
import time
import os

api_key = os.getenv("SYNVO_API_KEY")

# Define all files to upload
files_to_upload = [
    "NTU_Annual_Report_2024.pdf",
    "poster.jpg",
    "Andrew_lecture.mp4",
    "Finance_lecture.mp3"
]

# Upload all files
file_ids = {}
for filename in files_to_upload:
    print(f"Uploading {filename}...")
    with open(filename, "rb") as f:
        response = requests.post(
            "https://api.synvo.ai/file/upload",
            files={"file": f},
            data={"path": "/", "build_memory": "true"},
            headers={"X-API-Key": api_key}
        )
    file_id = response.json()["file_id"]
    file_ids[filename] = file_id
    print(f"āœ… {filename} uploaded: {file_id}")

# Wait for all files to complete processing
print("\nā³ Waiting for all files to process...")
for filename, file_id in file_ids.items():
    while True:
        status_response = requests.get(
            f"https://api.synvo.ai/file/status/{file_id}",
            headers={"X-API-Key": api_key}
        )
        status = status_response.json()["status"]
        if status == "COMPLETED":
            print(f"āœ… {filename} processing complete!")
            break
        elif status == "FAILED":
            print(f"āŒ {filename} processing failed!")
            break
        time.sleep(5)

print("\nšŸŽ‰ All files ready for querying!")
print("\nFile IDs:")
for filename, file_id in file_ids.items():
    print(f"  {filename}: {file_id}")
# Upload all files
echo "Uploading files..."

# Upload PDF
PDF_RESPONSE=$(curl -s -X POST "https://api.synvo.ai/file/upload" \
  -H "X-API-Key: $SYNVO_API_KEY" \
  -F "file=@./NTU_Annual_Report_2024.pdf" \
  -F "path=/" \
  -F "build_memory=true")
PDF_FILE_ID=$(echo $PDF_RESPONSE | jq -r '.file_id')
echo "āœ… PDF uploaded: $PDF_FILE_ID"

# Upload Image
IMAGE_RESPONSE=$(curl -s -X POST "https://api.synvo.ai/file/upload" \
  -H "X-API-Key: $SYNVO_API_KEY" \
  -F "file=@./poster.jpg" \
  -F "path=/" \
  -F "build_memory=true")
IMAGE_FILE_ID=$(echo $IMAGE_RESPONSE | jq -r '.file_id')
echo "āœ… Image uploaded: $IMAGE_FILE_ID"

# Upload Video
VIDEO_RESPONSE=$(curl -s -X POST "https://api.synvo.ai/file/upload" \
  -H "X-API-Key: $SYNVO_API_KEY" \
  -F "file=@./Andrew_lecture.mp4" \
  -F "path=/" \
  -F "build_memory=true")
VIDEO_FILE_ID=$(echo $VIDEO_RESPONSE | jq -r '.file_id')
echo "āœ… Video uploaded: $VIDEO_FILE_ID"

# Upload Audio
AUDIO_RESPONSE=$(curl -s -X POST "https://api.synvo.ai/file/upload" \
  -H "X-API-Key: $SYNVO_API_KEY" \
  -F "file=@./Finance_lecture.mp3" \
  -F "path=/" \
  -F "build_memory=true")
AUDIO_FILE_ID=$(echo $AUDIO_RESPONSE | jq -r '.file_id')
echo "āœ… Audio uploaded: $AUDIO_FILE_ID"

# Wait for all files to process
echo -e "\nā³ Waiting for all files to process..."
for FILE_ID in "$PDF_FILE_ID" "$IMAGE_FILE_ID" "$VIDEO_FILE_ID" "$AUDIO_FILE_ID"; do
  while true; do
    STATUS=$(curl -s -X GET "https://api.synvo.ai/file/status/$FILE_ID" \
      -H "X-API-Key: $SYNVO_API_KEY" | jq -r '.status')
    
    if [ "$STATUS" = "COMPLETED" ]; then
      echo "āœ… File $FILE_ID ready!"
      break
    elif [ "$STATUS" = "FAILED" ]; then
      echo "āŒ File $FILE_ID failed!"
      break
    fi
    sleep 5
  done
done

echo -e "\nšŸŽ‰ All files ready for querying!"
echo -e "\nFile IDs:"
echo "  PDF: $PDF_FILE_ID"
echo "  Image: $IMAGE_FILE_ID"
echo "  Video: $VIDEO_FILE_ID"
echo "  Audio: $AUDIO_FILE_ID"

Step 3: Query Files

Now query each file with specific questions to demonstrate multimodal AI capabilities.

Python

Question: "How many patents did NTU file in FY2023?"
Expected Answer: 672

import requests
import json
import os

api_key = os.getenv("SYNVO_API_KEY")

payload = {
    "messages": [{
        "role": "user",
        "content": [
            {"type": "text", "text": "How many patents did NTU file in FY2023?"}
        ]
    }]
}

response = requests.post(
    "https://api.synvo.ai/ai/query",
    data={
        "payload": json.dumps(payload),
        "model": "synvo",
        "force_search": "true"
    },
    headers={"X-API-Key": api_key}
)

result = response.json()

# Print top 3 related factsed facts
k = 3
facts = result["content"][0]["facts"][:k]
for i, fact in enumerate(facts, 1):
    print(f"\n--- Fact {i} ---")
    print(f"Chunk: {fact['chunk']}...")
    print(f"Reference: {fact['reference']}")

Question: "When is the WellFest Finale event and where is it located?"
Expected Answer: 23rd October 2025 (Thursday), 11am to 4pm, Nanyang Auditorium Foyer

import requests
import json
import os

api_key = os.getenv("SYNVO_API_KEY")

payload = {
    "messages": [{
        "role": "user",
        "content": [
            {"type": "text", "text": "When is the WellFest Finale event and where is it located?"}
        ]
    }]
}

response = requests.post(
    "https://api.synvo.ai/ai/query",
    data={
        "payload": json.dumps(payload),
        "model": "synvo",
        "force_search": "true"
    },
    headers={"X-API-Key": api_key}
)

result = response.json()

# Print top 3 related factsed facts
k = 3
facts = result["content"][0]["facts"][:k]
for i, fact in enumerate(facts, 1):
    print(f"\n--- Fact {i} ---")
    print(f"Chunk: {fact['chunk']}...")
    print(f"Reference: {fact['reference']}")

Question: "What is the answer to the in-video quiz in Andrew's lecture?"
Expected Answer: a_2^3 = g(\Omega_2^3 \cdot a^2 + b_2^3)

import requests
import json
import os

api_key = os.getenv("SYNVO_API_KEY")

payload = {
    "messages": [{
        "role": "user",
        "content": [
            {"type": "text", "text": "What is the answer to the in-video quiz in Andrew's lecture?"}
        ]
    }]
}

response = requests.post(
    "https://api.synvo.ai/ai/query",
    data={
        "payload": json.dumps(payload),
        "model": "synvo",
        "force_search": "true"
    },
    headers={"X-API-Key": api_key}
)

result = response.json()

# Print top 3 related facts
k = 3
facts = result["content"][0]["facts"][:k]
for i, fact in enumerate(facts, 1):
    print(f"\n--- Fact {i} ---")
    print(f"Chunk: {fact['chunk']}...")
    print(f"Reference: {fact['reference']}")

Question: "In the lecture about the operating profit margin formula, what is the value of EBIT used in the example calculation for the year 2018?"
Expected Answer: EBIT = $8 million

import requests
import json
import os

api_key = os.getenv("SYNVO_API_KEY")

payload = {
    "messages": [{
        "role": "user",
        "content": [
            {"type": "text", "text": "In the lecture about the operating profit margin formula, what is the value of EBIT used in the example calculation for the year 2018?"}
        ]
    }]
}

response = requests.post(
    "https://api.synvo.ai/ai/query",
    data={
        "payload": json.dumps(payload),
        "model": "synvo",
        "force_search": "true"
    },
    headers={"X-API-Key": api_key}
)

result = response.json()

# Print top 3 related facts
k = 3
facts = result["content"][0]["facts"][:k]
for i, fact in enumerate(facts, 1):
    print(f"\n--- Fact {i} ---")
    print(f"Chunk: {fact['chunk']}...")
    print(f"Reference: {fact['reference']}")

cURL

Question: "How many patents did NTU file in FY2023?"
Expected Answer: 672

curl -X POST "https://api.synvo.ai/ai/query" \
  -H "X-API-Key: $SYNVO_API_KEY" \
  -F 'payload={"messages":[{"role":"user","content":[{"type":"text","text":"How many patents did NTU file in FY2023?"}]}]}' \
  -F "model=synvo" \
  -F "force_search=true"

Question: "When is the WellFest Finale event and where is it located?"
Expected Answer: 23rd October 2025 (Thursday), 11am to 4pm, Nanyang Auditorium Foyer

curl -X POST "https://api.synvo.ai/ai/query" \
  -H "X-API-Key: $SYNVO_API_KEY" \
  -F 'payload={"messages":[{"role":"user","content":[{"type":"text","text":"When is the WellFest Finale event and where is it located?"}]}]}' \
  -F "model=synvo" \
  -F "force_search=true"

Question: "What is the answer to the in-video quiz in Andrew's lecture?"
Expected Answer: a_2^3 = g(\Omega_2^3 \cdot a^2 + b_2^3)

curl -X POST "https://api.synvo.ai/ai/query" \
  -H "X-API-Key: $SYNVO_API_KEY" \
  -F 'payload={"messages":[{"role":"user","content":[{"type":"text","text":"What is the answer to the in-video quiz in Andrew'\''s lecture?"}]}]}' \
  -F "model=synvo" \
  -F "force_search=true"

Question: "In the lecture about the operating profit margin formula, what is the value of EBIT used in the example calculation for the year 2018?"
Expected Answer: EBIT = $8 million

curl -X POST "https://api.synvo.ai/ai/query" \
  -H "X-API-Key: $SYNVO_API_KEY" \
  -F 'payload={"messages":[{"role":"user","content":[{"type":"text","text":"In the lecture about the operating profit margin formula, what is the value of EBIT used in the example calculation for the year 2018?"}]}]}' \
  -F "model=synvo" \
  -F "force_search=true"

Note

Large File Processing

  • The 8-min demo video file may take 10 seconds to process, larger video file may take more time to process.
  • Check processing status with /file/status/{file_id}

File Format Support

  • Images: .png, .jpg, .jpeg, .gif, .webp
  • Video: .mp4, .mov, .m4v, .avi, .mkv
  • Audio: .mp3, .wav, .m4a, .aac, .flac
  • Documents: .pdf, .docx, .ppt, .pptx, .txt, .json, .jsonl, .xlsx