Загрузка данных


#!/bin/bash

# ============================================
# Запросы к GigaChat
# ============================================

### API Gateway: https://ai.giga.atb.su:8080 - единая точка входа для всех API-запросов

# Базовые переменные
API_URL="https://ai.giga.atb.su:8080"
KEY_PATH="/opt/goprodigy/certs/gigachat_user.key"
CERT_PATH="/opt/goprodigy/certs/gigachat_user.pem"
CACERT_PATH="/opt/goprodigy/certs/root_ca.crt"
SESSION_ID="dfa87a40-99a9-42c4-b810-6c7caa1e1e8b"

echo "=========================================="
echo "1. Показать доступные модели"
echo "=========================================="
curl -X GET --url "${API_URL}/v1/models" \
--key "${KEY_PATH}" \
--cert "${CERT_PATH}" \
-k | jq

echo -e "\n\n=========================================="
echo "2. GOPRODIGY - metrics"
echo "=========================================="
curl -X GET --url 'http://tplss-gigatest001:8081/metrics'

echo -e "\n\n=========================================="
echo "3. GOPRODIGY - chat completions"
echo "=========================================="
curl -X POST --url "${API_URL}/v1/chat/completions" \
--key "${KEY_PATH}" \
--cert "${CERT_PATH}" \
--cacert "${CACERT_PATH}" \
--header 'Content-Type: application/json' \
--header "X-Session-ID: ${SESSION_ID}" \
--data '{ "model": "GigaChat-Max", "messages": [{"role": "user","content": "what is ansible?"}], "temperature": 1.0, "stream": false}' \
-kv | jq

echo -e "\n\n=========================================="
echo "4. WMCORE - информация о моделях"
echo "=========================================="
curl -X GET --url 'http://tplss-gigatest001:8101/info/json' | jq

echo -e "\n\n=========================================="
echo "5. WMCORE - metrics"
echo "=========================================="
curl -X GET --url 'http://tplss-gigatest001:8101/metrics'

echo -e "\n\n=========================================="
echo "6. WMCORE - таблица"
echo "=========================================="
curl -X GET --url 'http://tplss-gigatest001:8101/info/table'

echo -e "\n\n=========================================="
echo "7. GIGAFILTER - info"
echo "=========================================="
curl -X GET --url 'http://tplss-gigatest001:8301/info/json' | jq

echo -e "\n\n=========================================="
echo "8. GIGAFILTER - metrics"
echo "=========================================="
curl -X GET --url 'http://tplss-gigatest001:8301/metrics'

echo -e "\n\n=========================================="
echo "9. GIGAFILTER - chat completions"
echo "=========================================="
curl -X POST --url "${API_URL}/v1/chat/completions" \
--key "${KEY_PATH}" \
--cert "${CERT_PATH}" \
--cacert "${CACERT_PATH}" \
--header 'Content-Type: application/json' \
--header "X-Session-ID: ${SESSION_ID}" \
--data '{ "model": "GigaChat-Max", "messages": [{"role": "user","content": "Крым?"}]}' \
-kv

echo -e "\n\n=========================================="
echo "10. Embedder - info"
echo "=========================================="
curl -X GET --url 'http://tplss-gigatest001:27961/info/json' | jq

echo -e "\n\n=========================================="
echo "11. Embedder - metrics"
echo "=========================================="
curl -X GET --url 'http://tplss-gigatest001:27961/metrics'

echo -e "\n\n=========================================="
echo "12. Embedder - embeddings"
echo "=========================================="
curl -X POST --url "${API_URL}/v1/embeddings" \
--key "${KEY_PATH}" \
--cert "${CERT_PATH}" \
--cacert "${CACERT_PATH}" \
--header 'Content-Type: application/json' \
--data '{ "model": "Embeddings", "input": "Какая температура может быть на Солнце?"}' \
-k

