Skip to content

ZAM-369: Implement codebase_ai.py in analyzers #109

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 5 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions codegen-on-oss/codegen_on_oss/analyzers/README_codebase_ai.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Codebase AI Module

The `codebase_ai.py` module provides AI-powered code analysis and generation capabilities for the Codegen analyzer system. It enables the generation of system prompts, context, and tools for AI models to analyze and generate code.

## Features

- **System Prompt Generation**: Create tailored prompts for AI models to analyze and modify code
- **Context Generation**: Format code and additional information for AI models
- **Tool Definitions**: Define tools for AI models to interact with the codebase
- **Flagging System**: Determine whether code elements should be flagged for modification

## Usage

### Basic Usage

```python
from codegen_on_oss.analyzers.codebase_ai import CodebaseAI, generate_system_prompt, generate_context

# Create a CodebaseAI instance
codebase_ai = CodebaseAI()

# Generate a system prompt
system_prompt = codebase_ai.generate_system_prompt()

# Generate a system prompt with a target
system_prompt = codebase_ai.generate_system_prompt(target=editable_object)

# Generate a system prompt with context
system_prompt = codebase_ai.generate_system_prompt(context=context_object)

# Generate a system prompt with both target and context
system_prompt = codebase_ai.generate_system_prompt(target=editable_object, context=context_object)

# Generate tools for AI models
tools = codebase_ai.generate_tools()
```

### Integration with Analyzers

The `codebase_ai.py` module can be integrated with other analyzers to provide AI-powered analysis capabilities:

```python
from codegen_on_oss.analyzers.codebase_ai import CodebaseAI
from codegen_on_oss.analyzers.codebase_analyzer import CodebaseAnalyzer


class AICodebaseAnalyzer(CodebaseAnalyzer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.codebase_ai = CodebaseAI()

def analyze_with_ai(self, file):
# Generate a system prompt for the file
system_prompt = self.codebase_ai.generate_system_prompt(target=file)

# Use the system prompt with an AI model
# ...
```

## API Reference

### Functions

- `generate_system_prompt(target=None, context=None)`: Generate a system prompt for AI-powered code analysis and generation
- `generate_flag_system_prompt(target, context=None)`: Generate a system prompt for determining whether to flag a code element
- `generate_context(context=None)`: Generate a context string for AI models
- `generate_tools()`: Generate a list of tools for AI models
- `generate_flag_tools()`: Generate a list of tools for flagging code elements

### Classes

#### CodebaseAI

The `CodebaseAI` class provides methods for generating system prompts, context, and tools for AI models to analyze and generate code.

##### Methods

- `generate_system_prompt(target=None, context=None)`: Generate a system prompt for AI-powered code analysis and generation
- `generate_flag_system_prompt(target, context=None)`: Generate a system prompt for determining whether to flag a code element
- `generate_context(context=None)`: Generate a context string for AI models
- `generate_tools()`: Generate a list of tools for AI models
- `generate_flag_tools()`: Generate a list of tools for flagging code elements

## Examples

See the `examples/codebase_ai_example.py` file for a complete example of how to use the `codebase_ai.py` module.

## Testing

The `codebase_ai.py` module includes comprehensive tests in the `tests/analyzers/test_codebase_ai.py` file. Run the tests using pytest:

```bash
pytest tests/analyzers/test_codebase_ai.py
```
78 changes: 49 additions & 29 deletions codegen-on-oss/codegen_on_oss/analyzers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
CodeQualityPlugin,
DependencyPlugin,
)

# Main API interface
from codegen_on_oss.analyzers.api import (
CodegenAnalyzerAPI,
Expand All @@ -23,10 +24,20 @@
api_get_visualization,
create_api,
)

# Legacy analyzer interfaces (for backward compatibility)
from codegen_on_oss.analyzers.base_analyzer import BaseCodeAnalyzer

# Core analysis modules
from codegen_on_oss.analyzers.code_quality import CodeQualityAnalyzer
from codegen_on_oss.analyzers.codebase_ai import (
CodebaseAI,
generate_context,
generate_flag_system_prompt,
generate_flag_tools,
generate_system_prompt,
generate_tools,
)
from codegen_on_oss.analyzers.codebase_analysis import (
get_class_summary,
get_codebase_summary,
Expand All @@ -39,9 +50,11 @@
)
from codegen_on_oss.analyzers.codebase_analyzer import CodebaseAnalyzer
from codegen_on_oss.analyzers.dependencies import DependencyAnalyzer

# Diff tracking
from codegen_on_oss.analyzers.diff_lite import ChangeType, DiffLite
from codegen_on_oss.analyzers.error_analyzer import CodebaseAnalyzer as ErrorAnalyzer

# Issue tracking system
from codegen_on_oss.analyzers.issues import (
AnalysisType,
Expand All @@ -51,6 +64,7 @@
IssueCollection,
IssueSeverity,
)

# Analysis result models
from codegen_on_oss.analyzers.models.analysis_result import (
AnalysisResult,
Expand All @@ -60,49 +74,55 @@
)

__all__ = [
# Main API
"CodegenAnalyzerAPI",
"create_api",
"api_analyze_codebase",
"api_analyze_pr",
"api_get_visualization",
"api_get_static_errors",
# Analysis results
"AnalysisResult",
"AnalysisType",
# Modern architecture
"AnalyzerManager",
"AnalyzerPlugin",
"AnalyzerRegistry",
# Legacy interfaces (for backward compatibility)
"BaseCodeAnalyzer",
# Diff tracking
"ChangeType",
"CodeLocation",
# Core analyzers
"CodeQualityAnalyzer",
"CodeQualityPlugin",
"CodeQualityResult",
# AI-powered code analysis
"CodebaseAI",
"CodebaseAnalyzer",
# Main API
"CodegenAnalyzerAPI",
"DependencyAnalyzer",
"DependencyPlugin",
"DependencyResult",
"DiffLite",
"ErrorAnalyzer",
# Issue tracking
"Issue",
"IssueCategory",
"IssueCollection",
"IssueSeverity",
"AnalysisType",
"IssueCategory",
"CodeLocation",
# Analysis results
"AnalysisResult",
"CodeQualityResult",
"DependencyResult",
"PrAnalysisResult",
# Core analyzers
"CodeQualityAnalyzer",
"DependencyAnalyzer",
"api_analyze_codebase",
"api_analyze_pr",
"api_get_static_errors",
"api_get_visualization",
"create_api",
"generate_context",
"generate_flag_system_prompt",
"generate_flag_tools",
"generate_system_prompt",
"generate_tools",
"get_class_summary",
# Codebase analysis utilities
"get_codebase_summary",
"get_dependency_graph",
"get_file_complexity_metrics",
"get_file_summary",
"get_class_summary",
"get_function_summary",
"get_symbol_summary",
"get_dependency_graph",
"get_symbol_references",
"get_file_complexity_metrics",
# Diff tracking
"ChangeType",
"DiffLite",
# Legacy interfaces (for backward compatibility)
"BaseCodeAnalyzer",
"CodebaseAnalyzer",
"ErrorAnalyzer",
"get_symbol_summary",
]

Loading
Loading