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

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 import BaseModel
from pydantic_ai import Agent from pydantic_ai import Agent
from pydantic_ai.settings import ModelSettings
from llm.config import load_config from llm.config import load_config
from llm.factory import LLMModelProvider from llm.factory import LLMModelProvider
@@ -22,8 +23,16 @@ async def main():
# model = LLMModelProvider.create_openai_compatible(model_name="qwen/qwen3-8b", # model = LLMModelProvider.create_openai_compatible(model_name="qwen/qwen3-8b",
# api_key=os.getenv("API_KEY"), # api_key=os.getenv("API_KEY"),
# base_url=os.getenv("BASE_URL")) # base_url=os.getenv("BASE_URL"))
agent = Agent(model=model) agent = Agent(model=model,
result = await agent.run('Привет, дай мне ответ') 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) print(result.output)
+20 -3
View File
@@ -1,4 +1,21 @@
llm: llm:
provider: codex # openai, codex provider: openai # openai, codex
model: gpt-5.6-luna # model: gpt-5.6-luna
# model: qwen/qwen3-8b 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 from typing import Annotated, Literal
import yaml 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"] provider: Literal["codex"]
model: str = "gpt-5.6-luna" model: str = "gpt-5.6-luna"
credential_path: Path | None = None credential_path: Path | None = None
class OpenAiConfig(BaseModel): class OpenAiConfig(ConfigModel):
provider: Literal["openai"] provider: Literal["openai"]
model: str model: str
@@ -25,11 +29,34 @@ LLMConfig = Annotated[
Field(discriminator="provider") 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 llm: LLMConfig
generation: GenerationConfig = GenerationConfig()
runtime: RuntimeConfig = RuntimeConfig()
prompts: PromptsConfig
# Loader
def load_config(path: str | Path = "config.yaml") -> AppConfig: def load_config(path: str | Path = "config.yaml") -> AppConfig:
path = Path(path) path = Path(path)