Message, Part (Text/Image/File), ToolCall, FunctionCall, and Usage
now round-trip through JSON. Message uses a type-discriminated
envelope for the Part interface. Required for checkpoint persistence.
Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
Implement a full OAuth2 2.0 and OpenID Connect 1.0 authorization
server with support for authorization code flow (with PKCE),
refresh token rotation, device authorization grant, dynamic
client registration, token introspection, and token revocation.
Includes database schema, coredata layer, service logic, HTTP
handlers, OIDC discovery endpoint, and JWKS publishing.
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
The provider is always the prefix before "/" in the model ID,
so storing it as a separate field is redundant. Replace the
field with a Provider() method.
Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
Build registries from inline map literals instead of relying
on generated OpenRouter data that can change between runs.
Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
Replaces []ModelDefinition with map[string]ModelDefinition so
model ID uniqueness is enforced by the data structure itself
and lookups do not require a linear scan.
Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
Always write both true and false values in the generated
registry so unsupported parameters are visible at a glance
instead of relying on Go zero-value defaults.
Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
Lookup by canonical ID, bare name, and normalized form.
Capability assertions for Claude, GPT-5.4, and o3. Edge
cases for empty string and provider-prefix-only inputs.
Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
177 models across 9 providers fetched from OpenRouter.
This file is generated by go generate and committed to avoid
requiring an API call at build time.
Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
ModelDefinition, SupportedParameters, and Registry types with
multi-key lookup supporting canonical, bare, and normalized
model IDs. NewRegistry constructor accepts model definitions
for testability; DefaultRegistry caches the generated data.
Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
Introduce a background worker that automatically generates
compliance-focused descriptions for uploaded evidence files
using configurable LLM providers. Descriptions are surfaced
across all interfaces: GraphQL API, MCP API, CLI, and the
console UI.
Key changes:
- Multi-provider LLM config with per-agent settings (pointer
types for Temperature/MaxTokens to preserve zero values)
- Evidence description worker with bounded concurrency
- EvidenceDescriptionStatus typed enum with PostgreSQL enum type
- New `prb evidence` CLI commands (list, view, delete)
- Evidence description displayed in console table and preview
- Migration only marks evidences without files as completed
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
Expand mixed inline/multiline function calls so each argument
is on its own line, matching the one-argument-per-line rule.
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
buildTools was only copying "properties" and "required" into
ToolInputSchemaParam, silently dropping root-level constraints
like additionalProperties and $defs. Forward them through the
SDK's ExtraFields map so the full schema reaches the API.
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
StreamAccumulator never set its model field, so
Response().Model was always empty for streamed
completions. Add a Model field to stream events
and populate it in all three providers (OpenAI,
Anthropic, Bedrock).
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
FrequencyPenalty, PresencePenalty, and ParallelToolCalls were
present on ChatCompletionRequest but never forwarded in
buildParams, so agent-level settings configured via functional
options were silently ignored for the OpenAI provider.
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
buildResponseFormat was hardcoding strict: true instead of
reading rf.JSONSchema.Strict, making it impossible to request
non-strict JSON-schema output.
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
Incrementing toolIndex on every ContentBlockStop caused it to drift
when non-tool blocks (e.g. text) preceded tool-use blocks, making
Bedrock tool calls disappear from the accumulated response.
Track whether the current content block is a tool-use block and only
bump the index when a tool-use block ends.
Signed-off-by: Bryan Frimin <bryan@getprobo.com>