kim.pepper → made their first commit to this issue’s fork.
I think it's fine to move it once ai_search is in its own module. It's pretty basic, and we aren't actually using the value objects anywhere yet.
Updated the title and IS to reflect the new approach.
Testing in PHPStorm this seems to work well.
Added the conditional return type as per #21
Added a new MR that just adds the class-string typehints to \Drupal::service().
Could we merge this docblock with the existing \Drupal::service() docblock somehow?
* @template T of object
*
* @param class-string<T> $class
*
* @return object&T
* A service that is an instance of $class.I would prefer a way for users to add support for additional units rather than hard coding to what is in the spec.
@gxleano you don't need to manually close issues. Fixed issues get automatically closed after 2 weeks (?).
From the discussion linked above https://github.com/design-tokens/community-group/issues/245
I think a similar approach would be a better way to address prototype/pre-spec implementations. The spec can allow parsers/transformers to ignore invalid tokens. If a vendor wants to add a unit that isn't in the spec yet, they just use it in the unit property as if it was valid and then end users can use a plugin or custom transform (perhaps written by the vendor) in the parser to handle it.
So just because it's not in the spec, doesn't mean we can't support the units we want in our implementation.
Not sure if we need to do anything with \Drupal\file\Validation\Constraint\UploadedFileConstraint ?
This got stalled most likely because it was trying to do too much.
I'm starting to split things off into smaller issues starting with 📌 Add a UploadedFilesExtractor and remove duplicate code Active
Squashed commits and rebased on 11.x
Rebased this on 2.0.x and copied over the changes that were made to AiVdbProviderClientBase in the mean time.
Leaving this open but marking PMNMI for any more feedback. Otherwise this will be closed as Won't Fix as per #4 in the near future.
Deprecated cache.field_config_memory and replaced with cache.memory.
Do we need to deprecate? or can we just remove it?
Coming from the duplicate issue
📌
Add return types for all methods with a rector rule
Active
here is a basic rector.php config for adding return type hints.
<?php
return Rector\Config\RectorConfig::configure()
// path from composer root.
->withPaths([__DIR__ . '/modules/custom/search_api'])
->withTypeCoverageLevel(10);
We can add the #[ReturnTypeWillChange] attribute to suppress warnings in implementing classes.
I'd like to opt-in https://www.drupal.org/project/ai_vdb_provider_opensearch → as it's a small project that shouldn't disrupt anyone too much.
My 2 cents... if we are injecting services at discovery time, what advantage does this have over regular container services?
kim.pepper → changed the visibility of the branch 3536726-use-callableresolver-for to hidden.
kim.pepper → made their first commit to this issue’s fork.
Can you confirm the version (or commit hash) you are using?
OK. I think this is ready for reviews again.
I went down the path of trying to add CallableResolver to entity form constructor and every sub-class constructor. I think that would be very disruptive. All the unit tests would need to be updated etc. I ended up with checking if the container was available.
Not ideal that Entity form calls a service as it should be a value object like other forms.
Updated the title to be more specific.
I spent a couple of hours looking at how we could use CallableResolver and avoid calling it in FormState.
I deprecated \Drupal\Core\Form\FormStateInterface::prepareCallback() and looked at where it was being called from.
Obvously a lot of test fails 😬 but could be a good first step.
Based on the feedback, I've updated our Time service to implement Psr\Clock\ClockInterface and added a service alias for @datetime.time
Committed to 2.x and 3.x. Thanks!
Deleted the update test as we are no longer updating.
Tests are still failing so I left at NW
If we are mocking the current time I would much prefer us to use ✨ Add PSR-20 Clock Interface as composer dependency Active and the follow-up ✨ Implement PSR-20 in datetime.time service Active
Marked as "Closed (duplicate)".
Committed to 3.x and 2.x. Thanks!
Seems like a sensible fix. The phpstan errors are because the baseline format has changed slightly so I regenerated it.
Rebased on 11.x and removed the post-update hook as per #11
Rebased on 11.x so back to RTBC
Updated deprecations message in two constructors (DirectoryWithMetadataDiscovery and DirectoryWithMetadataPluginDiscovery to be for removal in 12.x.
I think I'm ok to put back to RTBC in this case.
This is ready for reviews now.
Testing this locally, I am getting
illegal_argument_exception: Can't update non dynamic settings [[index.analysis.filter.synonyms.type, index.analysis.analyzer.default.filter, index.analysis.filter.synonyms.lenient, index.analysis.analyzer.default.type, index.analysis.analyzer.default.tokenizer, index.analysis.filter.synonyms.synonyms]] for indices [content]
when saving mappings.
Trying a different approach with a aoss mode setting.
Looks like we will need to sort out ✨ Compatibility with AWS Open Search Serverless (AOSS) Active before we can properly test this. Postponing on that.
Re #10 this was done in 📌 Convert models to plugins, remove hardcoded model string checks Needs review and merged to 1.x.
I have rebased this MR on 1.x
📌 Convert models to plugins, remove hardcoded model string checks Needs review is in so this is unblocked.
kim.pepper → created an issue.
Committed to 1.x. Thanks!
There's a long list of models. I guess people can create their own plugins if they want a model we don't include here? https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html
Great improvement. As discussed in slack we can deprecate titan v1 and add titan v2 in the follow-up 📌 Deprecate titan text embedding v1 and add v2 Closed: duplicate
kim.pepper → created an issue.
kim.pepper → created an issue.
kim.pepper → created an issue.
Getting this error locally and it's failing the test:
Exception: Warning: Undefined array key "connector"
Drupal\ai_vdb_provider_opensearch\Form\OpenSearchConfigForm->validateConnectorConfigForm()() (Line: 125)
That looks like the trait in search_api_opensearch
kim.pepper → created an issue.
Closing this as duplicate.
As well as committing #3545869: Add a ConnectorFormTrait for re-use → I have commited the provider code here to the 1.x branch of https://www.drupal.org/project/ai_vdb_provider_opensearch → in 📌 Use the official opensearch-php library Active
Please continue with remaining work (such as adding tests!) in https://www.drupal.org/project/ai_vdb_provider_opensearch →
All contribution credits have been added to both issues.
Commited to 1.x. Copied commit credits from 📌 Add support for AI module VDB Provider Active
Committed to 3.x and cherry-picked to 2.x.
Added credits from related issue 📌 Add support for AI module VDB Provider Active
kim.pepper → created an issue.
No this is passing, I'm going to split of an issue to just add the trait to the core module for re-use.
Responded to suggestions. I don't think we should be adding new interfaces in this issue just for the sake of autowiring.
Committed to 2.x
There is currently a bug and I can't save contribution records, but I will come back and add them when it's fixed.
kim.pepper → made their first commit to this issue’s fork.
kim.pepper → created an issue.
I added DeprecatedServicePropertyTrait for the removed $fileSystem property.
Some example code:
Create a plain old value object with some constraint attributes:
use Symfony\Component\Validator\Constraints as Assert;
class Embedding {
public function __construct(
#[Assert\Regex(
pattern: '/^[A-Za-z0-9_-]+:[A-Za-z0-9_-]+$/',
message: 'Id should be in the format "prefix:suffix"',
)]
readonly public string $id,
#[Assert\NotBlank(message: 'Values should not be empty')]
public array $values,
#[Assert\NotBlank(message: 'Metadata should not be empty')]
protected array $metadata,
) {}
Create a Symfony validator that looks for the attributes:
$validator = \Symfony\Component\Validator\Validation::createValidatorBuilder()
->enableAttributeMapping()
->getValidator();
Validate the object:
$embedding = new Embedding(
'model1:embedding1',
[0.1, 0.2, 0.3],
['source' => 'test']
);
/** @var \Symfony\Component\Validator\ConstraintViolationListInterface $violations */
$violations = $validator->validate($embedding);
nit: looks like some of the docblock indentations are incorrect. I assume this would be fixed automatically with phpcbf?
@kingdutch wrote a great blog post on how using Symfony Runtime could help solve some of these issues https://www.alexandervarwijk.com/blog/2025-09-08-proposal-restructuring-...
In this issue, I showed how you can create a value object and validate it using Symfony Validator. It's a pretty clean solution IMO. 📌 Create an 'embedding' object that can be validated Active
Rebase on 11.x
I like @danielveza 's idea of
I wonder if we can turn these into plugins or do something a little nicer than elseifs checking strings.
Thanks @marcus_johansson. Can't speak for @danielveza but I will put my hand up for maintainership.
We should decide on whether to fix the getConnector() fails or just duplicate some of the code and remove the trait.