echo -e "\n\n=========================================="
echo "13. Tokenizer - count tokens (из файла)"
echo "=========================================="
curl -X POST "${API_URL}/v1/tokens/count" \
--header 'Content-Type: application/json' \
--key "${KEY_PATH}" \
--cert "${CERT_PATH}" \
--cacert "${CACERT_PATH}" \
--data @request-tokenizer.json \
-v

echo -e "\n\n=========================================="
echo "14. Tokenizer - count tokens (прямой запрос)"
echo "=========================================="
curl -X POST "${API_URL}/v1/tokens/count" \
--header 'Content-Type: application/json' \
--key "${KEY_PATH}" \
--cert "${CERT_PATH}" \
--cacert "${CACERT_PATH}" \
--data '{"model": "GigaChat-Max", "input": "Какая температура может быть на Солнце?" }'

import urllib.request
import urllib.error
import urllib.parse
import json
import ssl
import os

# ============================================
# АВТОМАТИЗАЦИЯ ПУТЕЙ
# ============================================
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
CERTS_DIR = os.path.join(BASE_DIR, "certs")

# Пути к сертификатам
KEY_PATH = os.path.join(CERTS_DIR, "gigachat_user.key")
CERT_PATH = os.path.join(CERTS_DIR, "gigachat_user.pem")
CACERT_PATH = os.path.join(CERTS_DIR, "root_ca.pem")

# Базовые переменные
API_URL = "https://ai.giga.atb.su:8080"
SESSION_ID = "dfa87a40-99a9-42c4-b810-6c7caa1e1e8b"

# ============================================
# Вспомогательная функция для запросов
# ============================================
def fetch(title, url, method="GET", data=None, headers=None, use_certs=False, verify_ssl=True, is_file=False):
    print(f"\n==========================================")
    print(f"{title}")
    print(f"==========================================")
    
    req_headers = headers or {}
    payload = None

    # Обработка тела запроса (data)
    if data:
        if is_file:
            try:
                with open(data, 'rb') as f:
                    payload = f.read()
            except FileNotFoundError:
                print(f"[ОШИБКА] Файл '{data}' не найден.")
                return
        elif isinstance(data, dict):
            payload = json.dumps(data).encode('utf-8')
        elif isinstance(data, str):
            payload = data.encode('utf-8')
            
    # Создание объекта запроса
    req = urllib.request.Request(url, data=payload, headers=req_headers, method=method)
    
    # Настройка SSL контекста
    ctx = None
    if url.startswith("https"):
        if verify_ssl:
            # Используем корневой сертификат, если требуется верификация (аналог --cacert)
            try:
                ctx = ssl.create_default_context(cafile=CACERT_PATH)
            except Exception as e:
                print(f"[ОШИБКА SSL] Не удалось загрузить корневой сертификат: {e}")
                ctx = ssl._create_unverified_context()
        else:
            # Отключение проверки (аналог флага -k)
            ctx = ssl._create_unverified_context()

        # Добавление клиентского сертификата (--cert и --key)
        if use_certs:
            try:
                ctx.load_cert_chain(certfile=CERT_PATH, keyfile=KEY_PATH)
            except Exception as e:
                print(f"[ОШИБКА SSL] Не удалось загрузить клиентский сертификат/ключ: {e}")
                return

    # Выполнение запроса
    try:
        with urllib.request.urlopen(req, context=ctx) as response:
            body = response.read().decode('utf-8')
            # Имитация работы утилиты jq (форматирование JSON)
            try:
                parsed_json = json.loads(body)
                print(json.dumps(parsed_json, indent=2, ensure_ascii=False))
            except json.JSONDecodeError:
                print(body)
    except urllib.error.HTTPError as e:
        print(f"[HTTP ОШИБКА] Код: {e.code} - {e.reason}")
        print(e.read().decode('utf-8', errors='ignore'))
    except urllib.error.URLError as e:
        print(f"[СЕТЕВАЯ ОШИБКА] {e.reason}")
    except Exception as e:
        print(f"[НЕПРЕДВИДЕННАЯ ОШИБКА] {e}")

