mirror of
https://github.com/symfony/ai.git
synced 2026-03-23 23:42:18 +01:00
148 lines
5.5 KiB
Markdown
148 lines
5.5 KiB
Markdown
# AGENTS.md
|
|
|
|
This file provides guidance to AI agents when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
This is the Symfony AI monorepo containing multiple components and bundles that integrate AI capabilities into PHP applications. The project is organized as a collection of independent packages under the `src/` directory, each with their own composer.json, tests, and dependencies.
|
|
|
|
## Architecture
|
|
|
|
### Core Components
|
|
- **Platform** (`src/platform/`): Unified interface to AI platforms (OpenAI, Anthropic, Azure, Gemini, VertexAI, etc.)
|
|
- **Agent** (`src/agent/`): Framework for building AI agents that interact with users and perform tasks
|
|
- **Chat** (`src/chat/`): Chat interface components for building conversational AI applications
|
|
- **Store** (`src/store/`): Data storage abstraction with indexing and retrieval for vector databases
|
|
- **Mate** (`src/mate/`): AI-powered coding assistant for PHP development
|
|
|
|
### Bridges
|
|
Each core component has bridges in `src/<component>/src/Bridge/` that provide integrations with specific third-party services. Bridges are dedicated Composer packages with their own dependencies and can be installed independently.
|
|
|
|
### Integration Bundles
|
|
- **AI Bundle** (`src/ai-bundle/`): Symfony integration for Platform, Store, and Agent components
|
|
- **MCP Bundle** (`src/mcp-bundle/`): Symfony integration for official MCP SDK
|
|
|
|
### Supporting Directories
|
|
- **Examples** (`examples/`): Standalone examples demonstrating component usage across different AI platforms
|
|
- **Demo** (`demo/`): Full Symfony web application showcasing components working together
|
|
- **Fixtures** (`fixtures/`): Shared test fixtures for multi-modal testing (images, audio, PDFs)
|
|
|
|
## Development Commands
|
|
|
|
### Testing
|
|
Each component has its own test suite. Run tests for specific components:
|
|
```bash
|
|
# Platform component
|
|
cd src/platform && vendor/bin/phpunit
|
|
|
|
# Agent component
|
|
cd src/agent && vendor/bin/phpunit
|
|
|
|
# AI Bundle
|
|
cd src/ai-bundle && vendor/bin/phpunit
|
|
|
|
# Demo application
|
|
cd demo && vendor/bin/phpunit
|
|
```
|
|
|
|
### Code Quality
|
|
The project uses PHP CS Fixer with Symfony coding standards. Always run from the repository root:
|
|
```bash
|
|
# Fix code style issues
|
|
vendor/bin/php-cs-fixer fix
|
|
|
|
# Fix specific directories
|
|
vendor/bin/php-cs-fixer fix src/platform/
|
|
```
|
|
|
|
Static analysis with PHPStan (component-specific):
|
|
```bash
|
|
cd src/platform && vendor/bin/phpstan analyse
|
|
```
|
|
|
|
### Development Linking
|
|
Use the `./link` script to symlink local development versions:
|
|
```bash
|
|
# Link components to external project
|
|
./link /path/to/project
|
|
|
|
# Copy instead of symlink
|
|
./link --copy /path/to/project
|
|
|
|
# Rollback changes
|
|
./link --rollback /path/to/project
|
|
```
|
|
|
|
### Running Examples
|
|
Examples are self-contained and can be run individually:
|
|
```bash
|
|
cd examples
|
|
php anthropic/chat.php
|
|
php openai/function-calling.php
|
|
```
|
|
|
|
Many examples require environment variables (see `.env` files in example directories).
|
|
|
|
### Demo Application
|
|
The demo is a full Symfony application:
|
|
```bash
|
|
cd demo
|
|
composer install
|
|
symfony server:start
|
|
```
|
|
|
|
## Component Dependencies
|
|
|
|
Components are designed to work independently but have these relationships:
|
|
- Agent depends on Platform for AI communication
|
|
- AI Bundle integrates Platform, Agent, and Store
|
|
- MCP Bundle provides official MCP SDK integration
|
|
- Store is standalone but often used with Agent for RAG applications
|
|
|
|
## Testing Architecture
|
|
|
|
Each component uses:
|
|
- **PHPUnit 11+** for testing framework
|
|
- Component-specific `phpunit.xml.dist` configurations
|
|
- Shared fixtures in `/fixtures` for multi-modal content
|
|
- MockHttpClient pattern preferred over response mocking
|
|
|
|
## Development Notes
|
|
|
|
- Each component in `src/` is a separate Composer package with its own dependencies
|
|
- Components follow Symfony coding standards and use `@Symfony` PHP CS Fixer rules
|
|
- The monorepo structure allows independent versioning while maintaining shared development workflow
|
|
- Do not use void return type for testcase methods
|
|
- Always run PHP-CS-Fixer to ensure proper code style
|
|
- Always add a newline at the end of the file
|
|
- Prefer $this->assert* over self::assert* in tests
|
|
- Never add Claude as co-author in the commits
|
|
- Add @author tags to newly introduced classes by the user
|
|
- Prefer classic if statements over short-circuit evaluation when possible
|
|
- Define array shapes for parameters and return types
|
|
- Use project specific exceptions instead of global exception classes like \RuntimeException, \InvalidArgumentException etc.
|
|
- NEVER mention Claude as co-author in commits
|
|
- Avoid using the `empty()` function; prefer explicit checks like `[] === $array`, `'' === $string`, or `null === $value`
|
|
|
|
## Version Documentation
|
|
|
|
### UPGRADE.md
|
|
- Document breaking changes in the root `UPGRADE.md` file
|
|
- Format: Use version headers like `UPGRADE FROM 0.X to 0.Y` with sections per component
|
|
- Include code examples showing before/after changes with diff syntax
|
|
|
|
### CHANGELOG.md
|
|
- Each component has its own `CHANGELOG.md` in its root directory
|
|
- Add entries for new features, and deprecations under the appropriate version heading
|
|
- Format entries as bullet points starting with "Add", "Fix", "Deprecate", etc.
|
|
|
|
### Pull Requests
|
|
- Always use the PR template from `.github/PULL_REQUEST_TEMPLATE.md`
|
|
- Fill in the table at the top of the PR description with appropriate values:
|
|
- Bug fix?: yes/no
|
|
- New feature?: yes/no (update CHANGELOG.md files for new features)
|
|
- Docs?: yes/no (required for new features)
|
|
- Issues: Fix #... (prefix each issue number with "Fix #")
|
|
- License: MIT
|
|
- Provide a clear description of the changes below the table
|