Files
task-69dd4221f309a98be0006b2e/main.py
T
2026-05-26 11:45:26 +00:00

38 lines
1.4 KiB
Python

import os
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
from langchain_output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field
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")
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,
)
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)
if __name__ == "__main__":
import asyncio
asyncio.run(main())