From 50e92df2a6bfa592f945bdd67a8d46035377fa57 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 11:55:46 +0000 Subject: [PATCH] add main.py --- main.py | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/main.py b/main.py index 793c836..d599fdb 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,24 @@ import os -from langchain_openai import ChatOpenAI -from langchain_core.messages import HumanMessage -from langchain_output_parsers import PydanticOutputParser from pydantic import BaseModel, Field +from langchain_core.prompts import PromptTemplate +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 area") - deadline_hint: str | None = Field(None, description="Hint about deadline") - deliverable_type: str = Field(..., description="What to submit (report, code, etc.)") - grading_hints: list[str] = Field(default_factory=list, description="Hints for grading") + 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") + +parser = PydanticOutputParser(pydantic_object=TaskCard) +prompt_template = 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} +""", + input_variables=["task_description"], + partial_variables={"format_instructions": parser.get_format_instructions()}, +) llm = ChatOpenAI( model="openai/gpt-oss-20b:free", @@ -17,21 +26,16 @@ llm = ChatOpenAI( api_key=os.getenv("OPENAI_API_KEY"), temperature=0.0, ) -parser = PydanticOutputParser(pydantic_object=TaskCard) -prompt_template = """ -You are a task summarizer. -Given the following informal description of an assignment, produce a JSON object matching TaskCard model. -Description: {description} - -{format_instructions} -""" -prompt = prompt_template | llm | parser async def main(): - description = "Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода." - result = await prompt.ainvoke({"description": description}) - print(result["messages"][-1].content) + 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}") if __name__ == "__main__": import asyncio - asyncio.run(main()) + asyncio.run(main()) \ No newline at end of file