This commit is contained in:
commit
46af290db3
100 files changed
+16663
No files matched your search
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"ollama": {
|
||||
"default_model": "qwen2.5:1.5b",
|
||||
"available_models": [
|
||||
{
|
||||
"id": "qwen2.5:1.5b",
|
||||
"name": "Qwen 2.5 1.5B (Local)",
|
||||
"description": "Компактная модель для быстрых задач",
|
||||
"context_length": 32768
|
||||
},
|
||||
{
|
||||
"id": "qwen2.5:7b",
|
||||
"name": "Qwen 2.5 7B (Local)",
|
||||
"description": "Баланс скорости и качества",
|
||||
"context_length": 32768
|
||||
},
|
||||
{
|
||||
"id": "qwen2.5:14b",
|
||||
"name": "Qwen 2.5 14B (Local)",
|
||||
"description": "Высокое качество, требует больше ресурсов",
|
||||
"context_length": 32768
|
||||
}
|
||||
]
|
||||
},
|
||||
"openrouter": {
|
||||
"default_model": "qwen/qwen-2.5-coder-7b-instruct",
|
||||
"available_models": [
|
||||
{
|
||||
"id": "qwen/qwen-2.5-coder-7b-instruct",
|
||||
"name": "Qwen 2.5 Coder 7B",
|
||||
"description": "Специализированная модель для кода, быстрая и дешевая",
|
||||
"context_length": 32768,
|
||||
"pricing": "$0.0001/1K tokens"
|
||||
},
|
||||
{
|
||||
"id": "qwen/qwen-2.5-coder-32b-instruct",
|
||||
"name": "Qwen 2.5 Coder 32B",
|
||||
"description": "Мощная модель для сложных задач",
|
||||
"context_length": 32768,
|
||||
"pricing": "$0.0008/1K tokens"
|
||||
},
|
||||
{
|
||||
"id": "qwen/qwen-2.5-7b-instruct",
|
||||
"name": "Qwen 2.5 7B Instruct",
|
||||
"description": "Универсальная модель для текста",
|
||||
"context_length": 32768,
|
||||
"pricing": "$0.0001/1K tokens"
|
||||
},
|
||||
{
|
||||
"id": "qwen/qwen-2.5-72b-instruct",
|
||||
"name": "Qwen 2.5 72B Instruct",
|
||||
"description": "Максимальное качество, дороже",
|
||||
"context_length": 32768,
|
||||
"pricing": "$0.0008/1K tokens"
|
||||
},
|
||||
{
|
||||
"id": "meta-llama/llama-3.1-8b-instruct",
|
||||
"name": "Llama 3.1 8B",
|
||||
"description": "Универсальная модель Meta",
|
||||
"context_length": 131072,
|
||||
"pricing": "$0.0001/1K tokens"
|
||||
},
|
||||
{
|
||||
"id": "google/gemma-2-9b-it",
|
||||
"name": "Gemma 2 9B",
|
||||
"description": "Хороша для креативных задач",
|
||||
"context_length": 8192,
|
||||
"pricing": "$0.0001/1K tokens"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Загружаем переменные окружения из .env файла
|
||||
load_dotenv()
|
||||
|
||||
|
||||
class Settings:
|
||||
# API ключи
|
||||
OPENROUTER_API_KEY: str = os.getenv("OPENROUTER_API_KEY", "")
|
||||
OPENROUTER_BASE_URL: str = os.getenv(
|
||||
"OPENROUTER_BASE_URL", "https://openrouter.ai/api/v1"
|
||||
)
|
||||
|
||||
# Ollama — в Docker это будет не localhost, а имя контейнера или IP хоста
|
||||
OLLAMA_BASE_URL: str = os.getenv("OLLAMA_BASE_URL", "http://localhost:11434")
|
||||
|
||||
# Путь к данным — по умолчанию локальная папка, в Docker будет монтироваться volume
|
||||
DATA_DIR: str = os.getenv("DATA_DIR", "data")
|
||||
|
||||
# Окружение
|
||||
ENVIRONMENT: str = os.getenv("ENVIRONMENT", "development")
|
||||
|
||||
# CORS — разрешённые источники (в production это будет домен)
|
||||
CORS_ORIGINS: list = os.getenv("CORS_ORIGINS", "http://localhost:3000").split(",")
|
||||
|
||||
# JWT секрет — в production обязательно переопределить через .env
|
||||
JWT_SECRET_KEY: str = os.getenv(
|
||||
"JWT_SECRET_KEY", "your-super-secret-key-change-in-production"
|
||||
)
|
||||
|
||||
def validate(self) -> dict:
|
||||
"""Проверить, какие провайдеры настроены"""
|
||||
return {
|
||||
"ollama": True, # Ollama всегда доступна локально
|
||||
"openrouter": bool(
|
||||
self.OPENROUTER_API_KEY
|
||||
and self.OPENROUTER_API_KEY != "your_api_key_here"
|
||||
),
|
||||
"data_dir": self.DATA_DIR,
|
||||
"cors_origins": self.CORS_ORIGINS,
|
||||
}
|
||||
|
||||
|
||||
# Singleton instance
|
||||
settings = Settings()
|
||||
Reference in new issue
Block a user