See Pwas at work: 30 guided minutes on an application that already runs. Book the demo →
Compare products Pwas in your industry Book a demo
Pwas-One
ERPShopCRMDoc ManagerAI Agent
Pwas.FrameworkPwas.ClientPwas.OrchestratorPwas.Microservice
Pwas CLIAssessmefyDynamic Registry Builder
Solutions Industries Documentation Partners Request a demo Get Started
Italiano English
pwas.it — powered by pooel.it

Not a service.
The base for extending Pwas.

Python (FastAPI) library for composable AI tools

The library every tool alongside Pwas.Framework is built on — yours or ours: authentication, async queue, webhooks and interchangeable model providers, ready to use. You write only the logic you actually need.

overview

Pwas is extensible per project.
This is the official base for doing it.

Pwas.Microservice (pwas-microservice-base) is distributed as a library — pip install — not as a standalone service. Every concrete tool extends it: it registers its own actions, and the base gives it HTTP contract, authentication, asynchronous queue, webhooks and a multi-provider LLM driver for free. The first tool built on this base is Pwas.MicroService.DocsResolver.

AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYToxMzFhYTVmZS01NWYwLTQwNWUtYjFiYS1hMGU0NDA3ZGZmMjYAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaBwVBLzxCXhbyXxZ/UqJkXUAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDpiOTIzMjc2Yy0zNjQ1LTQ3OGQtODZhMy0yZjA0MTJhNzY0YTlscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNopTxOCDWPVGGq9Eb9bmqliQAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFggsn06tN590wbf9o6Z0OQ6NlrezE6PhUg5Y1sTvqEs7NekZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaBBaM6Mlwm5M9GI7G1tWmzcAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRNAAAAAAAAAAAAAAAAAGRoYXNoWCC0EmSBLGM5bniCT+P2vh2tai8qYWzbrLy/x/DRhM5K32RuYW1lbmp1bWJmIG1hbmlmZXN0amV4Y2x1c2lvbnOBomVzdGFydBjpZmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjEzMWFhNWZlLTU1ZjAtNDA1ZS1iMWJhLWEwZTQ0MDdkZmYyNi9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOmQwNTgwN2MwLTkzNzItNDQ5Mi1iNzgwLWM2MzI1MzYyZDZjYXJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCCyfTq03n3TBt/2jpnQ5Do2Wt7MTo+FSDljWxO+oSzs16JjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFgg5mKZaw5XdnrkLp+w2ZRc2rn62cqcyspddT25Mv9KJ4miY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggdWLOxFgfxnWYBwyXMB6mKQaV8ZJ7V8pajLOPjwM9tDh0Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQPIseWOeDgk7e6lkQ8EXkFjrS/6jggitnY2G4C1DS6NDY1SzvUoZchh5IGHXSfi3QrVJANONWb1z6J4AKZ79+Kc=Pwas.Microservice: the official base for extending PwasEvery custom tool extends the pwas-microservice-base library, which provides the HTTP contract, authentication, an asynchronous queue, webhooks and a multi-provider LLM driver. Each tool registers its actions and is declared as a resource in the Capability Registry, so the platform and the orchestrator can call it like any native capability.Pwas platformFRAMEWORK · ORCHESTRATORCapability RegistryTOOL DECLARED AS RESOURCEPWAS-MICROSERVICE-BASEHTTP contractnamespace + actionAuthenticationtwo modesAsync queuesync or asyncWebhookscallbacks on completionLLM driverinterchangeable providersYOUR TOOLS, BUILT ON THE BASEDocsResolverPDF · IMAGES → DATADocument OCRCUSTOM ACTIONPricing engineCUSTOM ACTIONYour toolregister_action()
the standard contract

Every tool, same contract.

Anything built on this base exposes the same HTTP contract — only what params does changes.

Namespace + action routing

Every action responds on POST /{namespace}/{action} with the same payload {params, webhook, async, correlation_id} — no routing to write by hand for a new tool.

Sync or async

async:false (default) responds immediately with completed/failed; async:true responds 202 accepted with a job_id, the job enters a file-based queue and an internal worker calls the webhook on completion.

Interchangeable LLM providers

AUTH_MODE=static compares a static token; AUTH_MODE=framework_me verifies that the bearer is a genuine Pwas.Framework user via GET /api/auth/me.

extending the platform

What building a bespoke module actually means here.

It's the question that arrives as soon as someone understands the declarative model: "what about the things the model doesn't cover?". The answer is that you build them, and they become part of the domain instead of sitting outside it.

An extension isn't a bolted-on plugin: it's a declared capability.

