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


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

import ssl

# Создаем ПРАВИЛЬНЫЙ контекст с проверкой
ctx = ssl.create_default_context()

# Вместо того чтобы полагаться на систему, 
# мы подсовываем ему наш корневой сертификат как доверенный
ctx.load_verify_locations(cafile="certs/root_ca.pem")

# И не забываем свои ключи
ctx.load_cert_chain(certfile="certs/gigachat_user.pem", keyfile="certs/gigachat_user.key")

# ============================================
# АВТОМАТИЗАЦИЯ ПУТЕЙ
# ============================================
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=True
)

# 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=True
)

# 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\certs>run.bat 1.py
"run.bat" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Users\tasenko\Downloads\GigaChat (2)\GigaChat\certs>cd ..

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

==========================================
1. Показать доступные модели
==========================================
[СЕТЕВАЯ ОШИБКА] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer 
certificate (_ssl.c:1010)

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

==========================================
3. GOPRODIGY - chat completions 
==========================================
[СЕТЕВАЯ ОШИБКА] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer 
certificate (_ssl.c:1010)

==========================================
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

==========================================
9. GIGAFILTER - chat completions
==========================================
{ 
  "choices": [
    {
      "message": {
        "content": "Извините, не могу ответить на ваш вопрос.",
        "role": "assistant"
      },
      "index": 0,
      "finish_reason": "request_filter"
    }
  ],
  "created": 1776091257,
  "model": "GigaChat-Max:latest",
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 276,
    "completion_tokens": 0,
    "total_tokens": 276,
    "precached_prompt_tokens": 0
  }
}
 
==========================================
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>run.bat 1.py

==========================================
1. Показать доступные модели
==========================================
[СЕТЕВАЯ ОШИБКА] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer 
certificate (_ssl.c:1010)

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

==========================================
3. GOPRODIGY - chat completions
==========================================
[СЕТЕВАЯ ОШИБКА] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer 
certificate (_ssl.c:1010)

==========================================
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

==========================================
9. GIGAFILTER - chat completions
==========================================
{ 
  "choices": [
    {
      "message": {
        "content": "Извините, не могу ответить на ваш вопрос.",
        "role": "assistant"
      },
      "index": 0,
      "finish_reason": "request_filter"
    }
  ],
  "created": 1776091767,
  "model": "GigaChat-Max:latest",
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 276,
    "completion_tokens": 0,
    "total_tokens": 276,
    "precached_prompt_tokens": 0
  }
}

==========================================
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"}