From c28f54d51be64bb633a5a4d186874db8c56b49fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=93=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=B0=D1=80=D1=8C?= Date: Mon, 28 Sep 2026 19:11:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D1=8B=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-dataset/robot-move-data.py | 13 ++++++++++-- config.yml | 23 ++++++++++++++++++--- llm/config.py | 35 ++++++++++++++++++++++++++++---- 3 files changed, 62 insertions(+), 9 deletions(-) diff --git a/build-dataset/robot-move-data.py b/build-dataset/robot-move-data.py index 836cf29..710c259 100644 --- a/build-dataset/robot-move-data.py +++ b/build-dataset/robot-move-data.py @@ -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) diff --git a/config.yml b/config.yml index b48e39b..f553233 100644 --- a/config.yml +++ b/config.yml @@ -1,4 +1,21 @@ llm: - provider: codex # openai, codex - model: gpt-5.6-luna - # model: qwen/qwen3-8b \ No newline at end of file + 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} diff --git a/llm/config.py b/llm/config.py index 61bf973..d194454 100644 --- a/llm/config.py +++ b/llm/config.py @@ -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)