Files
agno/cookbook/agent_concepts/knowledge/s3_pdf_kb.py
T
e67ee57766 Phidata -> Agno (#1935)
# Changelog

This is a major refactor to be coupled with the launch of Agno AI.

## Interface Changes:

- `phi.model.x` → `agno.models.x`
- `phi.knowledge_base.x` → `agno.knowledge.x` (applies to all knowledge
bases)
- `phi.document.reader.xxx` → `agno.document.reader.xxx_reader` (applies
to all document readers)
- All Agno toolkits are now suffixed with `Tools`. E.g. `DuckDuckGo` →
`DuckDuckGoTools`
- Multi-modal interface updates:
- `agent.run(images=[])` and `agent.print_response(images=[])` is now of
type `Image`
        
        ```python
        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`
        
        ```python
        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`
        
        ```python
        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`
        
        ```python
        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`
        
        ```python
        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`
        
        ```python
        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`
        
        ```python
        class AudioOutput(BaseModel):
            id: str
            content: str  # Base64 encoded
            expires_at: int
            transcript: str
        ```
        
- Models:
    - `Hermes` → `OllamaHermes`
    - `AzureOpenAIChat` → `AzureOpenAI`
    - `CohereChat` → `Cohere`
    - `DeepSeekChat` → `DeepSeek`
    - `GeminiOpenAIChat` → `GeminiOpenAI`
    - `HuggingFaceChat` → `HuggingFace`
- Embedders now all take `id` instead of `model` as a parameter. For
example
    
    ```python
    db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"
    
    knowledge_base = PDFUrlKnowledgeBase(
urls=["https://phi-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
    - `PgAgentStorage` → `PostgresAgentStorage`
    - `SqlAgentStorage` → `SqliteAgentStorage`
    - `MongoAgentStorage` → `MongoDbAgentStorage`
    - `S2AgentStorage` → `SingleStoreAgentStorage`
- Workflow Storage class
    - `SqlWorkflowStorage` → `SqliteWorkflowStorage`
    - `PgWorkflowStorage` → `PostgresWorkflowStorage`
    - `MongoWorkflowStorage` → `MongoDbWorkflowStorage`
- Knowledge Base
- `phi.knowledge.pdf.PDFUrlKnowledgeBase` →
`agno.knowledge.pdf_url.PDFUrlKnowledgeBase`
- `phi.knowledge.csv.CSVUrlKnowledgeBase` →
`agno.knowledge.csv_url.CSVUrlKnowledgeBase`
- Readers
    - `phi.document.reader.arxiv` → `agno.document.reader.arxiv_reader`
    - `phi.document.reader.docx` → `agno.document.reader.docx_reader`
    - `phi.document.reader.json` → `agno.document.reader.json_reader`
    - `phi.document.reader.pdf` → `agno.document.reader.pdf_reader`
- `phi.document.reader.s3.pdf` → `agno.document.reader.s3.pdf_reader`
- `phi.document.reader.s3.text` → `agno.document.reader.s3.text_reader`
    - `phi.document.reader.text` → `agno.document.reader.text_reader`
- `phi.document.reader.website` → `agno.document.reader.website_reader`

## Improvements:

- **Dataclasses** - Changed various instances of Pydantic models to
dataclasses to improve the speed.

## 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

---------

Co-authored-by: Ashpreet <[email protected]>
Co-authored-by: Yash Pratap Solanky <[email protected]>
Co-authored-by: Willem Carel de Jongh <[email protected]>
Co-authored-by: Anurag <[email protected]>
Co-authored-by: Ayush <[email protected]>
Co-authored-by: Manthan Gupta <[email protected]>
Co-authored-by: ysolanky <[email protected]>
Co-authored-by: ansub <[email protected]>
Co-authored-by: Manthan Gupta <[email protected]>
2025-01-30 14:26:41 +02:00

16 lines
544 B
Python

from agno.agent import Agent
from agno.knowledge.s3.pdf import S3PDFKnowledgeBase
from agno.vectordb.pgvector import PgVector
db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"
knowledge_base = S3PDFKnowledgeBase(
bucket_name="agno-public",
key="recipes/ThaiRecipes.pdf",
vector_db=PgVector(table_name="recipes", db_url=db_url),
)
knowledge_base.load(recreate=False) # Comment out after first run
agent = Agent(knowledge=knowledge_base, search_knowledge=True)
agent.print_response("How to make Thai curry?", markdown=True)