In most platforms an extension lives at the margins: a plugin hooking into a foreseen point, with its own permission model, its own interface and its own life. It works as long as someone remembers it exists.

Here it's different, and the difference is structural. A tool built on this base declares itself as a resource — which actions it exposes, which fields it accepts, what it returns, what to do on error — and enters the Capability Registry alongside everything else. From that moment it's a capability like any other: a pipeline invokes it as it would an internal operation, the orchestrator can include it in a compiled plan, and the permissions that apply to whoever invokes it apply there too.

The consequence that really matters: what you build isn't an exception to maintain on the side. It has no authorisation layer of its own to keep aligned, it isn't invisible to the AI agent, it doesn't escape traceability. It's why extensibility here doesn't produce the technical debt it usually does.

What you write, and what you find already done.

The base provides the parts that are identical in every tool and that nobody wants to rewrite each time: the communication contract with the platform, authentication, the asynchronous queue for processing that outlasts a single request, the webhooks for reporting completion, and access to language models through interchangeable drivers.

What you write is the specific logic: how to read that document format, how to compute that thing, how to talk to that system nobody else has. In practice, your code starts where the common part ends, which is exactly where it should start.

The first tool built on this base is the document resolver: field extraction from PDFs and images via a multimodal model, document generation from data and a knowledge base, and personal data anonymisation. It's both a usable tool and a complete example of how a serious extension is structured.

When a dedicated tool is right and when it isn't.

The practical rule is simple and worth respecting, because forcing it either way has a cost.

  • Stay in a declared pipeline when the operation expresses itself by composing steps: conditions, loops, functions, calls to external services. That's most cases, and it's the choice that keeps everything readable.
  • Build a dedicated tool when real code is needed: reading particular formats, conversions, numerical computation, long-running processing, integrations with systems speaking their own protocols, complex prompts to a model.

What not to do is bend a declared pipeline until it becomes a badly written program just to stay inside the configuration. When code is needed, isolating it in a component with its own queue and declaring it is cleaner, more verifiable and easier to replace.

Yours to keep: the code, the tool and the reuse.

A tool built on this base is your code, in your repository, released with your procedures. There's no marketplace to go through and no certification to obtain for it to work: you declare it and it gets invoked.

In practice this is what lets a partner or a company with strong vertical expertise build a reusable asset: the tool that reads a sector's typical interchange format, the one that talks to a specific machine, the one that computes something only you compute. You reuse it on every project in that sector, and it doesn't belong to us.

frequently asked

Pwas.Microservice: the questions.

Is it a service or a library?
A library: you install and extend it to build your own tool, which registers its actions and gets the communication contract, authentication, asynchronous queue, webhooks and model access for free. It isn't a ready-to-run service, and that distinction matters when planning the work.
Can we build our own tools, or do you build them?
You can build them, and that's the scenario this base exists for. Ordinary development skills are enough: the base provides contract, authentication, queue and webhooks, and you write the specific logic. On early projects we work alongside you on the structure, then most partners proceed alone. The code stays yours, in your repository.
Is a tool we build a second-class citizen?
No, and that's the main difference from a plugin system. A declared tool enters the Capability Registry like any other capability: pipelines invoke it as an internal operation, the orchestrator can include it in a compiled and verified plan, and the permissions of the user invoking it apply there too. It has no authorisation layer of its own to keep aligned by hand.
When is a microservice better than a pipeline?
When the processing is specialised and doesn't express well as a composition of declared steps: document reading, conversions, numerical computation, model calls with complex prompts. The practical rule is that if real code is needed, isolate it in a component with its own queue rather than forcing it into a pipeline.
How does it integrate with the rest of the platform?
The microservice is declared as an external resource, with its actions and fields, and invoked by a pipeline or a compiled plan like any other capability. From the perspective of whoever describes the domain there's no difference between internal processing and processing delegated to a microservice.
How are long-running tasks handled?
With the asynchronous queue and webhooks the base provides: the caller immediately receives acknowledgement and is notified on completion. It's why this base exists: document processing and model calls have timings unsuited to a synchronous response.
Which models can be used?
The main commercial providers are supported as interchangeable drivers, alongside the option of models hosted in your own perimeter. The choice is made during the project and is a configuration, not a dependency written into the tool's code.
Is there a ready-made tool to look at?
Yes, the document resolver built on this base: field extraction from documents and images, document generation from data and a knowledge base, and personal data anonymisation where a deterministic result is needed rather than a model's probabilistic judgement.
get in touch

Ready to
build your tool.

Pwas.Microservice is developed by Pooel Srl. Reach out to see how to build a new tool on the shared base.