Добавлены параметры конфигурации

This commit is contained in:
Даниил Грабарь
2026-09-28 19:11:00 +03:00
parent 17c960438e
commit c28f54d51b
3 changed files with 62 additions and 9 deletions
+11 -2
View File
@@ -4,6 +4,7 @@ from dotenv import load_dotenv
# from pydantic import BaseModel
from pydantic_ai import Agent
from pydantic_ai.settings import ModelSettings
from llm.config import load_config
from llm.factory import LLMModelProvider
@@ -22,8 +23,16 @@ async def main():
# model = LLMModelProvider.create_openai_compatible(model_name="qwen/qwen3-8b",
# api_key=os.getenv("API_KEY"),
# base_url=os.getenv("BASE_URL"))
agent = Agent(model=model)
result = await agent.run('Привет, дай мне ответ')
agent = Agent(model=model,
system_prompt=config.prompts.system,
instructions=config.prompts.instructions)
settings = ModelSettings(
**config.generation.model_dump()
)
user_prompt = config.prompts.user.format(task="Повтори сообщение")
result = await agent.run(user_prompt,
model_settings=settings)
print(result.output)
+20 -3
View File
@@ -1,4 +1,21 @@
llm:
provider: codex # openai, codex
model: gpt-5.6-luna
# model: qwen/qwen3-8b
provider: openai # openai, codex
# model: gpt-5.6-luna
model: qwen/qwen3-8b
generation:
temperature: 0.7
max_tokens: 4096
runtime:
concurrency: 1 # Колличество одновременных запросов
prompts:
instructions: |
Инструкция промпт
system: |
Системный промпт
user: |
Сформируй план выполнения следующей задачи:
{task}
+31 -4
View File
@@ -2,17 +2,21 @@ from pathlib import Path
from typing import Annotated, Literal
import yaml
from pydantic import BaseModel, Field
from pydantic import BaseModel, ConfigDict, Field
class CodexConfig(BaseModel):
class ConfigModel(BaseModel):
model_config = ConfigDict(extra="forbid")
# LLM
class CodexConfig(ConfigModel):
provider: Literal["codex"]
model: str = "gpt-5.6-luna"
credential_path: Path | None = None
class OpenAiConfig(BaseModel):
class OpenAiConfig(ConfigModel):
provider: Literal["openai"]
model: str
@@ -25,11 +29,34 @@ LLMConfig = Annotated[
Field(discriminator="provider")
]
# Generation
class GenerationConfig(ConfigModel):
temperature: float = Field(default=.7,
ge=.0,
le=2.0)
max_tokens: int = Field(default=4096,
gt=0)
class AppConfig(BaseModel):
# Runtime
class RuntimeConfig(ConfigModel):
concurrency: int = Field(ge=1, default=1)
# Prompts
class PromptsConfig(ConfigModel):
instructions: str
system: str
user: str
# Application
class AppConfig(ConfigModel):
llm: LLMConfig
generation: GenerationConfig = GenerationConfig()
runtime: RuntimeConfig = RuntimeConfig()
prompts: PromptsConfig
# Loader
def load_config(path: str | Path = "config.yaml") -> AppConfig:
path = Path(path)