import asyncio
from typing import Optional
from pydantic import BaseModel, Field
from upsonic import Agent, Chat
class UserProfile(BaseModel):
name: Optional[str] = Field(default=None, description="User name")
favorite_language: Optional[str] = Field(default=None, description="Favorite programming language")
expertise_level: Optional[str] = Field(default=None, description="Beginner, Intermediate, or Expert")
async def main():
agent = Agent("anthropic/claude-sonnet-4-5")
chat = Chat(
session_id="session1",
user_id="user1",
agent=agent,
user_profile_schema=UserProfile,
user_analysis_memory=True
)
await chat.invoke("Hi, I am Bob. I am an expert Python developer.")
response = await chat.invoke("What do you know about me?")
print(response)
if __name__ == "__main__":
asyncio.run(main())