# ============================================
# Запросы к GigaChat
# ============================================
# 1. Показать доступные модели (GET, использует сертификаты, -k)
fetch(
    "1. Показать доступные модели", 
    f"{API_URL}/v1/models", 
    method="GET", 
    use_certs=True, 
    verify_ssl=False
)

# 2. GOPRODIGY - metrics (Обычный HTTP)
fetch(
    "2. GOPRODIGY - metrics", 
    "http://tplss-gigatest001:8081/metrics", 
    method="GET"
)

# 3. GOPRODIGY - chat completions (POST, сертификаты, json, -k)
fetch(
    "3. GOPRODIGY - chat completions", 
    f"{API_URL}/v1/chat/completions", 
    method="POST",
    headers={"Content-Type": "application/json", "X-Session-ID": SESSION_ID},
    data={
        "model": "GigaChat-Max", 
        "messages": [{"role": "user", "content": "what is ansible?"}], 
        "temperature": 1.0, 
        "stream": False
    },
    use_certs=True,
    verify_ssl=False
)

# 4. WMCORE - информация о моделях
fetch(
    "4. WMCORE - информация о моделях", 
    "http://tplss-gigatest001:8101/info/json", 
    method="GET"
)

# 5. WMCORE - metrics
fetch(
    "5. WMCORE - metrics", 
    "http://tplss-gigatest001:8101/metrics", 
    method="GET"
)

# 6. WMCORE - таблица
fetch(
    "6. WMCORE - таблица", 
    "http://tplss-gigatest001:8101/info/table", 
    method="GET"
)

# 7. GIGAFILTER - info
fetch(
    "7. GIGAFILTER - info", 
    "http://tplss-gigatest001:8301/info/json", 
    method="GET"
)

# 8. GIGAFILTER - metrics
fetch(
    "8. GIGAFILTER - metrics", 
    "http://tplss-gigatest001:8301/metrics", 
    method="GET"
)

# 9. GIGAFILTER - chat completions (POST, сертификаты, json, -k)
fetch(
    "9. GIGAFILTER - chat completions", 
    f"{API_URL}/v1/chat/completions", 
    method="POST",
    headers={"Content-Type": "application/json", "X-Session-ID": SESSION_ID},
    data={
        "model": "GigaChat-Max", 
        "messages": [{"role": "user", "content": "Крым?"}]
    },
    use_certs=True,
    verify_ssl=False
)

# 10. Embedder - info
fetch(
    "10. Embedder - info", 
    "http://tplss-gigatest001:27961/info/json", 
    method="GET"
)

# 11. Embedder - metrics
fetch(
    "11. Embedder - metrics", 
    "http://tplss-gigatest001:27961/metrics", 
    method="GET"
)

# 12. Embedder - embeddings (POST, сертификаты, json, -k)
fetch(
    "12. Embedder - embeddings", 
    f"{API_URL}/v1/embeddings", 
    method="POST",
    headers={"Content-Type": "application/json"},
    data={
        "model": "Embeddings", 
        "input": "Какая температура может быть на Солнце?"
    },
    use_certs=True,
    verify_ssl=False
)

# 13. Tokenizer - count tokens (из файла) (POST, сертификаты, файл, строгая проверка SSL)
# В bash-скрипте нет флага -k, поэтому verify_ssl=True (использует CACERT_PATH)
fetch(
    "13. Tokenizer - count tokens (из файла)", 
    f"{API_URL}/v1/tokens/count", 
    method="POST",
    headers={"Content-Type": "application/json"},
    data=os.path.join(BASE_DIR, "request-tokenizer.json"),
    is_file=True,
    use_certs=True,
    verify_ssl=True
)

