mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-06-23 02:51:34 +00:00
Added ollama as AI provider
Some checks are pending
Build assets artifact / Build assets artifact (push) Waiting to run
Docker Image Build / build (linux/amd64, amd64, ubuntu-latest) (push) Waiting to run
Docker Image Build / build (linux/arm/v7, armv7, ubuntu-24.04-arm) (push) Waiting to run
Docker Image Build / build (linux/arm64, arm64, ubuntu-24.04-arm) (push) Waiting to run
Docker Image Build / merge (push) Blocked by required conditions
Docker Image Build (FrankenPHP) / build (linux/amd64, amd64, ubuntu-latest) (push) Waiting to run
Docker Image Build (FrankenPHP) / build (linux/arm/v7, armv7, ubuntu-24.04-arm) (push) Waiting to run
Docker Image Build (FrankenPHP) / build (linux/arm64, arm64, ubuntu-24.04-arm) (push) Waiting to run
Docker Image Build (FrankenPHP) / merge (push) Blocked by required conditions
Static analysis / Static analysis (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, sqlite) (push) Waiting to run
Some checks are pending
Build assets artifact / Build assets artifact (push) Waiting to run
Docker Image Build / build (linux/amd64, amd64, ubuntu-latest) (push) Waiting to run
Docker Image Build / build (linux/arm/v7, armv7, ubuntu-24.04-arm) (push) Waiting to run
Docker Image Build / build (linux/arm64, arm64, ubuntu-24.04-arm) (push) Waiting to run
Docker Image Build / merge (push) Blocked by required conditions
Docker Image Build (FrankenPHP) / build (linux/amd64, amd64, ubuntu-latest) (push) Waiting to run
Docker Image Build (FrankenPHP) / build (linux/arm/v7, armv7, ubuntu-24.04-arm) (push) Waiting to run
Docker Image Build (FrankenPHP) / build (linux/arm64, arm64, ubuntu-24.04-arm) (push) Waiting to run
Docker Image Build (FrankenPHP) / merge (push) Blocked by required conditions
Static analysis / Static analysis (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, sqlite) (push) Waiting to run
Unlike the LMStudio one it also features an API key and proper model auto suggestion
This commit is contained in:
parent
9f686c88fe
commit
b60887c71d
9 changed files with 194 additions and 1 deletions
|
|
@ -59,6 +59,7 @@
|
|||
"spatie/db-dumper": "^3.3.1",
|
||||
"symfony/ai-bundle": "^0.10.0",
|
||||
"symfony/ai-lm-studio-platform": "^v0.10.0",
|
||||
"symfony/ai-ollama-platform": "^0.10.0",
|
||||
"symfony/ai-open-router-platform": "^0.10.0",
|
||||
"symfony/apache-pack": "^1.0",
|
||||
"symfony/asset": "7.4.*",
|
||||
|
|
|
|||
88
composer.lock
generated
88
composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "ec87cdf341410bbd499a9debb5c862ab",
|
||||
"content-hash": "6a79fa73091c2e15bce035c85c2d61ed",
|
||||
"packages": [
|
||||
{
|
||||
"name": "amphp/amp",
|
||||
|
|
@ -11061,6 +11061,92 @@
|
|||
],
|
||||
"time": "2026-06-15T22:48:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/ai-ollama-platform",
|
||||
"version": "v0.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/ai-ollama-platform.git",
|
||||
"reference": "1542f19b78362cafc034c219f5bc9a5a239a0ffb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/ai-ollama-platform/zipball/1542f19b78362cafc034c219f5bc9a5a239a0ffb",
|
||||
"reference": "1542f19b78362cafc034c219f5bc9a5a239a0ffb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2",
|
||||
"symfony/ai-platform": "^0.10",
|
||||
"symfony/http-client": "^7.3|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^2.1",
|
||||
"phpstan/phpstan-phpunit": "^2.0",
|
||||
"phpstan/phpstan-strict-rules": "^2.0",
|
||||
"phpunit/phpunit": "^11.5.53"
|
||||
},
|
||||
"type": "symfony-ai-platform",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"url": "https://github.com/symfony/ai",
|
||||
"name": "symfony/ai"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\AI\\Platform\\Bridge\\Ollama\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Christopher Hertel",
|
||||
"email": "mail@christopher-hertel.de"
|
||||
},
|
||||
{
|
||||
"name": "Oskar Stark",
|
||||
"email": "oskarstark@googlemail.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Ollama platform bridge for Symfony AI",
|
||||
"keywords": [
|
||||
"Bridge",
|
||||
"ai",
|
||||
"local",
|
||||
"ollama",
|
||||
"platform"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/ai-ollama-platform/tree/v0.10.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-06-15T22:48:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/ai-open-router-platform",
|
||||
"version": "v0.10.0",
|
||||
|
|
|
|||
5
config/packages/ai_ollama_platform.yaml
Normal file
5
config/packages/ai_ollama_platform.yaml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
ai:
|
||||
platform:
|
||||
ollama:
|
||||
endpoint: '%env(string:settings:ai_ollama:endpoint)%'
|
||||
api_key: '%env(string:settings:ai_ollama:apiKey)%'
|
||||
|
|
@ -25,3 +25,10 @@ You need to supply an API key for OpenRouter to use it as an AI platform in Part
|
|||
|
||||
[LMStudio](https://lmstudio.ai/) is a local LLM hosting solution that allows you to run LLMs on your own hardware. You can use LMStudio to host your own LLM and connect it to Part-DB for AI features.
|
||||
Currently only LMStudio without any authentication is supported. Supply your LMStudio instance URL (including the port) to use it as an AI platform in Part-DB.
|
||||
You have to set a model by hand, as suggestions currently do not work yet. Ensure the context length is suitable for your application.
|
||||
|
||||
### Ollama
|
||||
|
||||
[Ollama](https://ollama.com/) is another local LLM hosting solution that allows you to run LLMs on your own hardware. You can use Ollama to host your own LLM and connect it to Part-DB for AI features.
|
||||
Supply your Ollama instance URL (including the port) and an optional API key for authentication to use it as an AI platform in Part-DB. The model selector should give you suggestions about available models.
|
||||
Ensure the context length is suitable for your application.
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ declare(strict_types=1);
|
|||
namespace App\Services\AI;
|
||||
|
||||
use App\Settings\AISettings\LMStudioSettings;
|
||||
use App\Settings\AISettings\OllamaSettings;
|
||||
use App\Settings\AISettings\OpenRouterSettings;
|
||||
use Symfony\Contracts\Translation\TranslatableInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
|
@ -32,6 +33,7 @@ enum AIPlatforms: string implements TranslatableInterface
|
|||
{
|
||||
case OPENROUTER = 'openrouter';
|
||||
case LMSTUDIO = 'lmstudio';
|
||||
case OLLAMA = 'ollama';
|
||||
|
||||
/**
|
||||
* Returns the name attribute of the service tag for this platform, which is used to register the platform in the AIPlatformRegistry
|
||||
|
|
@ -52,6 +54,7 @@ enum AIPlatforms: string implements TranslatableInterface
|
|||
return match ($this) {
|
||||
self::LMSTUDIO => LMStudioSettings::class,
|
||||
self::OPENROUTER => OpenRouterSettings::class,
|
||||
self::OLLAMA => OllamaSettings::class,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,4 +40,7 @@ class AISettings
|
|||
|
||||
#[EmbeddedSettings]
|
||||
public ?LMStudioSettings $lmstudio = null;
|
||||
|
||||
#[EmbeddedSettings]
|
||||
public ?OllamaSettings $ollama = null;
|
||||
}
|
||||
|
|
|
|||
58
src/Settings/AISettings/OllamaSettings.php
Normal file
58
src/Settings/AISettings/OllamaSettings.php
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
/*
|
||||
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||
*
|
||||
* Copyright (C) 2019 - 2026 Jan Böhmer (https://github.com/jbtronics)
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
namespace App\Settings\AISettings;
|
||||
|
||||
use App\Form\Type\APIKeyType;
|
||||
use App\Services\AI\AIPlatformSettingsInterface;
|
||||
use App\Settings\SettingsIcon;
|
||||
use Jbtronics\SettingsBundle\Metadata\EnvVarMode;
|
||||
use Jbtronics\SettingsBundle\Settings\Settings;
|
||||
use Jbtronics\SettingsBundle\Settings\SettingsParameter;
|
||||
use Jbtronics\SettingsBundle\Settings\SettingsTrait;
|
||||
use Symfony\Component\Form\Extension\Core\Type\UrlType;
|
||||
use Symfony\Component\Translation\StaticMessage;
|
||||
use Symfony\Component\Translation\TranslatableMessage as TM;
|
||||
|
||||
#[Settings(name: 'ai_ollama', label: new TM("settings.ai.ollama"))]
|
||||
#[SettingsIcon("fa-robot")]
|
||||
class OllamaSettings implements AIPlatformSettingsInterface
|
||||
{
|
||||
use SettingsTrait;
|
||||
|
||||
#[SettingsParameter(label: new TM("settings.ai.ollama.endpoint"),
|
||||
formType: UrlType::class,
|
||||
formOptions: ["attr" => ["placeholder" => new StaticMessage("http://localhost:11434")]],
|
||||
envVar: "AI_OLLAMA_ENDPOINT", envVarMode: EnvVarMode::OVERWRITE)]
|
||||
public ?string $endpoint = null;
|
||||
|
||||
#[SettingsParameter(label: new TM("settings.ai.ollama.apiKey"),
|
||||
formType: APIKeyType::class,
|
||||
envVar: "AI_OLLAMA_API_KEY", envVarMode: EnvVarMode::OVERWRITE)]
|
||||
public ?string $apiKey = null;
|
||||
|
||||
public function isAIPlatformEnabled(): bool
|
||||
{
|
||||
return $this->endpoint !== null && $this->endpoint !== "";
|
||||
}
|
||||
}
|
||||
12
symfony.lock
12
symfony.lock
|
|
@ -411,6 +411,18 @@
|
|||
"config/packages/ai_lm_studio_platform.yaml"
|
||||
]
|
||||
},
|
||||
"symfony/ai-ollama-platform": {
|
||||
"version": "0.10",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
"version": "0.1",
|
||||
"ref": "2f0ac0a8bc59c4e46b47a962a3ad7fe8104457d6"
|
||||
},
|
||||
"files": [
|
||||
"config/packages/ai_ollama_platform.yaml"
|
||||
]
|
||||
},
|
||||
"symfony/ai-open-router-platform": {
|
||||
"version": "0.8",
|
||||
"recipe": {
|
||||
|
|
|
|||
|
|
@ -13619,6 +13619,24 @@ Buerklin-API Authentication server:
|
|||
<target>Host URL</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="UeFbCNh" name="settings.ai.ollama">
|
||||
<segment state="translated">
|
||||
<source>settings.ai.ollama</source>
|
||||
<target>Ollama</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="9nfJ_vr" name="settings.ai.ollama.endpoint">
|
||||
<segment state="translated">
|
||||
<source>settings.ai.ollama.endpoint</source>
|
||||
<target>Endpoint URL</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="67dSwE5" name="settings.ai.ollama.apiKey">
|
||||
<segment state="translated">
|
||||
<source>settings.ai.ollama.apiKey</source>
|
||||
<target>API Key</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="kuDv.So" name="browser_plugin.recent_pages.title">
|
||||
<segment state="translated">
|
||||
<source>browser_plugin.recent_pages.title</source>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue