open ai service

This commit is contained in:
2026-02-08 12:05:05 +06:00
parent d7722ad81d
commit 3209827e92
29 changed files with 2175 additions and 0 deletions

View File

@@ -0,0 +1,133 @@
# OpenAI Service Setup Guide
This document explains how to configure and use the OpenAI service for parsing book metadata from images.
## Overview
The Bookshelf app now supports two AI services for book cover analysis:
1. **Google Gemini** (original service)
2. **OpenAI** (new alternate service)
The app will automatically try OpenAI first if configured, and fall back to Gemini if OpenAI fails or is not configured.
## Configuration
### Step 1: Configure API Keys
Edit `lib/config/api_config.dart`:
```dart
class ApiConfig {
// Gemini API (original service)
static const String geminiApiKey = 'YOUR_GEMINI_API_KEY_HERE';
// OpenAI API (new service)
static const String openaiApiKey = 'YOUR_OPENAI_API_KEY_HERE';
// OpenAI API endpoint
static const String openaiBaseUrl = 'http://localhost:8317';
}
```
### Step 2: Replace API Keys
Replace the placeholder values with your actual API keys:
- **OpenAI API Key**: Get from your OpenAI account or local OpenAI-compatible server
- **Gemini API Key**: Get from [Google AI Studio](https://makersuite.google.com/app/apikey) (fallback)
## OpenAI Service Details
### Endpoint Configuration
The OpenAI service is configured to use:
- **Default endpoint**: `http://localhost:8317/v1/chat/completions`
- **Model**: `glm-4` (vision-capable)
- **Max tokens**: 500
- **Temperature**: 0.3
**Important**: The server must support the `glm-4` model. This is a required model name for this OpenAI-compatible endpoint.
You can customize the endpoint by changing the `openaiBaseUrl` in `api_config.dart`.
### How It Works
1. The app captures an image using the camera
2. The image is converted to base64 format
3. A prompt is sent to the OpenAI API with the image
4. The API analyzes the image and extracts:
- Book title
- Author name
- Genre (fiction/fantasy/science/detective/biography/other)
- Brief annotation/description
5. The parsed data is returned and pre-filled in the add book form
### Service Priority
The app follows this priority order:
1. **OpenAI** (if API key is configured) - tried first
2. **Gemini** (if OpenAI fails or is not configured) - fallback
This ensures you always have a working service available.
## Testing
To test the OpenAI service:
1. Make sure your OpenAI server is running at `http://localhost:8317`
2. Configure your OpenAI API key in `api_config.dart`
3. Run the app: `flutter run`
4. Navigate to the "Add Book" screen
5. Tap the camera icon to scan a book cover
6. The app will use OpenAI to analyze the image
## Troubleshooting
### "API ключ не настроен (ни OpenAI, ни Gemini)"
This error means neither OpenAI nor Gemini API keys are configured. At least one must be set in `api_config.dart`.
### "Не удалось распознать книгу"
This can occur if:
- The API request failed (check your server logs)
- The image quality is poor
- The API returned invalid JSON
- Network connectivity issues
### OpenAI Service Not Working
If OpenAI fails, the app will automatically fall back to Gemini. Check the console output to see which service is being used:
```
Using OpenAI service for analysis
```
or
```
Using Gemini service for analysis
```
### Network Issues
Make sure:
- Your OpenAI server is accessible from the device/emulator
- For Android emulator: Use `10.0.2.2` instead of `localhost`
- For iOS simulator: `localhost` should work
- For physical device: Use your machine's actual IP address
## Files Modified
1. **lib/services/openai_service.dart** - New OpenAI service implementation
2. **lib/config/api_config.dart** - Added OpenAI configuration
3. **lib/screens/scanner_screen.dart** - Updated to support both services
4. **lib/screens/add_book_screen.dart** - Updated to pass OpenAI configuration
5. **pubspec.yaml** - Added `http` package dependency
## Future Enhancements
Possible improvements:
- Add UI option to manually select which service to use
- Add retry logic with different services
- Implement caching of recognized books
- Add support for multiple OpenAI models
- Add detailed error messages and logging