Загрузка данных
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"}