Skip to content

Commit aea9eb9

Browse files
authored
fix: support project_id for foundation-models (#2)
* fix: support project_id for foundation-models * fix: add more tests for client.py and refactor docs links * fix: add FM examples to ci
1 parent 5676871 commit aea9eb9

17 files changed

+4564
-66
lines changed

.github/workflows/ci.yml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ jobs:
6363
path: dist/
6464

6565
test:
66-
timeout-minutes: 15
66+
timeout-minutes: 20
6767
name: test
6868
runs-on: ubuntu-latest
6969
needs: [lint, build]
@@ -153,7 +153,7 @@ jobs:
153153
coverage-file: coverage.json
154154

155155
test-examples:
156-
timeout-minutes: 15
156+
timeout-minutes: 20
157157
name: test-examples
158158
runs-on: ubuntu-latest
159159
needs: [test]
@@ -198,4 +198,12 @@ jobs:
198198
EVOLUTION_KEY_ID: ${{ secrets.EVOLUTION_KEY_ID }}
199199
EVOLUTION_SECRET: ${{ secrets.EVOLUTION_SECRET }}
200200
EVOLUTION_BASE_URL: ${{ secrets.EVOLUTION_BASE_URL }}
201-
run: make run-tokens
201+
run: make run-tokens
202+
203+
- name: Run foundation models examples
204+
env:
205+
EVOLUTION_KEY_ID: ${{ secrets.EVOLUTION_KEY_ID }}
206+
EVOLUTION_SECRET: ${{ secrets.EVOLUTION_SECRET }}
207+
EVOLUTION_BASE_URL: ${{ secrets.EVOLUTION_BASE_URL }}
208+
EVOLUTION_PROJECT_ID: ${{ secrets.EVOLUTION_PROJECT_ID }}
209+
run: make run-foundation-models

Makefile

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@ help:
1919
@echo " type-check Run type checking (pyright + mypy)"
2020
@echo ""
2121
@echo "Examples:"
22-
@echo " run-examples Run basic usage examples"
23-
@echo " run-all-examples Run all examples"
24-
@echo " run-streaming Run streaming examples"
25-
@echo " run-async Run async examples"
26-
@echo " run-tokens Run token management examples"
22+
@echo " run-examples Run basic usage examples"
23+
@echo " run-all-examples Run all examples"
24+
@echo " run-streaming Run streaming examples"
25+
@echo " run-async Run async examples"
26+
@echo " run-tokens Run token management examples"
27+
@echo " run-foundation-models Run foundation models examples"
2728
@echo ""
2829
@echo "Build:"
2930
@echo " clean Clean build artifacts"
@@ -58,6 +59,9 @@ shell:
5859
test:
5960
rye run pytest tests/ -v --cov=evolution_openai --cov-report=html --cov-report=term --cov-report=xml:coverage.xml --cov-report=json:coverage.json
6061

62+
test-foundation-models:
63+
rye run pytest tests/test_foundation_models_*.py -v
64+
6165
# Code quality
6266
lint:
6367
rye run ruff check .
@@ -209,6 +213,10 @@ run-tokens:
209213
@if [ -f .env ]; then echo "Загружение переменных окружения из файла .env..."; export $$(grep -v '^#' .env | xargs); fi; \
210214
rye run python examples/token_management.py
211215

216+
run-foundation-models:
217+
@if [ -f .env ]; then echo "Загружение переменных окружения из файла .env..."; export $$(grep -v '^#' .env | xargs); fi; \
218+
rye run python examples/foundation_models_example.py
219+
212220
# Package info
213221
info:
214222
@echo "Package: evolution-openai"

README.md

Lines changed: 95 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
-**Retry логика** при ошибках авторизации
1818
-**Поддержка .env файлов** для управления конфигурацией
1919
-**Интеграционные тесты** с реальным API
20+
-**Evolution Foundation Models** поддержка с `project_id`
21+
-**Готовые примеры** для Foundation Models
22+
-**Передовые AI модели** включая DeepSeek-R1, Qwen2.5 и другие
2023

2124
## 📦 Установка
2225

@@ -37,24 +40,40 @@ client = OpenAI(api_key="sk-...")
3740
# ✅ СТАЛО (Evolution OpenAI)
3841
from evolution_openai import OpenAI
3942

43+
# Для обычного использования
4044
client = OpenAI(
41-
key_id="your_key_id", secret="your_secret", base_url="https://your-model-endpoint.cloud.ru/v1"
45+
key_id="your_key_id",
46+
secret="your_secret",
47+
base_url="https://your-model-endpoint.cloud.ru/v1"
48+
)
49+
50+
# Для Evolution Foundation Models
51+
client = OpenAI(
52+
key_id="your_key_id",
53+
secret="your_secret",
54+
base_url="https://foundation-models.api.cloud.ru/api/gigacube/openai/v1",
55+
project_id="your_project_id" # Для Evolution Foundation Models
4256
)
4357

4458
# Все остальное работает ТОЧНО ТАК ЖЕ!
4559
response = client.chat.completions.create(
46-
model="default", messages=[{"role": "user", "content": "Hello!"}]
60+
model="default", # или "deepseek-ai/DeepSeek-R1-Distill-Llama-70B" для Foundation Models
61+
messages=[{"role": "user", "content": "Hello!"}]
4762
)
4863
```
4964

5065
### Основное использование
5166

67+
#### Обычное использование
68+
5269
```python
5370
from evolution_openai import OpenAI
5471

55-
# Инициализация client
72+
# Инициализация client для обычного использования
5673
client = OpenAI(
57-
key_id="your_key_id", secret="your_secret", base_url="https://your-model-endpoint.cloud.ru/v1"
74+
key_id="your_key_id",
75+
secret="your_secret",
76+
base_url="https://your-model-endpoint.cloud.ru/v1"
5877
)
5978

6079
# Chat Completions
@@ -70,12 +89,54 @@ response = client.chat.completions.create(
7089
print(response.choices[0].message.content)
7190
```
7291

92+
#### 🚀 Evolution Foundation Models
93+
94+
Библиотека полностью поддерживает **Evolution Foundation Models** - платформу для работы с передовыми AI моделями на Cloud.ru. Ключевые возможности:
95+
96+
- **Автоматическое управление Project ID** - добавляет заголовок `x-project-id` автоматически
97+
- **Передовые модели** - DeepSeek-R1, Qwen2.5, RefalMachine/RuadaptQwen2.5-7B-Lite-Beta
98+
- **Специальный endpoint** - `https://foundation-models.api.cloud.ru/api/gigacube/openai/v1`
99+
- **Полная совместимость** с OpenAI SDK - все методы работают идентично
100+
101+
```python
102+
from evolution_openai import OpenAI
103+
104+
# Инициализация для Evolution Foundation Models
105+
client = OpenAI(
106+
key_id="your_key_id",
107+
secret="your_secret",
108+
base_url="https://foundation-models.api.cloud.ru/api/gigacube/openai/v1",
109+
project_id="your_project_id" # Автоматически добавляется в заголовки
110+
)
111+
112+
# Использование Foundation Models
113+
response = client.chat.completions.create(
114+
model="deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
115+
messages=[
116+
{"role": "system", "content": "You are a helpful assistant."},
117+
{"role": "user", "content": "What is artificial intelligence?"},
118+
],
119+
max_tokens=150
120+
)
121+
122+
print(response.choices[0].message.content)
123+
```
124+
73125
### Streaming
74126

75127
```python
76-
# Streaming responses
128+
# Для обычного использования
129+
stream = client.chat.completions.create(
130+
model="default",
131+
messages=[{"role": "user", "content": "Tell me a story"}],
132+
stream=True
133+
)
134+
135+
# Для Foundation Models
77136
stream = client.chat.completions.create(
78-
model="default", messages=[{"role": "user", "content": "Tell me a story"}], stream=True
137+
model="deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
138+
messages=[{"role": "user", "content": "Tell me a story"}],
139+
stream=True
79140
)
80141

81142
for chunk in stream:
@@ -91,14 +152,24 @@ from evolution_openai import AsyncOpenAI
91152

92153

93154
async def main():
155+
# Для обычного использования
94156
client = AsyncOpenAI(
95157
key_id="your_key_id",
96158
secret="your_secret",
97159
base_url="https://your-model-endpoint.cloud.ru/v1",
98160
)
99161

162+
# Для Foundation Models
163+
client = AsyncOpenAI(
164+
key_id="your_key_id",
165+
secret="your_secret",
166+
base_url="https://foundation-models.api.cloud.ru/api/gigacube/openai/v1",
167+
project_id="your_project_id", # Опционально для Foundation Models
168+
)
169+
100170
response = await client.chat.completions.create(
101-
model="default", messages=[{"role": "user", "content": "Async hello!"}]
171+
model="deepseek-ai/DeepSeek-R1-Distill-Llama-70B", # или "default" для обычного использования
172+
messages=[{"role": "user", "content": "Async hello!"}]
102173
)
103174

104175
print(response.choices[0].message.content)
@@ -118,6 +189,8 @@ asyncio.run(main())
118189
cp env.example .env
119190
```
120191

192+
#### Для обычного использования:
193+
121194
```bash
122195
# .env файл
123196
EVOLUTION_KEY_ID=your_key_id_here
@@ -128,6 +201,19 @@ ENABLE_INTEGRATION_TESTS=false
128201
LOG_LEVEL=INFO
129202
```
130203

204+
#### Для Evolution Foundation Models:
205+
206+
```bash
207+
# .env файл для Foundation Models
208+
EVOLUTION_KEY_ID=your_key_id_here
209+
EVOLUTION_SECRET=your_secret_here
210+
EVOLUTION_BASE_URL=https://foundation-models.api.cloud.ru/api/gigacube/openai/v1
211+
EVOLUTION_PROJECT_ID=your_project_id_here # Обязательно для Foundation Models
212+
EVOLUTION_TOKEN_URL=https://iam.api.cloud.ru/api/v1/auth/token
213+
ENABLE_INTEGRATION_TESTS=false
214+
LOG_LEVEL=INFO
215+
```
216+
131217
```python
132218
import os
133219
from evolution_openai import OpenAI
@@ -140,6 +226,7 @@ client = OpenAI(
140226
key_id=os.getenv("EVOLUTION_KEY_ID"),
141227
secret=os.getenv("EVOLUTION_SECRET"),
142228
base_url=os.getenv("EVOLUTION_BASE_URL"),
229+
project_id=os.getenv("EVOLUTION_PROJECT_ID"), # Опционально для Foundation Models
143230
)
144231
```
145232

@@ -180,29 +267,11 @@ with client:
180267
response = client.chat.completions.create(...)
181268
```
182269

183-
## 🔍 Управление токенами
184-
185-
```python
186-
# Получить информацию о токене
187-
token_info = client.get_token_info()
188-
print(token_info)
189-
# {
190-
# "has_token": true,
191-
# "expires_at": "2024-01-01T12:00:00",
192-
# "is_valid": true,
193-
# "buffer_seconds": 30
194-
# }
195-
196-
# Принудительно обновить токен
197-
new_token = client.refresh_token()
198-
199-
# Получить текущий токен
200-
current_token = client.current_token
201-
```
202270

203271
## 📚 Документация
204272

205273
- [API Documentation](https://cloud-ru-tech.github.io/evolution-openai-python)
274+
- [Evolution Foundation Models Guide](https://cloud-ru-tech.github.io/evolution-openai-python/foundation_models)
206275
- [Migration Guide](https://cloud-ru-tech.github.io/evolution-openai-python/migration)
207276
- [Examples](examples/)
208277
- [Changelog](CHANGELOG.md)

docs/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
sys.path.insert(0, os.path.abspath(".."))
1414

1515
project = "Evolution OpenAI"
16-
copyright = "2024, Evolution OpenAI Team"
17-
author = "Evolution OpenAI Team"
16+
copyright = "2024, Evolution ML Inference Team"
17+
author = "Evolution ML Inference Team"
1818
release = "1.0.0"
1919

2020
# -- General configuration ---------------------------------------------------

0 commit comments

Comments
 (0)