Skip to content

Commit eb2ef01

Browse files
committed
Merge branch 'development' into hawk/testing
# Conflicts: # _changelog/next-upgrade.md # _changelog/next.md # _documentation/100-GettingStarted/100-Local-Installation.md # _documentation/2-GettingStarted/2-Local Docker Installation.md # _documentation/200-Configuration/100-Dot-Env.md # _documentation/200-Configuration/7.1-File Conversion.md # _documentation/3-architecture/10.2-AI Models and Tools.md # _documentation/3-architecture/6-Model Connection.md # _documentation/3-architecture/7-File Storage.md # app/Casts/AsInstance.php # app/Console/Commands/Ai/ListModels.php # app/Console/Commands/Ai/SyncConfigFiles.php # app/Http/Controllers/StreamController.php # app/Models/Ai/AiModel.php # app/Models/Ai/AiModelDescription.php # app/Models/ExtApp.php # app/Models/ExtAppUser.php # app/Models/Invitation.php # app/Models/Message.php # app/Models/Room.php # app/Models/UserKeychainValue.php # app/Providers/StorageServiceProvider.php # app/Services/Ai/Agents/Adapters/AbstractLaravelAgent.php # app/Services/Ai/Agents/Adapters/AbstractTextGeneratingAgent.php # app/Services/Ai/Agents/AgentRegistry.php # app/Services/Ai/Agents/Implementations/AbstractAgentFactory.php # app/Services/Ai/Agents/Implementations/Chat/ChatAgentFromLegacyRequestFactory.php # app/Services/Ai/Agents/Implementations/Chat/ChatToolResolver.php # app/Services/Ai/Agents/Middleware/LoggingMiddleware.php # app/Services/Ai/Agents/Utils/AlternatingMessageHistory.php # app/Services/Ai/Agents/Utils/MessageMetaBlocks.php # app/Services/Ai/Agents/Utils/UserMessageAttachments.php # app/Services/Ai/AiService.php # app/Services/Ai/ConfigFileSync/ConfigFileSyncer.php # app/Services/Ai/ConfigFileSync/SyncActionDetector.php # app/Services/Ai/ConfigFileSync/Syncers/McpServerSyncer.php # app/Services/Ai/ConfigFileSync/Syncers/ModelAndProviderSyncer.php # app/Services/Ai/ConfigFileSync/Syncers/SystemModelSyncer.php # app/Services/Ai/ConfigFileSync/Syncers/SystemPromptSyncer.php # app/Services/Ai/Exceptions/AiExceptionInterface.php # app/Services/Ai/Exceptions/InvalidAiManagerException.php # app/Services/Ai/Exceptions/InvalidProviderConfigurationException.php # app/Services/Ai/Exceptions/ModelListResponseException.php # app/Services/Ai/LaravelAi/Drivers/GeminiExtended/ExtendedGeminiGateway.php # app/Services/Ai/LaravelAi/ExtendedAiManager.php # app/Services/Ai/LaravelAi/Values/ProviderDriverPortal.php # app/Services/Ai/LaravelAi/Values/UrlMultiCitation.php # app/Services/Ai/ModelInformation/Enrichment/Implementations/LiteLlm/AbstractLiteLlmDataStore.php # app/Services/Ai/ModelInformation/Enrichment/Implementations/LiteLlm/Applier/ChatModelInfoApplier.php # app/Services/Ai/ModelInformation/Enrichment/Implementations/LiteLlm/LiteLlmApiDataStore.php # app/Services/Ai/ModelInformation/Enrichment/Implementations/LiteLlm/LiteLlmModelData.php # app/Services/Ai/ModelInformation/Enrichment/Implementations/LiteLlm/StaticLiteLlmDataStore.php # app/Services/Ai/ModelInformation/Enrichment/Implementations/LiteLlmApiEnricher.php # app/Services/Ai/ModelInformation/Enrichment/Implementations/StaticGwdgEnricher.php # app/Services/Ai/ModelInformation/Enrichment/ModelInfoEnrichingTrait.php # app/Services/Ai/ModelInformation/ModelInfoApplier.php # app/Services/Ai/ModelInformation/ModelInfoFetcher.php # app/Services/Ai/Models/Flags/AiModelFlagRegistry.php # app/Services/Ai/Models/Io/Values/AiModelIoMethods.php # app/Services/Ai/Models/Limits/Values/ChatAiModelLimits.php # app/Services/Ai/Models/Limits/Values/NullAiModelLimits.php # app/Services/Ai/Models/Pricing/Values/Chat/ChatAiModelPricing.php # app/Services/Ai/Models/Pricing/Values/Chat/ChatPricingRange.php # app/Services/Ai/Models/Pricing/Values/NullPricing.php # app/Services/Ai/Models/Repositories/AiModelDescriptionRepository.php # app/Services/Ai/Models/Settings/Values/AiModelSettings.php # app/Services/Ai/Providers/Adapters/AbstractProviderAdapter.php # app/Services/Ai/Providers/Adapters/Contracts/ProviderAdapterCreatesDriverInterface.php # app/Services/Ai/Providers/Adapters/Contracts/ProviderAdapterInterface.php # app/Services/Ai/Providers/Adapters/DriverFactory.php # app/Services/Ai/Providers/Adapters/DriverFactoryFactory.php # app/Services/Ai/Providers/Adapters/Implementations/AnthropicAdapter.php # app/Services/Ai/Providers/Adapters/Implementations/AwsBedrockAdapter.php # app/Services/Ai/Providers/Adapters/Implementations/AzureOpenAiAdapter.php # app/Services/Ai/Providers/Adapters/Implementations/DeepseekAdapter.php # app/Services/Ai/Providers/Adapters/Implementations/GeminiAdapter.php # app/Services/Ai/Providers/Adapters/Implementations/GwdgAdapter.php # app/Services/Ai/Providers/Adapters/Implementations/MistralAdapter.php # app/Services/Ai/Providers/Adapters/Implementations/OllamaAdapter.php # app/Services/Ai/Providers/Adapters/Implementations/OpenAiAdapter.php # app/Services/Ai/Providers/Adapters/Implementations/OpenAiLikeAdapter.php # app/Services/Ai/Providers/Adapters/Implementations/OpenRouterAdapter.php # app/Services/Ai/Providers/Adapters/ModelList/ModelListClient.php # app/Services/Ai/Providers/Adapters/ProviderAdapterRegistry.php # app/Services/Ai/Providers/Adapters/Traits/OpenAiModelListTrait.php # app/Services/Ai/Providers/AiProviderProxyResolver.php # app/Services/Ai/Providers/Repositories/AiProviderRepository.php # app/Services/Ai/Providers/Values/AiProviderProxy.php # app/Services/Ai/Providers/Values/WellKnownProviderSettings.php # app/Services/Ai/StatusCheck/AiModelDemandCollection.php # app/Services/Ai/StatusCheck/AiModelOnlineStatusCollection.php # app/Services/Ai/StatusCheck/ModelStatusUpdater.php # app/Services/Ai/SystemModels/SystemModelRepository.php # app/Services/Ai/SystemPrompts/SystemPromptRepository.php # app/Services/Ai/Tools/AbstractTool.php # app/Services/Ai/Tools/FunctionToolSyncer.php # app/Services/Ai/Tools/LaravelAi/LaravelMcpTool.php # app/Services/Ai/Tools/LaravelAi/LaravelToolConverter.php # app/Services/Ai/Tools/LaravelAi/LaravelToolResolver.php # app/Services/Ai/Tools/Mcp/HawkiMcpClient.php # app/Services/Ai/Tools/Mcp/McpClientFactory.php # app/Services/Ai/Tools/Mcp/McpToolSyncer.php # app/Services/Ai/Tools/Repositories/AiToolRepository.php # app/Services/Ai/Tools/Repositories/McpServerRepository.php # app/Services/Ai/Tools/Values/McpServerTimeouts.php # app/Services/Ai/Tools/Values/McpToolDefinition.php # app/Services/Ai/UsageAnalyzerService.php # app/Services/Ai/Utils/AbstractTagList.php # app/Services/Ai/Utils/StreamChunkHandler.php # app/Services/Ai/Utils/Traits/TranslatableRegistryTrait.php # app/Services/Ai/Values/TokenUsage.php # app/Services/Chat/Message/Handlers/GroupMessageHandler.php # app/Services/Chat/Room/Traits/RoomFunctions.php # app/Services/Config/AbstractConfig.php # app/Services/Config/ConfigService.php # app/Services/Config/Contracts/PublicConfigInterface.php # app/Services/Config/Registries/PublicConfigRegistry.php # app/Services/ExtApp/Listeners/PersonalAccessTokenRemoveListener.php # app/Services/ExtApp/Listeners/UserRemovalListener.php # app/Services/ExtApp/Repositories/UserRepository.php # app/Services/ExternalContent/CitationUrlCleaner.php # app/Services/ExternalContent/ExternalImageProxy.php # app/Services/ExternalContent/FavIconProxy.php # app/Services/ExternalContent/ProxyClient.php # app/Services/ExternalContent/UrlCleaner.php # app/Services/ExternalContent/Values/ResolvedExternalImage.php # app/Services/ExternalContent/WebsiteMetadataLoader.php # app/Services/FileConverter/Exception/ConversionFailedException.php # app/Services/FileConverter/Exception/InvalidFileConverterConfigException.php # app/Services/FileConverter/Handlers/GwdgDoclingConverter.php # app/Services/FileConverter/Handlers/HawkiDocConverter.php # app/Services/FileConverter/Handlers/KreuzbergConverter.php # app/Services/FileConverter/Interfaces/FileConverterInterface.php # app/Services/Frontend/Config/SecurityConfig.php # app/Services/Frontend/Config/TransferConfig.php # app/Services/Frontend/Config/WebsocketTransferConfig.php # app/Services/Frontend/Connection/ConnectionFactory.php # app/Services/Frontend/Connection/Values/Connection.php # app/Services/Frontend/Connection/Values/ConnectionType.php # app/Services/Frontend/Connection/Values/ExtAppConnectRequestPayload.php # app/Services/Frontend/Connection/Values/ExtAppSecrets.php # app/Services/Frontend/Connection/Values/Userinfo.php # app/Services/Frontend/Listeners/MarkAllCurrentMigrationsAsAppliedForNewUser.php # app/Services/Frontend/Migrations/Exceptions/FrontendMigrationExceptionInterface.php # app/Services/Frontend/Migrations/Exceptions/InvalidUserDataFinderResultException.php # app/Services/Frontend/Migrations/Exceptions/NoDownForFrontendMigrationsExceptionException.php # app/Services/Frontend/Migrations/Facades/FrontendMigrator.php # app/Services/Frontend/Migrations/FrontendMigrationBuilder.php # app/Services/Frontend/Migrations/Make/BackendMigrationCreator.php # app/Services/Frontend/Migrations/Make/FrontendMigrationCreator.php # app/Services/Frontend/Migrations/Make/JsMigrationCreator.php # app/Services/Frontend/Migrations/Repositories/AppliedFrontendMigrationRepository.php # app/Services/Frontend/Migrations/Repositories/FrontendMigrationRepository.php # app/Services/Frontend/Migrations/Repositories/FrontendMigrationUserdataRepository.php # app/Services/Frontend/Migrations/Values/FrontendMigrationRunType.php # app/Services/Frontend/Migrations/Values/MigrationToApply.php # app/Services/Frontend/View/CssLayers.php # app/Services/Frontend/View/EarlyFrontendBridge.php # app/Services/Frontend/View/SettingsPanelComponent.php # app/Services/Frontend/View/SvelteComponent.php # app/Services/Message/Listeners/ThreadParentUpdateListener.php # app/Services/Message/MessageDb.php # app/Services/Storage/AbstractFileStorage.php # app/Services/Storage/Config/AbstractStorageConfig.php # app/Services/Storage/Config/AvatarStorageConfig.php # app/Services/Storage/Config/FileStorageConfig.php # app/Services/Storage/Exception/CouldNotInflectStoredFieldIdentifierException.php # app/Services/Storage/Exception/InvalidStorageFileIdentifierStringGivenException.php # app/Services/Storage/Exception/StorageExceptionInterface.php # app/Services/Storage/Interfaces/StorageServiceInterface.php # app/Services/Storage/Listeners/DeleteStoredFileOnAttachmentDeletion.php # app/Services/Storage/UrlGenerator.php # app/Services/Storage/Utils/ContentExtractor.php # app/Services/Storage/Values/FileCollection.php # app/Services/Storage/Values/FileReference.php # app/Services/Storage/Values/FileType.php # app/Services/Storage/Values/PlainTextLanguageType.php # app/Services/Storage/Values/StorageServiceContext.php # app/Services/Storage/Values/StoredFile.php # app/Services/Storage/Values/StoredFileExtract.php # app/Services/Storage/Values/StoredFileIdentifier.php # app/Services/System/Database/Eloquent/ContextualScopes/Contexts/MakesDisableNotAllowedCallbacksTrait.php # app/Services/System/Database/Eloquent/ContextualScopes/Contexts/ModelScopeContext.php # app/Services/System/Database/Eloquent/ContextualScopes/Contexts/ModelScopeContextState.php # app/Services/System/Database/Eloquent/ContextualScopes/Contexts/ScopeContext.php # app/Services/System/Database/Eloquent/ContextualScopes/Contexts/ScopeContextState.php # app/Services/System/Database/Eloquent/ContextualScopes/ContextualScopeWrapper.php # app/Services/System/Database/Eloquent/ContextualScopes/Exceptions/InvalidScopeDefinitionException.php # app/Services/System/Database/Eloquent/ContextualScopes/HasContextualScopesTrait.php # app/Services/System/Database/Eloquent/ContextualScopes/ScopeRegistrar.php # app/Services/System/Database/Eloquent/Repositories/Traits/GuessesModelNameTrait.php # app/Services/System/Database/Eloquent/Repositories/Value/ScopeOverrides.php # app/Services/System/Exceptions/NotImplementedException.php # app/Services/System/Health/HealthChecker.php # app/Services/System/Health/Value/HealthCheckResultCollection.php # app/Services/System/JsonApi/ValueSerializer.php # app/Utils/Imaging/RandomGradientImage.php # composer.json # composer.lock # config/model_lists/gwdg_models.php # database/migrations/2026_03_12_151809_initial_ai_models_sync.php # package-lock.json # package.json # phpstan.neon # public/css/chat_modules.css # public/js/ai_chat_functions.js # public/js/groupchat_functions.js # public/js/home_functions.js # public/js/message_functions.js # public/js/stream_functions.js # resources/js/components/chat/composer/ComposerActionButtons.svelte # resources/js/components/chat/composer/ComposerAssistantButton.svelte # resources/js/components/chat/composer/FileChips.svelte # resources/js/components/chat/composer/FilePicker.svelte # resources/js/components/chat/composer/ModePanel.svelte # resources/js/components/chat/composer/ModelConflictPicker.svelte # resources/js/components/chat/composer/SettingsMenu.svelte # resources/js/components/chat/composer/SystemPromptDialog.svelte # resources/js/components/chat/composer/ToolChips.svelte # resources/js/components/chat/composer/ToolMenu.svelte # resources/js/components/chat/composer/ToolMenuDetail.svelte # resources/js/components/chat/composer/ToolMenuListItem.svelte # resources/js/components/chat/composer/utils/ToolIcon.svelte # resources/js/components/chat/header/ExportMenu.svelte # resources/js/components/chat/nameMenu/ChatNameMenu.svelte # resources/js/components/chat/nameMenu/RoomNameMenu.svelte # resources/js/components/ui/button/Button.svelte # resources/js/components/ui/dialog/Dialog.svelte # resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.svelte # resources/js/components/ui/dropdown-menu/DropdownMenuItem.svelte # resources/js/components/ui/popover/InfoPopover.svelte # resources/js/components/ui/select/SingleSelect.svelte # resources/js/components/ui/toast/Toaster.svelte # resources/js/components/util/markdown/Markdown.svelte # resources/js/data/migrations/migrator.ts # resources/js/oldUi/OldUiBridge.svelte.ts # resources/js/snippets/AttachmentDropdown.svelte # resources/js/snippets/ChatSidebarButton.svelte # resources/js/stores/AiHandleStore.svelte.ts # resources/language/chat_de_DE.json # resources/language/chat_en_US.json # resources/language/legacy_en_US.json # resources/views/layouts/gateway.blade.php # resources/views/layouts/home.blade.php # resources/views/partials/gateway/handshake.blade.php # resources/views/partials/gateway/register.blade.php # tests/Unit/Casts/AsInstanceTest.php # tests/Unit/Utils/Casts/AbstractCastableObjectTest.php # tests/Unit/Utils/Casts/Casters/EncryptedCasterTest.php # tests/Unit/Utils/Validation/JsonSchemaValidatorTest.php
2 parents f01a4f8 + ebe82c1 commit eb2ef01

