2025-01-29
v3.0.0

This is the major refactor from phidata to agno, released with the official launch of Agno AI.

See the migration guide for additional guidance.

Interface Changes:

  • phi.model.xagno.models.x

  • phi.knowledge_base.xagno.knowledge.x (applies to all knowledge bases)

  • phi.document.reader.xxxagno.document.reader.xxx_reader (applies to all document readers)

  • All Agno toolkits are now suffixed with Tools. E.g. DuckDuckGoDuckDuckGoTools

  • Multi-modal interface updates:

    • agent.run(images=[]) and agent.print_response(images=[]) is now of type Image

      class Image(BaseModel):
          url: Optional[str] = None  # Remote location for image
          filepath: Optional[Union[Path, str]] = None  # Absolute local location for image
          content: Optional[Any] = None  # Actual image bytes content
          detail: Optional[str] = None # low, medium, high or auto (per OpenAI spec https://platform.openai.com/docs/guides/vision?lang=node#low-or-high-fidelity-image-understanding)
          id: Optional[str] = None
      
    • agent.run(audio=[]) and agent.print_response(audio=[]) is now of type Audio

      class Audio(BaseModel):
          filepath: Optional[Union[Path, str]] = None  # Absolute local location for audio
          content: Optional[Any] = None  # Actual audio bytes content
          format: Optional[str] = None
      
    • agent.run(video=[]) and agent.print_response(video=[]) is now of type Video

      class Video(BaseModel):
          filepath: Optional[Union[Path, str]] = None  # Absolute local location for video
          content: Optional[Any] = None  # Actual video bytes content
      
    • RunResponse.images is now a list of type ImageArtifact

      class ImageArtifact(Media):
          id: str
          url: str  # Remote location for file
          alt_text: Optional[str] = None
      
    • RunResponse.audio is now a list of type AudioArtifact

      class AudioArtifact(Media):
          id: str
          url: Optional[str] = None  # Remote location for file
          base64_audio: Optional[str] = None  # Base64-encoded audio data
          length: Optional[str] = None
          mime_type: Optional[str] = None
      
    • RunResponse.videos is now a list of type VideoArtifact

      class VideoArtifact(Media):
          id: str
          url: str  # Remote location for file
          eta: Optional[str] = None
          length: Optional[str] = None
      
    • RunResponse.response_audio is now of type AudioOutput

      class AudioOutput(BaseModel):
          id: str
          content: str  # Base64 encoded
          expires_at: int
          transcript: str
      
  • Models:

    • HermesOllamaHermes
    • AzureOpenAIChatAzureOpenAI
    • CohereChatCohere
    • DeepSeekChatDeepSeek
    • GeminiOpenAIChatGeminiOpenAI
    • HuggingFaceChatHuggingFace
  • Embedders now all take id instead of model as a parameter. For example

    db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"
    
    knowledge_base = PDFUrlKnowledgeBase(
        urls=["https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"],
        vector_db=PgVector(
            table_name="recipes",
            db_url=db_url,
            embedder=OllamaEmbedder(id="llama3.2", dimensions=3072),
        ),
    )
    knowledge_base.load(recreate=True)
    
  • Agent Storage class

    • PgAgentStoragePostgresDbAgentStorage
    • SqlAgentStorageSqliteDbAgentStorage
    • MongoAgentStorageMongoDbAgentStorage
    • S2AgentStorageSingleStoreDbAgentStorage
  • Workflow Storage class

    • SqlWorkflowStorageSqliteDbWorkflowStorage
    • PgWorkflowStoragePostgresDbWorkflowStorage
    • MongoWorkflowStorageMongoDbWorkflowStorage
  • Knowledge Base

    • phi.knowledge.pdf.PDFUrlKnowledgeBaseagno.knowledge.pdf_url.PDFUrlKnowledgeBase
    • phi.knowledge.csv.CSVUrlKnowledgeBaseagno.knowledge.csv_url.CSVUrlKnowledgeBase
  • Readers

    • phi.document.reader.arxivagno.document.reader.arxiv_reader
    • phi.document.reader.docxagno.document.reader.docx_reader
    • phi.document.reader.jsonagno.document.reader.json_reader
    • phi.document.reader.pdfagno.document.reader.pdf_reader
    • phi.document.reader.s3.pdfagno.document.reader.s3.pdf_reader
    • phi.document.reader.s3.textagno.document.reader.s3.text_reader
    • phi.document.reader.textagno.document.reader.text_reader
    • phi.document.reader.websiteagno.document.reader.website_reader

Improvements:

  • Dataclasses - Changed various instances of Pydantic models to dataclasses to improve the speed.
  • Moved Embedder class from pydantic to data class

Removals

  • Removed all references to Assistant
  • Removed all references to llm
  • Removed the PhiTools tool

Bug Fixes:

  • Fixed semantic chunking by replacing similarity_threshold param with threshold param