From 0890d000c1e6a7847eddb66a98a7c52210665703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B8=D1=80=D0=B8=D0=BB=D0=BB=20=D0=9A=D1=83=D1=82?= =?UTF-8?q?=D0=BB=D0=B0=D1=85=D0=BC=D0=B5=D1=82=D0=BE=D0=B2?= Date: Tue, 26 May 2026 12:11:07 +0000 Subject: [PATCH] add main.py --- main.py | 53 +++++++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/main.py b/main.py index d599fdb..f96e573 100644 --- a/main.py +++ b/main.py @@ -5,37 +5,42 @@ from langchain_openai import ChatOpenAI from langchain_core.output_parsers import PydanticOutputParser class TaskCard(BaseModel): - title: str = Field(..., description="Title of the task") - subject: str = Field(..., description="Subject or domain of the task") - deadline_hint: str | None = Field(None, description="Short hint about deadline") - deliverable_type: str = Field(..., description="What to submit: report, code, presentation etc.") - grading_hints: list[str] = Field(default_factory=list, description="Hints for grading such as completeness, code example") + title: str = Field(..., description="Краткое название задачи") + subject: str = Field(..., description="Область знаний, к которой относится задача") + deadline_hint: str = Field(..., description="Краткая подсказка о сроке выполнения") + deliverable_type: str = Field(..., description="Тип сдачи: отчёт, код, презентация и т.п.") + grading_hints: list[str] = Field(..., description="Список ключевых критериев оценки") + +# LLM configuration – BroJS +llm = ChatOpenAI( + model="openai/gpt-oss-20b:free", + base_url="https://platform.brojs.ru/jrnl-bh/api/inference/v1", + api_key=os.getenv("JOURNAL_MCP_PAT"), + temperature=0.5, +) parser = PydanticOutputParser(pydantic_object=TaskCard) -prompt_template = PromptTemplate( + +prompt = PromptTemplate( template=""" -Given the following informal task description:\n{task_description}\n\nReturn a JSON object with fields: title, subject, deadline_hint, deliverable_type, grading_hints.\n{format_instructions} +Ниже приведено описание задания от преподавателя. Нужно извлечь из него структуру задачи в виде JSON, соответствующую модели TaskCard. + +{format_instructions} + +Описание задания: +{task_description} """, input_variables=["task_description"], partial_variables={"format_instructions": parser.get_format_instructions()}, ) -llm = ChatOpenAI( - model="openai/gpt-oss-20b:free", - base_url="https://openrouter.ai/api/v1", - api_key=os.getenv("OPENAI_API_KEY"), - temperature=0.0, -) - -async def main(): - task_desc = "Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода." - chain = prompt_template | llm | parser - result = await chain.ainvoke({"task_description": task_desc}) - print("Parsed object:\n", result) - print("\nSummary:") - for key, value in result.items(): - print(f"{key}: {value}") +chain = prompt | llm | parser if __name__ == "__main__": - import asyncio - asyncio.run(main()) \ No newline at end of file + # Пример входа + example = "Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода." + result: TaskCard = chain.invoke({"task_description": example}) + print("\n--- Валидированный объект ---") + print(result.model_dump()) + print("\n--- Человекочитаемая сводка ---") + print(f"Задача: {result.title}\nТема: {result.subject}\nСрок: {result.deadline_hint}\nТип сдачи: {result.deliverable_type}\nКритерии оценки: {', '.join(result.grading_hints)}")