559 files changed

Lines changed: 36525 additions & 5605 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CLAUDE.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# HAWKI Project
2+
3+
## Docker / Local Development
4+
5+
All commands run inside Docker via `bin/env`. Never call `php`, `composer`, `phpunit`, `node`, or `npm` directly on the host.
6+
7+
For the full command reference (container lifecycle, testing, code style, artisan, composer, docs, production builds), see:
8+
`_documentation/2-GettingStarted/2-Local Docker Installation.md` — section **"The `bin/env` command reference"**

_changelog/next-upgrade.md

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@
22

33
## Overview
44

5-
[//]: # (Briefly describe what makes this upgrade different from a routine update)
6-
7-
[//]: # (and why manual intervention is required.)
5+
> **BEWARE**
6+
>
7+
> This upgrade introduces **LOTS of breaking changes**! If you have customized HAWKI to match your needs, we strongly recommend to **NOT UPGRADE** to this version. Version %%VERSION%% lays the foundation for a new major version; v3.0, and cleans up many legacy APIs and code paths. If you have custom code that depended on those, it will break after upgrading. However, we still have a lot to refactor,
8+
> so we can not guarantee that the versions until v3.0 will not break your custom code again. Therefore, if you have custom code, we recommend to **stay on your current version** until v3.0 is released and then upgrade directly to v3.0.
9+
>
10+
> **v3.0 is expected to be released in Q3 2026.**
11+
>
12+
> If you have not customized HAWKI, you can safely upgrade to this version. Follow the steps below to ensure a smooth upgrade.
813
914
## Steps
1015

@@ -123,12 +128,12 @@ php artisan ai:config:sync
123128

124129
The following classes have been removed. Update any custom code that references them:
125130

126-
| Removed | Replacement |
127-
|---|---|
128-
| `FileConverterFactory` | Inject `FileConverterInterface` directly; call `isAvailable()` to check if a converter is configured |
129-
| `AttachmentService` / `AttachmentFactory` | `AttachmentRepository` |
130-
| `MessageHandlerFactory` | Resolve `PrivateMessageHandler` / `GroupMessageHandler` from the Laravel service container |
131-
| `ExternalCommunicationCheck` middleware | `ExternalAccessMiddleware` or `AppAccessMiddleware` — configure feature toggles in `config/external_access.php` |
131+
| Removed | Replacement |
132+
|-------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
133+
| `FileConverterFactory` | Inject `FileConverterInterface` directly; call `isAvailable()` to check if a converter is configured |
134+
| `AttachmentService` / `AttachmentFactory` | `AttachmentRepository` |
135+
| `MessageHandlerFactory` | Resolve `PrivateMessageHandler` / `GroupMessageHandler` from the Laravel service container |
136+
| `ExternalCommunicationCheck` middleware | `ExternalAccessMiddleware` or `AppAccessMiddleware` — configure feature toggles in `config/external_access.php` |
132137

133138
## 8. Update custom code reading `AiModel` attributes
134139

_changelog/next.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
- Added the **SyncLog system** for real-time synchronization of server-side state changes. Supports both incremental and full sync strategies with entity-specific handlers (rooms, messages, users, members, invitations, AI models, etc.). Provides a REST API endpoint and broadcasts events via WebSocket, enabling clients to stay in sync efficiently.
1616
- Added **User Keychain** — a secure per-user storage system for cryptographic key material and configuration data. Supports symmetric, asymmetric, and hybrid crypto value types with dedicated Eloquent casts. Includes REST endpoints for managing keychain values.
1717
- Added **message threading support**. Messages can now belong to threads via `thread_id` and `has_thread` columns. Thread parent tracking is handled automatically via event listeners. Existing messages are backfilled via migrations.
18-
- Added **System Prompt management** via `SystemPromptProvider`. Supports multiple prompt types (DEFAULT, SUMMARY, IMPROVEMENT, NAME) with locale-aware resolution and caching.
18+
- Added **System Prompt management** via `SystemPromptRepository`. Supports multiple prompt types (DEFAULT, SUMMARY, IMPROVEMENT, NAME) with locale-aware resolution.
1919
- Added **locale-aware AI model descriptions**: administrators can now provide human-readable descriptions for each AI model in multiple languages. Users see descriptions in their preferred locale automatically via the new `/api/v1/ai-model-descriptions` endpoint.
2020
- Added **AI model flags**: models can now be tagged with status flags (e.g. experimental, deprecated) that carry a label, description, and color code for display in the frontend. Flags are managed server-side and exposed via `/api/v1/ai-model-flags`.
2121
- Introduced the **Frontend Migrations system** — a structured mechanism for managing schema and data migrations on the client side. Applied migrations are tracked per user in the database, ensuring each migration runs exactly once across deployments. Exposed via `/api/v1/migrations`.

_documentation/2-GettingStarted/1-Local Installation.md renamed to _documentation/100-GettingStarted/100-Local-Installation.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ sidebar_position: 1
55
# Local Installation
66

77
This chapter of the documentation focuses on setting up and running HAWKI 2.0 on your local system. If you prefer to
8-
create a local Docker environment follow [Local Docker Installation](2-Local%20Docker%20Installation.md)
8+
create a local Docker environment follow [Local Docker Installation](200-Local-Docker-Installation.md)
99

1010
> *Although we strongly recommend that you first test HAWKI on your local device before deploying it on the server, If
11-
you want to skip this please read the ["Deployment"](../5-Deployment/1-Apache%20Server.md) chapter*
11+
you want to skip this please read the ["Deployment"](../300-Deployment/100-Apache-Server.md) chapter*
1212

1313
---
1414

@@ -52,23 +52,21 @@ Ensure that you have the basic PHP modules, node and composer to run HAWKI on yo
5252
5353
2. **Install Dependencies**
5454
55-
5655
Now that you have the project files on your machine, navigate to the project folder and run:
5756
5857
```
5958
php hawki init
6059
```
6160
6261
This command will:
62+
6363
- Create `.env` file from `.env.example`
6464
- Set up required configuration files
6565
- Install Composer dependencies
6666
- Install npm packages
6767
- Create storage symlinks
6868
- Generate application keys and security salts
6969
70-
71-
7270
Alternatively, if you can install dependencies and prepare the project manually:
7371
7472
1. Locate the `.env.example` file in the root directory. Rename it to `.env` by removing the .example extension.
@@ -83,7 +81,7 @@ At this point the dependency packages should be installed. `node_modules` and `v
8381
8482
8583
86-
><details>
84+
> <details>
8785
><summary>Tip! Continue to next steps with "-all" flag</summary>
8886
> For a complete guided setup process use the flag "-all" to automatically proceed to next steps:
8987
> ```
@@ -99,10 +97,10 @@ At this point the dependency packages should be installed. `node_modules` and `v
9997
### Configuration
10098
10199
To configure the environment variable open `.env` file in the root directory.
102-
For a complete guide to environment variables please refer to [.env section](../3-architecture/10-dot%20Env.md) of the
100+
For a complete guide to environment variables please refer to [.env section](../200-Configuration/100-dot-Env.md) of the
103101
documentation.
104102
105-
><details>
103+
> <details>
106104
><summary>Use HAWKI CLI for step-by-step configuration</summary>
107105
>
108106
>You can also configure your environment variables using the HAWKI CLI interactive setup
@@ -119,7 +117,7 @@ documentation.
119117
120118
**General**
121119
122-
>If you have used HAWKI CLI to initialize the project in the previous step, some attributes like Keys and Salts must have been automatically filled.
120+
> If you have used HAWKI CLI to initialize the project in the previous step, some attributes like Keys and Salts must have been automatically filled.
123121
>
124122
>Moreover, some of the attributes have already default values, which do not necessarily need be changed.
125123
@@ -134,11 +132,11 @@ APP_URL="http://127.0.0.1:8000" //for local dev, change the port if needed
134132
135133
**AI Connection**
136134
137-
In AI Connection section you can add your API Keys and URLs.
135+
In AI Connection section you can add your API Keys and URLs.
138136
To start you need to have at least one API key to establish connection with one the AI providers (
139-
[OpenAI](https://platform.openai.com/docs/quickstart),
140-
[GWDG](https://docs.hpc.gwdg.de/index.html),
141-
[Google](https://ai.google.dev/),
137+
[OpenAI](https://platform.openai.com/docs/quickstart),
138+
[GWDG](https://docs.hpc.gwdg.de/index.html),
139+
[Google](https://ai.google.dev/),
142140
[OpenWebUI](https://openwebui.com/))
143141
144142
Add your API key in one of the following:
@@ -155,6 +153,7 @@ alternatively you can host your own model using [Ollama](https://ollama.com/). T
155153
```
156154
OLLAMA_ACTIVE=true
157155
```
156+
158157
then navigate to `config/model_lists/ollama_models.php` and add your model attributes in the following structure:
159158
160159
```
@@ -182,10 +181,10 @@ After adding or editing a model in the config file, sync it to the database:
182181
php hawki models sync --force
183182
```
184183
185-
>Before hosting models, make sure your system has the minimum required resources.
184+
> Before hosting models, make sure your system has the minimum required resources.
186185
187-
>**IMPORTANT**
188-
>
186+
> **IMPORTANT**
187+
>
189188
>Currently, HAWKI is configured to use Gemini models’ native web search tool. If you want to disable the Google provider, make sure to add the following environment variables to disable the default web search model:
190189
>```
191190
># Deactivte Google Models
@@ -221,7 +220,6 @@ In `/storage/app/` open the previously created `test_users.json` and add a profi
221220
]
222221
```
223222
224-
225223
### DATABASE
226224
227225
To store chat data, HAWKI requires a database connection. This documentation employs MySQL, but selection depends on your usage and specific requirements.
@@ -239,7 +237,6 @@ DB_USERNAME= root // Database username
239237
DB_PASSWORD= root // Database password
240238
```
241239
242-
243240
Run database migrations by navigating to the project directory and executing:
244241
245242
```
@@ -253,6 +250,7 @@ php hawki migrate --fresh
253250
```
254251
255252
Alternatively, you can use artisan commands:
253+
256254
```
257255
php artisan migrate
258256
// or
@@ -313,19 +311,18 @@ php artisan storage:link
313311
314312
You should be able to see the storage shortcut inside the public folder.
315313
316-
>Please note that after changing the structure of your files in the storage folder you may need to recreate the virtual link:
314+
> Please note that after changing the structure of your files in the storage folder you may need to recreate the virtual link:
317315
318316
```
319317
sudo rm -rf public/storage
320318
php artisan storage:link
321319
```
322320
323-
324321
## Broadcasting & Workers
325322
326323
HAWKI uses [Laravel Reverb](https://reverb.laravel.com/) for real-time communication between client and server for broadcasting messages in th Groupchat Rooms.
327324
328-
>**If you don't wish to test broadcasting on you local machine skip this step.**
325+
> **If you don't wish to test broadcasting on you local machine skip this step.**
329326
330327
331328
In order to establish a connection to Reverb, a set of Reverb "application" credentials must be exchanged between the client and server. These credentials are configured on the server and are used to verify the request from the client. You may define these credentials using the following environment variables:
@@ -353,6 +350,7 @@ php artisan reverb:start
353350
```
354351
355352
In the terminal you should see:
353+
356354
```
357355
Starting server on 0.0.0.0:8080 (127.0.0.1).
358356
```
@@ -368,6 +366,7 @@ Test workers by running the following commands in separate terminals:
368366
```
369367
php artisan queue:work
370368
```
369+
371370
```
372371
php artisan queue:work --queue=message_broadcast
373372
```
@@ -384,7 +383,7 @@ If you do not uncomment the FILE_CONVERTER variables in .env file, HAWKI turns o
384383
If you prefer to use HAWKI FIle Converter, and you are not using the docker deployment you can host the converter separately from the project.
385384
For more information refer to the [File Converter Repo](https://github.com/hawk-digital-environments/hawki-toolkit-file-converter) of this documentation.
386385
387-
> **Further reading:** For a detailed explanation of how the conversion pipeline works and how to add a custom converter, see [File Conversion](../3-architecture/7.1-File%20Conversion.md).
386+
> **Further reading:** For a detailed explanation of how the conversion pipeline works and how to add a custom converter, see [File Conversion](../500-Backend/700-Storage-and-Files/100-File-Converter.md).
388387
389388
### Optional dependencies
390389
@@ -439,6 +438,7 @@ php hawki run -dev
439438
```
440439

441440
The HAWKI CLI `run -dev` command starts:
441+
442442
- PHP (artisan) development server
443443
- npm development server with hot-reloading
444444
- Reverb websocket server (if configured)
@@ -458,6 +458,7 @@ php hawki stop
458458
```
459459

460460
This command finds and terminates:
461+
461462
- PHP Artisan processes
462463
- Node.js/npm processes
463464
- Queue workers

0 commit comments

Comments
 (0)