# 14. Tokenizer - count tokens (прямой запрос) (POST, сертификаты, json, строгая проверка SSL)
fetch(
    "14. Tokenizer - count tokens (прямой запрос)", 
    f"{API_URL}/v1/tokens/count", 
    method="POST",
    #headers={"Content-Type": "application/json"},
    headers={
        "Content-Type": "application/json",
        #"X-Session-ID": SESSION_ID,
        #"Accept": "application/json"
    },
    data={
        "model": "Embeddings", 
        "input": "test" #"Какая температура может быть на Солнце?"
    },
    use_certs=True,
    verify_ssl=False
)


C:\Users\tasenko\Downloads\GigaChat (2)\GigaChat>run.bat 1.py

========================================== 
1. Показать доступные модели
==========================================
{ 
  "object": "list",
  "data": [
    {
      "id": "GigaChat-Max",
      "object": "model",
      "owned_by": "salutedevices",
      "type": "chat"
    },
    {
      "id": "Embeddings",
      "object": "model",
      "owned_by": "salutedevices",
      "type": "embedder"
    }
  ]
}
 
==========================================
2. GOPRODIGY - metrics 
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed 

==========================================
4. WMCORE - информация о моделях
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
5. WMCORE - metrics
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
6. WMCORE - таблица
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
7. GIGAFILTER - info
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
8. GIGAFILTER - metrics 
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed
 
==========================================
10. Embedder - info
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
11. Embedder - metrics
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
13. Tokenizer - count tokens (из файла)
==========================================
[СЕТЕВАЯ ОШИБКА] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1010)

==========================================
14. Tokenizer - count tokens (прямой запрос)
==========================================
[HTTP ОШИБКА] Код: 500 - Internal Server Error
{"status":500,"message":"Internal Server Error"}


C:\Users\tasenko\Downloads\GigaChat (2)\GigaChat>












==========================================
[HTTP ОШИБКА] Код: 500 - Internal Server Error
{"status":500,"message":"Internal Server Error"}


C:\Users\tasenko\Downloads\GigaChat (2)\GigaChat>




==========================================
[HTTP ОШИБКА] Код: 500 - Internal Server Error
{"status":500,"message":"Internal Server Error"}


C:\Users\tasenko\Downloads\GigaChat (2)\GigaChat>


==========================================
[HTTP ОШИБКА] Код: 500 - Internal Server Error
{"status":500,"message":"Internal Server Error"}
==========================================
[HTTP ОШИБКА] Код: 500 - Internal Server Error
==========================================
==========================================
==========================================
[HTTP ОШИБКА] Код: 500 - Internal Server Error
{"status":500,"message":"Internal Server Error"}


C:\Users\tasenko\Downloads\GigaChat (2)\GigaChat>run.bat 1.py

========================================== 
1. Показать доступные модели
========================================== 
{
  "object": "list",
  "data": [
    {
      "id": "GigaChat-Max", 
      "object": "model",    
      "owned_by": "salutedevices",
      "type": "chat"
    },
    {
      "id": "Embeddings",
      "object": "model",
      "owned_by": "salutedevices",
      "type": "embedder"
    }
  ]
}

==========================================
2. GOPRODIGY - metrics 
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed 

==========================================
4. WMCORE - информация о моделях
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
5. WMCORE - metrics
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
6. WMCORE - таблица
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed
 
==========================================
7. GIGAFILTER - info
========================================== 
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
8. GIGAFILTER - metrics
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
10. Embedder - info
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
11. Embedder - metrics
==========================================
[СЕТЕВАЯ ОШИБКА] [Errno 11001] getaddrinfo failed

==========================================
13. Tokenizer - count tokens (из файла)
==========================================
[СЕТЕВАЯ ОШИБКА] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1010)

==========================================
14. Tokenizer - count tokens (прямой запрос)
==========================================
[HTTP ОШИБКА] Код: 500 - Internal Server Error
{"status":500,"message":"Internal Server Error"}