From 8655ea21d43441843ebfc4321f6ba6fd719e4fd4 Mon Sep 17 00:00:00 2001 From: James Maes Date: Wed, 14 Oct 2026 10:51:34 -0500 Subject: [PATCH] refactor!: provider SPI in its own package com.kingsrook.qbits.assistant.spi The qbit-assistant-provider-api artifact now holds exactly one package, com.kingsrook.qbits.assistant.spi (23 types including ModelPricing), so consumers such as qbit-marketing depend only on that artifact and the qbit-bom G1 guardrails can allow it by package. BREAKING: imports change from ...assistant.provider.X / ...assistant.engine.ModelPricing to ...assistant.spi.X (UPGRADE.md has the table). ArchUnit forbids split packages between the API and the implementation. Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 2 +- CHANGELOG.md | 4 +- CLAUDE.md | 2 +- README.md | 7 +- UPGRADE.md | 21 +++++- docs/DESIGN.md | 9 ++- .../provider/anthropic/AnthropicMapping.java | 18 ++--- .../anthropic/AnthropicModelProvider.java | 16 ++-- .../anthropic/AnthropicProviderType.java | 4 +- .../anthropic/AnthropicModelProviderTest.java | 20 ++--- .../AnthropicRequestContractTest.java | 6 +- .../anthropic/demo/AssistantDemoServer.java | 2 +- .../AssistantModelProvider.java | 2 +- .../AssistantProviderType.java | 2 +- .../{provider => spi}/CacheHint.java | 2 +- .../CompletableStreamHandle.java | 2 +- .../{provider => spi}/DiscoveredModel.java | 2 +- .../{provider => spi}/EmbeddingRequest.java | 2 +- .../{provider => spi}/EmbeddingResponse.java | 2 +- .../{provider => spi}/HealthResult.java | 2 +- .../{provider => spi}/ModelCapabilities.java | 2 +- .../{provider => spi}/ModelEventListener.java | 2 +- .../{provider => spi}/ModelMessage.java | 2 +- .../{provider => spi}/ModelPart.java | 2 +- .../{engine => spi}/ModelPricing.java | 3 +- .../ModelProviderException.java | 2 +- .../{provider => spi}/ModelRequest.java | 2 +- .../{provider => spi}/ModelResponse.java | 2 +- .../ModelToolDefinition.java | 2 +- .../{provider => spi}/ModelUsage.java | 2 +- .../{provider => spi}/ProviderSettings.java | 4 +- .../{provider => spi}/StreamHandle.java | 2 +- .../{provider => spi}/SystemBlock.java | 2 +- .../{provider => spi}/TokenCount.java | 2 +- .../{provider => spi}/TrustedCaBundle.java | 2 +- .../provider/ProviderApiArchitectureTest.java | 75 ------------------- .../spi/ProviderApiArchitectureTest.java | 46 ++++++++++++ .../{provider => spi}/ProviderApiTest.java | 5 +- .../ProviderComponentsTest.java | 3 +- .../ProviderDefaultsTest.java | 2 +- .../TrustedCaBundleTest.java | 2 +- .../provider/bedrock/BedrockProviderType.java | 8 +- .../provider/bedrock/BedrockContractTest.java | 12 +-- .../openai/OpenAiCompatibleModelProvider.java | 26 +++---- .../openai/OpenAiCompatibleProviderType.java | 12 +-- .../assistant/provider/openai/OpenAiHttp.java | 8 +- .../provider/openai/OpenAiMapping.java | 12 +-- .../openai/LiveOpenAiCompatibleTest.java | 8 +- .../provider/openai/OpenAiContractTest.java | 20 ++--- .../provider/openai/OpenAiEmbeddingTest.java | 6 +- .../provider/openai/OpenAiTlsTest.java | 8 +- .../openai/demo/OpenAiDemoServer.java | 2 +- .../provider/vertex/VertexModelProvider.java | 12 +-- .../provider/vertex/VertexProviderType.java | 8 +- .../provider/vertex/VertexContractTest.java | 10 +-- .../qbits/assistant/AssistantQBitConfig.java | 10 +-- .../assistant/engine/ConnectionTest.java | 15 ++-- .../assistant/engine/ContextBuilder.java | 14 ++-- .../qbits/assistant/engine/FallbackChain.java | 10 +-- .../assistant/engine/ModelDiscovery.java | 10 +-- .../qbits/assistant/engine/ModelRouter.java | 16 ++-- .../assistant/engine/ProviderHealth.java | 6 +- .../assistant/engine/ProviderService.java | 7 +- .../qbits/assistant/engine/RunningTurn.java | 2 +- .../assistant/engine/TurnClassification.java | 2 +- .../qbits/assistant/engine/TurnEngine.java | 23 +++--- .../qbits/assistant/engine/UsageRecorder.java | 7 +- .../assistant/home/AssistantHomeData.java | 22 +++--- .../metadata/AssistantRecordScreens.java | 2 +- ...ssistantSettingsPossibleValueProvider.java | 2 +- .../assistant/persistence/AssistantStore.java | 2 +- .../provider/RegistryModelProvider.java | 9 +++ .../provider/fake/ScriptedModelProvider.java | 20 ++--- .../qbits/assistant/rag/EmbeddingService.java | 8 +- .../qbits/assistant/tools/KnowledgeTool.java | 2 +- .../assistant/tools/PresentResultsTool.java | 2 +- .../qbits/assistant/tools/UiApiToolbox.java | 2 +- .../tools/bulkload/BulkLoadTools.java | 2 +- .../qbits/assistant/ArchitectureTest.java | 21 +++++- .../access/ProfilesSkillsAndAccessTest.java | 2 +- .../classification/ClassificationTest.java | 2 +- .../assistant/engine/BudgetServiceTest.java | 28 +++---- .../engine/EngineComponentsTest.java | 2 +- .../assistant/engine/PhiRoutingTest.java | 10 +-- .../assistant/engine/RobustnessTest.java | 4 +- .../assistant/engine/RoutingFallbackTest.java | 22 +++--- .../assistant/engine/TurnEngineTest.java | 12 +-- .../qbits/assistant/evals/RedTeamTest.java | 8 +- .../persistence/HipaaStorageTest.java | 14 ++-- .../qbits/assistant/rag/RagTest.java | 13 ++-- .../scheduled/ScheduledTasksTest.java | 6 +- .../settings/AssistantSettingsTest.java | 34 ++++----- .../settings/ProviderRegistryTest.java | 16 ++-- .../qbits/assistant/testing/EvalSupport.java | 8 +- .../testing/PresentationGoldenTask.java | 4 +- .../tools/bulkload/BulkLoadToolsTest.java | 4 +- 96 files changed, 436 insertions(+), 414 deletions(-) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/AssistantModelProvider.java (98%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/AssistantProviderType.java (99%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/CacheHint.java (95%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/CompletableStreamHandle.java (99%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/DiscoveredModel.java (95%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/EmbeddingRequest.java (96%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/EmbeddingResponse.java (95%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/HealthResult.java (96%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/ModelCapabilities.java (99%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/ModelEventListener.java (97%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/ModelMessage.java (99%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/ModelPart.java (99%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{engine => spi}/ModelPricing.java (98%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/ModelProviderException.java (99%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/ModelRequest.java (99%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/ModelResponse.java (99%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/ModelToolDefinition.java (98%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/ModelUsage.java (99%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/ProviderSettings.java (99%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/StreamHandle.java (97%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/SystemBlock.java (98%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/TokenCount.java (97%) rename qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/{provider => spi}/TrustedCaBundle.java (99%) delete mode 100644 qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderApiArchitectureTest.java create mode 100644 qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderApiArchitectureTest.java rename qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/{provider => spi}/ProviderApiTest.java (99%) rename qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/{provider => spi}/ProviderComponentsTest.java (97%) rename qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/{provider => spi}/ProviderDefaultsTest.java (99%) rename qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/{provider => spi}/TrustedCaBundleTest.java (98%) diff --git a/AGENTS.md b/AGENTS.md index 64fe76a..f28a2f9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -29,7 +29,7 @@ Always use the wrapper: Maven 3.10 cannot read the parent POM. The committed def ## Modules -- `qbit-assistant-provider-api`: standalone provider SPI/value types and `engine.ModelPricing` (original package names); only Jackson annotations in production. Provider validation takes unresolved `ProviderSettings`, not an entity. +- `qbit-assistant-provider-api`: standalone provider SPI/value types and `ModelPricing`, all exclusively in `com.kingsrook.qbits.assistant.spi`; only Jackson annotations in production. Provider validation takes unresolved `ProviderSettings`, not an entity. - `qbit-assistant` (`com.kingsrook.qbits.assistant`): - `AssistantQBitProducer`, `AssistantQBitConfig` (with `AssistantModelRouting` and `AssistantBudgets`), `AssistantRuntime`, `AssistantSecurity`. diff --git a/CHANGELOG.md b/CHANGELOG.md index 65400dc..cbb3d2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,9 @@ ## Unreleased - Provider API extraction (#30) -- Extract provider SPI/value types and `engine.ModelPricing` into `qbit-assistant-provider-api`, preserving package names. Its only production dependency is Jackson annotations. +- **BREAKING:** move all 23 provider API types, including `ModelPricing`, to `com.kingsrook.qbits.assistant.spi`. Recompile consumers with the new imports; see UPGRADE.md. Enforce exclusive package ownership and API dependency boundaries with ArchUnit. + +- Extract provider SPI/value types and `ModelPricing` into `qbit-assistant-provider-api`, now exclusively in `com.kingsrook.qbits.assistant.spi`. Its only production dependency is Jackson annotations. - Move Anthropic, OpenAI, Bedrock and Vertex main dependencies to the API; retain runtime fixtures in test scope. Pgvector still needs runtime RAG interfaces. - Provider-specific validation now takes unresolved `ProviderSettings` instead of `AssistantProvider`; add an ArchUnit boundary and standalone coverage gates. ## Unreleased - P-g diff --git a/CLAUDE.md b/CLAUDE.md index 5dfa0e0..06d16f3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -29,7 +29,7 @@ Always use the wrapper: Maven 3.10 cannot read the parent POM. The committed def ## Modules -- `qbit-assistant-provider-api`: standalone provider SPI/value types and `engine.ModelPricing` (original package names); only Jackson annotations in production. Provider validation takes unresolved `ProviderSettings`, not an entity. +- `qbit-assistant-provider-api`: standalone provider SPI/value types and `ModelPricing`, all exclusively in `com.kingsrook.qbits.assistant.spi`; only Jackson annotations in production. Provider validation takes unresolved `ProviderSettings`, not an entity. - `qbit-assistant` (`com.kingsrook.qbits.assistant`): - `AssistantQBitProducer`, `AssistantQBitConfig` (with `AssistantModelRouting` and `AssistantBudgets`), `AssistantRuntime`, `AssistantSecurity`. diff --git a/README.md b/README.md index 47d7136..031dc73 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,10 @@ Design spec: `QRun-IO/qqq` `docs/specs/2026-10-11-qqq-assistant-qbit-design.md`. Depend on `com.kingsrook.qbits:qbit-assistant-provider-api` at the same version as QBit Assistant, and implement `AssistantModelProvider` and optionally -`AssistantProviderType`. No assistant runtime dependency is needed. Existing -`com.kingsrook.qbits.assistant.provider.*` imports and -`com.kingsrook.qbits.assistant.engine.ModelPricing` stay the same. +`AssistantProviderType`. No assistant runtime dependency is needed. All API types, including +`ModelPricing`, live exclusively in `com.kingsrook.qbits.assistant.spi`. External +consumers such as qbit-marketing allow that package in their G1 guardrails; +qbit-bom will add it to the G1 defaults. See [migration imports](UPGRADE.md#provider-api-extraction-30). `AssistantProviderType.validate(ProviderSettings)` receives unresolved settings (including `apiKeyEnvName`), without a database entity or resolved credentials. Hosts register providers through `AssistantQBitConfig` in `qbit-assistant`. diff --git a/UPGRADE.md b/UPGRADE.md index f02bced..c68d1ef 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -21,9 +21,22 @@ exceed the old 500-character limit. No new QBit column is required. `GET /assist ## Provider API extraction (#30) -Hosts that depend on `qbit-assistant` keep working: it now brings in -`qbit-assistant-provider-api` transitively. Package names are unchanged, including -`com.kingsrook.qbits.assistant.engine.ModelPricing`. No schema migration is needed. +**BREAKING:** every provider API type now lives in the exclusive package +`com.kingsrook.qbits.assistant.spi`. Update imports and recompile consumers. +Hosts still receive `qbit-assistant-provider-api` transitively from `qbit-assistant`. +No schema migration is needed. + +| Old import | New import | +|---|---| +| `com.kingsrook.qbits.assistant.provider.X` (API types) | `com.kingsrook.qbits.assistant.spi.X` | +| `com.kingsrook.qbits.assistant.engine.ModelPricing` | `com.kingsrook.qbits.assistant.spi.ModelPricing` | + +Internal classes such as `provider.RegistryModelProvider` and +`provider.fake.ScriptedModelProvider` stay in the runtime and are not API types. +External consumers such as qbit-marketing depend only on +`com.kingsrook.qbits:qbit-assistant-provider-api` for these contracts and allow +package `com.kingsrook.qbits.assistant.spi` in their guardrails. qbit-bom will add +this package to the G1 defaults. External providers and applications using only provider/pricing types should replace their `qbit-assistant` dependency with @@ -36,7 +49,7 @@ Recompile custom provider types that override `validate(AssistantProvider)` and change the signature to `validate(ProviderSettings)`. The settings carry the configured kind, URL, API version, region, project, CA bundle name, timeouts and `apiKeyEnvName`; the key and bearer-token supplier are not resolved for validation. -Providers using the default validator need no source change. Keep the runtime and +Providers using the default validator need only the import migration. Keep the runtime and provider artifacts on the same version; old validator overrides must be rebuilt. ## P-g: scheduled tasks diff --git a/docs/DESIGN.md b/docs/DESIGN.md index 2d93e41..c6d6316 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -16,6 +16,13 @@ All of it is in standard QQQ tables with full record screens (D6), prefixed `ass `assistant_turn` keeps the per-turn totals and `assistant_usage_daily` the budget rollups, as before. `assistant_usage` adds the per-call detail the home needs: the provider, the failures and latency. +## Provider SPI boundary + +All provider contracts and value types, including `ModelPricing`, belong exclusively +to `com.kingsrook.qbits.assistant.spi` in `qbit-assistant-provider-api`. Consumers +can depend on this artifact alone and allow its package in G1. Runtime provider +registry and fake implementations remain in their existing internal packages. + ## API keys Decision: **reference, not storage.** A provider row holds the NAME of an environment variable (`apiKeyEnvName`); `ProviderService` resolves it through `config.getSecretResolver()` (default `System::getenv`) when it builds a client. @@ -59,7 +66,7 @@ The result goes on the row (`lastTest*`) and into `assistant_usage` (`TEST`), so ## Cost -`cost = input × in + output × out + cacheRead × read + cacheWrite5m × w5 + cacheWrite1h × w1`, in micro-dollars, rounded up (`ModelPricing.costMicros`). +`cost = input × in + output × out + cacheRead × read + cacheWrite5m × w5 + cacheWrite1h × w1`, in micro-dollars, rounded up (`com.kingsrook.qbits.assistant.spi.ModelPricing.costMicros`). Prices come from the `assistant_model_price` row for (type, model). Empty cache prices are 0.1x, 1.25x and 2x the input price. A model without a row uses the `pricing` config map, else costs 0. A price change affects later calls only; each usage row keeps the cost it was recorded with. diff --git a/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicMapping.java b/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicMapping.java index 743da2c..790055d 100644 --- a/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicMapping.java +++ b/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicMapping.java @@ -40,15 +40,15 @@ import com.anthropic.models.messages.ToolUseBlock; import com.anthropic.models.messages.ToolUseBlockParam; import com.anthropic.models.messages.Usage; import com.fasterxml.jackson.core.type.TypeReference; -import com.kingsrook.qbits.assistant.provider.CacheHint; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; -import com.kingsrook.qbits.assistant.provider.ModelUsage; -import com.kingsrook.qbits.assistant.provider.SystemBlock; +import com.kingsrook.qbits.assistant.spi.CacheHint; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; +import com.kingsrook.qbits.assistant.spi.ModelUsage; +import com.kingsrook.qbits.assistant.spi.SystemBlock; /******************************************************************************* diff --git a/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicModelProvider.java b/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicModelProvider.java index 491687f..ee160c5 100644 --- a/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicModelProvider.java +++ b/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicModelProvider.java @@ -29,14 +29,14 @@ import com.anthropic.core.http.StreamResponse; import com.anthropic.helpers.MessageAccumulator; import com.anthropic.models.messages.MessageCreateParams; import com.anthropic.models.messages.RawMessageStreamEvent; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.CompletableStreamHandle; -import com.kingsrook.qbits.assistant.provider.ModelCapabilities; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelUsage; -import com.kingsrook.qbits.assistant.provider.StreamHandle; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.CompletableStreamHandle; +import com.kingsrook.qbits.assistant.spi.ModelCapabilities; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelUsage; +import com.kingsrook.qbits.assistant.spi.StreamHandle; import com.kingsrook.qqq.backend.core.logging.QLogger; import com.kingsrook.qqq.backend.core.utils.StringUtils; import static com.kingsrook.qqq.backend.core.logging.LogUtils.logPair; diff --git a/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicProviderType.java b/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicProviderType.java index 501e5d9..84c1037 100644 --- a/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicProviderType.java +++ b/qbit-assistant-provider-anthropic/src/main/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicProviderType.java @@ -18,8 +18,8 @@ package com.kingsrook.qbits.assistant.provider.anthropic; import java.util.List; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; /******************************************************************************* diff --git a/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicModelProviderTest.java b/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicModelProviderTest.java index 21eceb9..b89e08a 100644 --- a/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicModelProviderTest.java +++ b/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicModelProviderTest.java @@ -24,16 +24,16 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.fasterxml.jackson.core.type.TypeReference; -import com.kingsrook.qbits.assistant.provider.CacheHint; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; -import com.kingsrook.qbits.assistant.provider.StreamHandle; -import com.kingsrook.qbits.assistant.provider.SystemBlock; +import com.kingsrook.qbits.assistant.spi.CacheHint; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; +import com.kingsrook.qbits.assistant.spi.StreamHandle; +import com.kingsrook.qbits.assistant.spi.SystemBlock; import com.kingsrook.qqq.backend.core.utils.JsonUtils; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; diff --git a/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicRequestContractTest.java b/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicRequestContractTest.java index fe49bcd..d937818 100644 --- a/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicRequestContractTest.java +++ b/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/AnthropicRequestContractTest.java @@ -26,10 +26,10 @@ import java.util.Set; import com.anthropic.core.ObjectMappers; import com.fasterxml.jackson.core.type.TypeReference; import com.kingsrook.qbits.assistant.AssistantQBitConfig; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; import com.kingsrook.qbits.assistant.provider.fake.ScriptedModelProvider; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.TurnRunner; import com.kingsrook.qqq.backend.core.context.QContext; diff --git a/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/demo/AssistantDemoServer.java b/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/demo/AssistantDemoServer.java index 2ee862a..305a80d 100644 --- a/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/demo/AssistantDemoServer.java +++ b/qbit-assistant-provider-anthropic/src/test/java/com/kingsrook/qbits/assistant/provider/anthropic/demo/AssistantDemoServer.java @@ -24,7 +24,6 @@ import java.util.Map; import java.util.Set; import com.kingsrook.qbits.assistant.AssistantQBitConfig; import com.kingsrook.qbits.assistant.engine.ConnectionTest; -import com.kingsrook.qbits.assistant.engine.ModelPricing; import com.kingsrook.qbits.assistant.metadata.AssistantMetaDataBuilder; import com.kingsrook.qbits.assistant.model.AssistantModelPrice; import com.kingsrook.qbits.assistant.model.AssistantProvider; @@ -32,6 +31,7 @@ import com.kingsrook.qbits.assistant.provider.anthropic.AnthropicModelProvider; import com.kingsrook.qbits.assistant.provider.anthropic.AnthropicProviderType; import com.kingsrook.qbits.assistant.provider.anthropic.RecordedAnthropicServer; import com.kingsrook.qbits.assistant.provider.fake.ScriptedModelProvider; +import com.kingsrook.qbits.assistant.spi.ModelPricing; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.TurnRunner; import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/AssistantModelProvider.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/AssistantModelProvider.java similarity index 98% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/AssistantModelProvider.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/AssistantModelProvider.java index 5bc10a5..cead194 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/AssistantModelProvider.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/AssistantModelProvider.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/AssistantProviderType.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/AssistantProviderType.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/AssistantProviderType.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/AssistantProviderType.java index 8e842cb..3d2bb48 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/AssistantProviderType.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/AssistantProviderType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.util.List; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/CacheHint.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/CacheHint.java similarity index 95% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/CacheHint.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/CacheHint.java index 5016d2c..f9f87d2 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/CacheHint.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/CacheHint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/CompletableStreamHandle.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/CompletableStreamHandle.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/CompletableStreamHandle.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/CompletableStreamHandle.java index 37f770f..c600be6 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/CompletableStreamHandle.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/CompletableStreamHandle.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.time.Duration; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/DiscoveredModel.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/DiscoveredModel.java similarity index 95% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/DiscoveredModel.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/DiscoveredModel.java index f0f7374..d1b877d 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/DiscoveredModel.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/DiscoveredModel.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/EmbeddingRequest.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/EmbeddingRequest.java similarity index 96% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/EmbeddingRequest.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/EmbeddingRequest.java index 2a903fb..3f01c78 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/EmbeddingRequest.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/EmbeddingRequest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.util.List; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/EmbeddingResponse.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/EmbeddingResponse.java similarity index 95% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/EmbeddingResponse.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/EmbeddingResponse.java index 9101c56..4ec4d1f 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/EmbeddingResponse.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/EmbeddingResponse.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.util.List; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/HealthResult.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/HealthResult.java similarity index 96% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/HealthResult.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/HealthResult.java index 634b0a2..6824591 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/HealthResult.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/HealthResult.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelCapabilities.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelCapabilities.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelCapabilities.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelCapabilities.java index 30d0daa..20d914d 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelCapabilities.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelCapabilities.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelEventListener.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelEventListener.java similarity index 97% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelEventListener.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelEventListener.java index 967387b..3c1c55d 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelEventListener.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelEventListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelMessage.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelMessage.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelMessage.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelMessage.java index a47b3bf..f5afbcf 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelMessage.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelMessage.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.util.ArrayList; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelPart.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelPart.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelPart.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelPart.java index 789a9a1..06e256b 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelPart.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelPart.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.util.LinkedHashMap; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/engine/ModelPricing.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelPricing.java similarity index 98% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/engine/ModelPricing.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelPricing.java index af917cc..474d0e8 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/engine/ModelPricing.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelPricing.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.engine; +package com.kingsrook.qbits.assistant.spi; import java.io.Serializable; import java.util.LinkedHashMap; import java.util.Map; -import com.kingsrook.qbits.assistant.provider.ModelUsage; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelProviderException.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelProviderException.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelProviderException.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelProviderException.java index ce80f13..9ca9f60 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelProviderException.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelProviderException.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelRequest.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelRequest.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelRequest.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelRequest.java index 9956b3e..c098f3a 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelRequest.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelRequest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.util.ArrayList; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelResponse.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelResponse.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelResponse.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelResponse.java index d059399..f9ef3af 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelResponse.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelResponse.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.util.ArrayList; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelToolDefinition.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelToolDefinition.java similarity index 98% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelToolDefinition.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelToolDefinition.java index 4598d8a..717f853 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelToolDefinition.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelToolDefinition.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.util.Map; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelUsage.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelUsage.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelUsage.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelUsage.java index 6d099a7..13f98a3 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ModelUsage.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ModelUsage.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ProviderSettings.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ProviderSettings.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ProviderSettings.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ProviderSettings.java index b94930b..fda0491 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/ProviderSettings.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/ProviderSettings.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.util.function.Supplier; -import javax.net.ssl.SSLContext; import com.fasterxml.jackson.annotation.JsonIgnore; +import javax.net.ssl.SSLContext; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/StreamHandle.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/StreamHandle.java similarity index 97% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/StreamHandle.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/StreamHandle.java index cdd779f..467ad27 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/StreamHandle.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/StreamHandle.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.time.Duration; diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/SystemBlock.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/SystemBlock.java similarity index 98% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/SystemBlock.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/SystemBlock.java index 03b877a..c945cd3 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/SystemBlock.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/SystemBlock.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/TokenCount.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/TokenCount.java similarity index 97% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/TokenCount.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/TokenCount.java index 0000f20..9aa467b 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/TokenCount.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/TokenCount.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; /******************************************************************************* diff --git a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/TrustedCaBundle.java b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/TrustedCaBundle.java similarity index 99% rename from qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/TrustedCaBundle.java rename to qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/TrustedCaBundle.java index 6b98061..6263da6 100644 --- a/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/provider/TrustedCaBundle.java +++ b/qbit-assistant-provider-api/src/main/java/com/kingsrook/qbits/assistant/spi/TrustedCaBundle.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.io.ByteArrayInputStream; diff --git a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderApiArchitectureTest.java b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderApiArchitectureTest.java deleted file mode 100644 index 5a584c7..0000000 --- a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderApiArchitectureTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2026 Kingsrook, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.kingsrook.qbits.assistant.provider; - - -import java.util.Set; -import com.tngtech.archunit.base.DescribedPredicate; -import com.tngtech.archunit.core.domain.JavaClass; -import com.tngtech.archunit.core.domain.JavaClasses; -import com.tngtech.archunit.core.importer.ClassFileImporter; -import com.tngtech.archunit.core.importer.ImportOption; -import org.junit.jupiter.api.Test; -import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; -import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; - - -/******************************************************************************* - ** Keep external provider consumers independent of the assistant runtime and QQQ. - *******************************************************************************/ -class ProviderApiArchitectureTest -{ - /******************************************************************************* - ** Allow only the extracted types, including their nested enums, under the - ** assistant namespace. A future dependency on any runtime package must fail. - *******************************************************************************/ - @Test - void dependsOnlyOnApiTypes() - { - Set apiTypes = Set.of( - "com.kingsrook.qbits.assistant.provider.AssistantModelProvider", - "com.kingsrook.qbits.assistant.provider.AssistantProviderType", - "com.kingsrook.qbits.assistant.provider.CacheHint", - "com.kingsrook.qbits.assistant.provider.CompletableStreamHandle", - "com.kingsrook.qbits.assistant.provider.DiscoveredModel", - "com.kingsrook.qbits.assistant.provider.EmbeddingRequest", - "com.kingsrook.qbits.assistant.provider.EmbeddingResponse", - "com.kingsrook.qbits.assistant.provider.HealthResult", - "com.kingsrook.qbits.assistant.provider.ModelCapabilities", - "com.kingsrook.qbits.assistant.provider.ModelEventListener", - "com.kingsrook.qbits.assistant.provider.ModelMessage", - "com.kingsrook.qbits.assistant.provider.ModelPart", - "com.kingsrook.qbits.assistant.provider.ModelProviderException", - "com.kingsrook.qbits.assistant.provider.ModelRequest", - "com.kingsrook.qbits.assistant.provider.ModelResponse", - "com.kingsrook.qbits.assistant.provider.ModelToolDefinition", - "com.kingsrook.qbits.assistant.provider.ModelUsage", - "com.kingsrook.qbits.assistant.provider.ProviderSettings", - "com.kingsrook.qbits.assistant.provider.StreamHandle", - "com.kingsrook.qbits.assistant.provider.SystemBlock", - "com.kingsrook.qbits.assistant.provider.TokenCount", - "com.kingsrook.qbits.assistant.provider.TrustedCaBundle", - "com.kingsrook.qbits.assistant.engine.ModelPricing"); - JavaClasses imported = new ClassFileImporter() - .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) - .importPackages("com.kingsrook.qbits.assistant"); - DescribedPredicate outsideRuntime = DescribedPredicate.describe("outside assistant or an extracted API type", type -> - !type.getName().startsWith("com.kingsrook.qbits.assistant.") || apiTypes.contains(type.getName().split("\\$", 2)[0])); - classes().should().onlyDependOnClassesThat(outsideRuntime).check(imported); - noClasses().should().dependOnClassesThat().resideInAnyPackage("com.kingsrook.qqq..").check(imported); - } -} diff --git a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderApiArchitectureTest.java b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderApiArchitectureTest.java new file mode 100644 index 0000000..6eece63 --- /dev/null +++ b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderApiArchitectureTest.java @@ -0,0 +1,46 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.assistant.spi; + + +import com.tngtech.archunit.core.domain.JavaClasses; +import com.tngtech.archunit.core.importer.ClassFileImporter; +import org.junit.jupiter.api.Test; +import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideInAPackage; +import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideOutsideOfPackage; +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; + + +/******************************************************************************* + ** Keep external provider consumers independent of the assistant runtime and QQQ. + *******************************************************************************/ +class ProviderApiArchitectureTest +{ + /******************************************************************************* + ** Import the entire artifact so an accidental package outside spi also fails. + *******************************************************************************/ + @Test + void dependsOnlyOnApiTypes() + { + String spiPackage = "com.kingsrook.qbits.assistant.spi"; + JavaClasses imported = new ClassFileImporter().importUrl(AssistantModelProvider.class.getProtectionDomain().getCodeSource().getLocation()); + classes().should().resideInAPackage(spiPackage).check(imported); + noClasses().should().dependOnClassesThat(resideInAPackage("com.kingsrook.qbits..").and(resideOutsideOfPackage(spiPackage))).check(imported); + noClasses().should().dependOnClassesThat().resideInAnyPackage("com.kingsrook.qqq..").check(imported); + } +} diff --git a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderApiTest.java b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderApiTest.java similarity index 99% rename from qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderApiTest.java rename to qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderApiTest.java index e7e59b8..853f9f1 100644 --- a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderApiTest.java +++ b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderApiTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.time.Duration; @@ -23,11 +23,10 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; -import javax.net.ssl.SSLContext; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.kingsrook.qbits.assistant.engine.ModelPricing; +import javax.net.ssl.SSLContext; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderComponentsTest.java b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderComponentsTest.java similarity index 97% rename from qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderComponentsTest.java rename to qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderComponentsTest.java index e89acf7..5b23e38 100644 --- a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderComponentsTest.java +++ b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderComponentsTest.java @@ -14,11 +14,10 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.time.Duration; -import com.kingsrook.qbits.assistant.engine.ModelPricing; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderDefaultsTest.java b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderDefaultsTest.java similarity index 99% rename from qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderDefaultsTest.java rename to qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderDefaultsTest.java index 9f9342b..7d44018 100644 --- a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/ProviderDefaultsTest.java +++ b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/ProviderDefaultsTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.util.List; diff --git a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/TrustedCaBundleTest.java b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/TrustedCaBundleTest.java similarity index 98% rename from qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/TrustedCaBundleTest.java rename to qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/TrustedCaBundleTest.java index 081c539..c8c701d 100644 --- a/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/provider/TrustedCaBundleTest.java +++ b/qbit-assistant-provider-api/src/test/java/com/kingsrook/qbits/assistant/spi/TrustedCaBundleTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.kingsrook.qbits.assistant.provider; +package com.kingsrook.qbits.assistant.spi; import java.security.KeyStore; diff --git a/qbit-assistant-provider-bedrock/src/main/java/com/kingsrook/qbits/assistant/provider/bedrock/BedrockProviderType.java b/qbit-assistant-provider-bedrock/src/main/java/com/kingsrook/qbits/assistant/provider/bedrock/BedrockProviderType.java index 3d0421d..642a904 100644 --- a/qbit-assistant-provider-bedrock/src/main/java/com/kingsrook/qbits/assistant/provider/bedrock/BedrockProviderType.java +++ b/qbit-assistant-provider-bedrock/src/main/java/com/kingsrook/qbits/assistant/provider/bedrock/BedrockProviderType.java @@ -24,11 +24,11 @@ import com.anthropic.backends.Backend; import com.anthropic.bedrock.backends.BedrockBackend; import com.anthropic.client.okhttp.AnthropicOkHttpClient; import com.anthropic.core.Timeout; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.DiscoveredModel; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; import com.kingsrook.qbits.assistant.provider.anthropic.AnthropicModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.DiscoveredModel; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; diff --git a/qbit-assistant-provider-bedrock/src/test/java/com/kingsrook/qbits/assistant/provider/bedrock/BedrockContractTest.java b/qbit-assistant-provider-bedrock/src/test/java/com/kingsrook/qbits/assistant/provider/bedrock/BedrockContractTest.java index c890845..4491cb0 100644 --- a/qbit-assistant-provider-bedrock/src/test/java/com/kingsrook/qbits/assistant/provider/bedrock/BedrockContractTest.java +++ b/qbit-assistant-provider-bedrock/src/test/java/com/kingsrook/qbits/assistant/provider/bedrock/BedrockContractTest.java @@ -27,13 +27,13 @@ import java.util.Set; import com.kingsrook.qbits.assistant.AssistantQBitConfig; import com.kingsrook.qbits.assistant.engine.ProviderService; import com.kingsrook.qbits.assistant.model.AssistantProvider; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; import com.kingsrook.qbits.assistant.provider.anthropic.AnthropicModelProvider; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; import com.kingsrook.qbits.assistant.testing.CloudProviderTestServer; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; diff --git a/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiCompatibleModelProvider.java b/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiCompatibleModelProvider.java index 9a54e97..3977f71 100644 --- a/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiCompatibleModelProvider.java +++ b/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiCompatibleModelProvider.java @@ -36,19 +36,19 @@ import java.util.concurrent.atomic.AtomicReference; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.CompletableStreamHandle; -import com.kingsrook.qbits.assistant.provider.EmbeddingRequest; -import com.kingsrook.qbits.assistant.provider.EmbeddingResponse; -import com.kingsrook.qbits.assistant.provider.ModelCapabilities; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; -import com.kingsrook.qbits.assistant.provider.ModelUsage; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; -import com.kingsrook.qbits.assistant.provider.StreamHandle; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.CompletableStreamHandle; +import com.kingsrook.qbits.assistant.spi.EmbeddingRequest; +import com.kingsrook.qbits.assistant.spi.EmbeddingResponse; +import com.kingsrook.qbits.assistant.spi.ModelCapabilities; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelUsage; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.StreamHandle; /******************************************************************************* diff --git a/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiCompatibleProviderType.java b/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiCompatibleProviderType.java index 51c6950..75b7406 100644 --- a/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiCompatibleProviderType.java +++ b/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiCompatibleProviderType.java @@ -18,12 +18,12 @@ package com.kingsrook.qbits.assistant.provider.openai; import java.util.List; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.DiscoveredModel; -import com.kingsrook.qbits.assistant.provider.HealthResult; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.DiscoveredModel; +import com.kingsrook.qbits.assistant.spi.HealthResult; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; /******************************************************************************* diff --git a/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiHttp.java b/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiHttp.java index f0891c1..44009b3 100644 --- a/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiHttp.java +++ b/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiHttp.java @@ -33,12 +33,12 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import javax.net.ssl.SSLHandshakeException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.kingsrook.qbits.assistant.provider.DiscoveredModel; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.DiscoveredModel; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; +import javax.net.ssl.SSLHandshakeException; /******************************************************************************* diff --git a/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiMapping.java b/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiMapping.java index c459321..c2241b3 100644 --- a/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiMapping.java +++ b/qbit-assistant-provider-openai/src/main/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiMapping.java @@ -24,12 +24,12 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.kingsrook.qbits.assistant.provider.ModelCapabilities; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; -import com.kingsrook.qbits.assistant.provider.SystemBlock; +import com.kingsrook.qbits.assistant.spi.ModelCapabilities; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; +import com.kingsrook.qbits.assistant.spi.SystemBlock; /******************************************************************************* diff --git a/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/LiveOpenAiCompatibleTest.java b/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/LiveOpenAiCompatibleTest.java index b84349a..57f8220 100644 --- a/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/LiveOpenAiCompatibleTest.java +++ b/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/LiveOpenAiCompatibleTest.java @@ -21,10 +21,10 @@ import java.nio.file.Path; import java.time.Duration; import java.util.List; import com.kingsrook.qbits.assistant.AssistantQBitConfig; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; diff --git a/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiContractTest.java b/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiContractTest.java index 35f37a3..6c56290 100644 --- a/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiContractTest.java +++ b/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiContractTest.java @@ -22,16 +22,16 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import com.fasterxml.jackson.databind.JsonNode; -import com.kingsrook.qbits.assistant.provider.ModelCapabilities; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; -import com.kingsrook.qbits.assistant.provider.SystemBlock; +import com.kingsrook.qbits.assistant.spi.ModelCapabilities; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.SystemBlock; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; diff --git a/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiEmbeddingTest.java b/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiEmbeddingTest.java index bb398b4..cf4ae44 100644 --- a/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiEmbeddingTest.java +++ b/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiEmbeddingTest.java @@ -18,9 +18,9 @@ package com.kingsrook.qbits.assistant.provider.openai; import java.util.List; -import com.kingsrook.qbits.assistant.provider.EmbeddingRequest; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.EmbeddingRequest; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiTlsTest.java b/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiTlsTest.java index 46cfc45..e69127c 100644 --- a/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiTlsTest.java +++ b/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/OpenAiTlsTest.java @@ -24,14 +24,14 @@ import java.nio.file.Path; import java.security.KeyStore; import java.time.Duration; import java.util.Set; -import javax.net.ssl.KeyManagerFactory; -import javax.net.ssl.SSLContext; import com.kingsrook.qbits.assistant.AssistantQBitConfig; import com.kingsrook.qbits.assistant.model.AssistantProvider; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qqq.backend.core.context.QContext; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import static org.assertj.core.api.Assertions.assertThat; diff --git a/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/demo/OpenAiDemoServer.java b/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/demo/OpenAiDemoServer.java index 4930c21..2c40a24 100644 --- a/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/demo/OpenAiDemoServer.java +++ b/qbit-assistant-provider-openai/src/test/java/com/kingsrook/qbits/assistant/provider/openai/demo/OpenAiDemoServer.java @@ -36,9 +36,9 @@ import com.kingsrook.qbits.assistant.persistence.AssistantStore; import com.kingsrook.qbits.assistant.processes.DiscoverModelsProcess; import com.kingsrook.qbits.assistant.processes.TestConnectionProcess; import com.kingsrook.qbits.assistant.processes.TestModelConnectionProcess; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; import com.kingsrook.qbits.assistant.provider.fake.ScriptedModelProvider; import com.kingsrook.qbits.assistant.provider.openai.OpenAiCompatibleProviderType; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.EvalSupport; import com.kingsrook.qbits.assistant.testing.GoldenTasks; diff --git a/qbit-assistant-provider-vertex/src/main/java/com/kingsrook/qbits/assistant/provider/vertex/VertexModelProvider.java b/qbit-assistant-provider-vertex/src/main/java/com/kingsrook/qbits/assistant/provider/vertex/VertexModelProvider.java index 1d24583..23b3b75 100644 --- a/qbit-assistant-provider-vertex/src/main/java/com/kingsrook/qbits/assistant/provider/vertex/VertexModelProvider.java +++ b/qbit-assistant-provider-vertex/src/main/java/com/kingsrook/qbits/assistant/provider/vertex/VertexModelProvider.java @@ -23,14 +23,14 @@ import com.anthropic.client.okhttp.AnthropicOkHttpClient; import com.anthropic.core.Timeout; import com.anthropic.vertex.backends.VertexBackend; import com.google.auth.oauth2.GoogleCredentials; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.ModelCapabilities; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; -import com.kingsrook.qbits.assistant.provider.StreamHandle; import com.kingsrook.qbits.assistant.provider.anthropic.AnthropicModelProvider; import com.kingsrook.qbits.assistant.provider.openai.OpenAiCompatibleModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.ModelCapabilities; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.StreamHandle; /******************************************************************************* diff --git a/qbit-assistant-provider-vertex/src/main/java/com/kingsrook/qbits/assistant/provider/vertex/VertexProviderType.java b/qbit-assistant-provider-vertex/src/main/java/com/kingsrook/qbits/assistant/provider/vertex/VertexProviderType.java index d60fb52..d7192c6 100644 --- a/qbit-assistant-provider-vertex/src/main/java/com/kingsrook/qbits/assistant/provider/vertex/VertexProviderType.java +++ b/qbit-assistant-provider-vertex/src/main/java/com/kingsrook/qbits/assistant/provider/vertex/VertexProviderType.java @@ -19,10 +19,10 @@ package com.kingsrook.qbits.assistant.provider.vertex; import java.util.ArrayList; import java.util.List; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.DiscoveredModel; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.DiscoveredModel; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; /******************************************************************************* diff --git a/qbit-assistant-provider-vertex/src/test/java/com/kingsrook/qbits/assistant/provider/vertex/VertexContractTest.java b/qbit-assistant-provider-vertex/src/test/java/com/kingsrook/qbits/assistant/provider/vertex/VertexContractTest.java index bf62e6b..bc8813d 100644 --- a/qbit-assistant-provider-vertex/src/test/java/com/kingsrook/qbits/assistant/provider/vertex/VertexContractTest.java +++ b/qbit-assistant-provider-vertex/src/test/java/com/kingsrook/qbits/assistant/provider/vertex/VertexContractTest.java @@ -29,11 +29,11 @@ import com.google.auth.oauth2.GoogleCredentials; import com.kingsrook.qbits.assistant.AssistantQBitConfig; import com.kingsrook.qbits.assistant.engine.ProviderService; import com.kingsrook.qbits.assistant.model.AssistantProvider; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; import com.kingsrook.qbits.assistant.testing.CloudProviderTestServer; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/AssistantQBitConfig.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/AssistantQBitConfig.java index 21877c0..21fa600 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/AssistantQBitConfig.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/AssistantQBitConfig.java @@ -17,7 +17,6 @@ package com.kingsrook.qbits.assistant; -import javax.net.ssl.SSLContext; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -32,11 +31,11 @@ import java.util.regex.Pattern; import com.fasterxml.jackson.annotation.JsonIgnore; import com.kingsrook.qbits.assistant.classification.ClassificationSource; import com.kingsrook.qbits.assistant.classification.ConfiguredClassificationSource; -import com.kingsrook.qbits.assistant.engine.ModelPricing; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.TrustedCaBundle; import com.kingsrook.qbits.assistant.rag.VectorStore; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.ModelPricing; +import com.kingsrook.qbits.assistant.spi.TrustedCaBundle; import com.kingsrook.qbits.assistant.uiapi.UiApiGateway; import com.kingsrook.qqq.backend.core.actions.ai.AiExposure; import com.kingsrook.qqq.backend.core.actions.ai.DataClassification; @@ -45,6 +44,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.producers.MetaDataCustomize import com.kingsrook.qqq.backend.core.model.metadata.qbits.QBitConfig; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.utils.StringUtils; +import javax.net.ssl.SSLContext; /******************************************************************************* diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ConnectionTest.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ConnectionTest.java index 45289f2..affa0cf 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ConnectionTest.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ConnectionTest.java @@ -23,15 +23,16 @@ import java.util.List; import com.kingsrook.qbits.assistant.AssistantRuntime; import com.kingsrook.qbits.assistant.model.AssistantModel; import com.kingsrook.qbits.assistant.model.AssistantProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.HealthResult; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; import com.kingsrook.qbits.assistant.provider.RegistryModelProvider; -import com.kingsrook.qbits.assistant.provider.StreamHandle; import com.kingsrook.qbits.assistant.rag.EmbeddingService; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.HealthResult; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelPricing; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; +import com.kingsrook.qbits.assistant.spi.StreamHandle; import com.kingsrook.qqq.backend.core.actions.ai.DataClassification; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.data.QRecord; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ContextBuilder.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ContextBuilder.java index f427e6d..9d63f06 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ContextBuilder.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ContextBuilder.java @@ -28,16 +28,16 @@ import java.util.Set; import java.util.TreeMap; import com.kingsrook.qbits.assistant.AssistantQBitConfig; import com.kingsrook.qbits.assistant.model.AssistantMessage; -import com.kingsrook.qbits.assistant.provider.CacheHint; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; -import com.kingsrook.qbits.assistant.provider.SystemBlock; +import com.kingsrook.qbits.assistant.spi.CacheHint; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; +import com.kingsrook.qbits.assistant.spi.SystemBlock; import com.kingsrook.qbits.assistant.tools.KnowledgeTool; import com.kingsrook.qbits.assistant.tools.PresentResultsTool; -import com.kingsrook.qbits.assistant.tools.bulkload.BulkLoadTools; import com.kingsrook.qbits.assistant.tools.UiApiToolbox; +import com.kingsrook.qbits.assistant.tools.bulkload.BulkLoadTools; import com.kingsrook.qqq.backend.core.actions.ai.AiToolDefinition; import com.kingsrook.qqq.backend.core.actions.ai.AiToolKernel; import com.kingsrook.qqq.backend.core.context.QContext; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/FallbackChain.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/FallbackChain.java index 967b1ca..c93560b 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/FallbackChain.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/FallbackChain.java @@ -30,11 +30,11 @@ import com.kingsrook.qbits.assistant.AssistantRuntime; import com.kingsrook.qbits.assistant.model.AssistantModel; import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.model.AssistantTurn; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; import com.kingsrook.qqq.backend.core.actions.ai.DataClassification; import com.kingsrook.qqq.backend.core.exceptions.QException; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ModelDiscovery.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ModelDiscovery.java index 4c7a11e..96127d0 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ModelDiscovery.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ModelDiscovery.java @@ -24,11 +24,11 @@ import java.util.Set; import com.kingsrook.qbits.assistant.AssistantRuntime; import com.kingsrook.qbits.assistant.model.AssistantModel; import com.kingsrook.qbits.assistant.model.AssistantProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.DiscoveredModel; -import com.kingsrook.qbits.assistant.provider.ModelCapabilities; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.DiscoveredModel; +import com.kingsrook.qbits.assistant.spi.ModelCapabilities; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.data.QRecord; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ModelRouter.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ModelRouter.java index 9e29a55..c58e7ee 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ModelRouter.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ModelRouter.java @@ -34,15 +34,15 @@ import com.kingsrook.qbits.assistant.model.AssistantPendingAction; import com.kingsrook.qbits.assistant.model.AssistantProfile; import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.model.AssistantTurn; -import com.kingsrook.qbits.assistant.provider.CacheHint; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; -import com.kingsrook.qbits.assistant.provider.ModelUsage; -import com.kingsrook.qbits.assistant.provider.StreamHandle; -import com.kingsrook.qbits.assistant.provider.SystemBlock; import com.kingsrook.qbits.assistant.scheduled.ScheduledTurn; +import com.kingsrook.qbits.assistant.spi.CacheHint; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelUsage; +import com.kingsrook.qbits.assistant.spi.StreamHandle; +import com.kingsrook.qbits.assistant.spi.SystemBlock; import com.kingsrook.qqq.backend.core.actions.ai.DataClassification; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ProviderHealth.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ProviderHealth.java index 6f8ec45..9d78fe0 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ProviderHealth.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ProviderHealth.java @@ -23,9 +23,9 @@ import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; import com.kingsrook.qbits.assistant.AssistantRuntime; import com.kingsrook.qbits.assistant.model.AssistantProvider; -import com.kingsrook.qbits.assistant.provider.HealthResult; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.HealthResult; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.data.QRecord; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ProviderService.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ProviderService.java index e847bb7..9618395 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ProviderService.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/ProviderService.java @@ -36,10 +36,11 @@ import com.kingsrook.qbits.assistant.model.AssistantModel; import com.kingsrook.qbits.assistant.model.AssistantModelPrice; import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; import com.kingsrook.qbits.assistant.provider.RegistryModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.ModelPricing; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.logging.QLogger; import com.kingsrook.qqq.backend.core.utils.StringUtils; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/RunningTurn.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/RunningTurn.java index 997a49e..73afa0d 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/RunningTurn.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/RunningTurn.java @@ -18,7 +18,7 @@ package com.kingsrook.qbits.assistant.engine; import java.util.concurrent.atomic.AtomicReference; -import com.kingsrook.qbits.assistant.provider.StreamHandle; +import com.kingsrook.qbits.assistant.spi.StreamHandle; /******************************************************************************* diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/TurnClassification.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/TurnClassification.java index 9643cf1..7cfbf31 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/TurnClassification.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/TurnClassification.java @@ -29,7 +29,7 @@ import java.util.Set; import com.kingsrook.qbits.assistant.classification.ClassificationSource; import com.kingsrook.qbits.assistant.classification.Classifications; import com.kingsrook.qbits.assistant.model.AssistantConversation; -import com.kingsrook.qbits.assistant.provider.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelPart; import com.kingsrook.qqq.backend.core.actions.ai.AiRecordRef; import com.kingsrook.qqq.backend.core.actions.ai.AiToolResult; import com.kingsrook.qqq.backend.core.actions.ai.DataClassification; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/TurnEngine.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/TurnEngine.java index 1dc764a..fa92d3a 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/TurnEngine.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/TurnEngine.java @@ -44,18 +44,19 @@ import com.kingsrook.qbits.assistant.model.AssistantScheduledTask; import com.kingsrook.qbits.assistant.model.AssistantToolCall; import com.kingsrook.qbits.assistant.model.AssistantTurn; import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.CacheHint; -import com.kingsrook.qbits.assistant.provider.ModelCapabilities; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; -import com.kingsrook.qbits.assistant.provider.ModelUsage; -import com.kingsrook.qbits.assistant.provider.StreamHandle; import com.kingsrook.qbits.assistant.scheduled.ScheduledTurn; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.CacheHint; +import com.kingsrook.qbits.assistant.spi.ModelCapabilities; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelPricing; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelUsage; +import com.kingsrook.qbits.assistant.spi.StreamHandle; import com.kingsrook.qbits.assistant.tools.KnowledgeTool; import com.kingsrook.qbits.assistant.tools.PresentResultsTool; import com.kingsrook.qbits.assistant.tools.UiApiToolbox; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/UsageRecorder.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/UsageRecorder.java index bd237eb..2edeb23 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/UsageRecorder.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/engine/UsageRecorder.java @@ -19,9 +19,10 @@ package com.kingsrook.qbits.assistant.engine; import com.kingsrook.qbits.assistant.model.AssistantUsage; import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelResponse; -import com.kingsrook.qbits.assistant.provider.ModelUsage; +import com.kingsrook.qbits.assistant.spi.ModelPricing; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelUsage; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.logging.QLogger; import static com.kingsrook.qqq.backend.core.logging.LogUtils.logPair; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/home/AssistantHomeData.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/home/AssistantHomeData.java index 88e39b5..ea47bbd 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/home/AssistantHomeData.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/home/AssistantHomeData.java @@ -17,7 +17,15 @@ package com.kingsrook.qbits.assistant.home; -import com.kingsrook.qbits.assistant.model.AssistantTurn; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneOffset; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; import com.kingsrook.qbits.assistant.AssistantRuntime; import com.kingsrook.qbits.assistant.AssistantSecurity; import com.kingsrook.qbits.assistant.engine.BudgetService; @@ -29,23 +37,15 @@ import com.kingsrook.qbits.assistant.model.AssistantBudgetOverride; import com.kingsrook.qbits.assistant.model.AssistantConversation; import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.model.AssistantToolCall; +import com.kingsrook.qbits.assistant.model.AssistantTurn; import com.kingsrook.qbits.assistant.model.AssistantUsage; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterOrderBy; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; import com.kingsrook.qqq.backend.core.model.data.QRecord; -import java.time.Instant; -import java.time.LocalDate; -import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; /******************************************************************************* diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/metadata/AssistantRecordScreens.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/metadata/AssistantRecordScreens.java index 3ed6616..5f77fe8 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/metadata/AssistantRecordScreens.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/metadata/AssistantRecordScreens.java @@ -51,7 +51,7 @@ import com.kingsrook.qbits.assistant.model.AssistantTurn; import com.kingsrook.qbits.assistant.model.AssistantTurnEvent; import com.kingsrook.qbits.assistant.model.AssistantUsage; import com.kingsrook.qbits.assistant.model.AssistantUsageDaily; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.ChildRecordListRenderer; import com.kingsrook.qqq.backend.core.instances.QInstanceEnricher; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/metadata/AssistantSettingsPossibleValueProvider.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/metadata/AssistantSettingsPossibleValueProvider.java index b1ef3ab..02359b4 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/metadata/AssistantSettingsPossibleValueProvider.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/metadata/AssistantSettingsPossibleValueProvider.java @@ -26,7 +26,7 @@ import com.kingsrook.qbits.assistant.AssistantRuntime; import com.kingsrook.qbits.assistant.model.AssistantModel; import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; import com.kingsrook.qqq.backend.core.actions.values.QCustomPossibleValueProvider; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.exceptions.QException; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/persistence/AssistantStore.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/persistence/AssistantStore.java index 6cfe697..712a31c 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/persistence/AssistantStore.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/persistence/AssistantStore.java @@ -51,8 +51,8 @@ import com.kingsrook.qbits.assistant.model.AssistantTurn; import com.kingsrook.qbits.assistant.model.AssistantTurnEvent; import com.kingsrook.qbits.assistant.model.AssistantUsage; import com.kingsrook.qbits.assistant.model.AssistantUsageDaily; -import com.kingsrook.qbits.assistant.provider.ModelUsage; import com.kingsrook.qbits.assistant.scheduled.ScheduledTasks; +import com.kingsrook.qbits.assistant.spi.ModelUsage; import com.kingsrook.qqq.backend.core.actions.tables.DeleteAction; import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/provider/RegistryModelProvider.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/provider/RegistryModelProvider.java index b83ad44..6706968 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/provider/RegistryModelProvider.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/provider/RegistryModelProvider.java @@ -18,6 +18,15 @@ package com.kingsrook.qbits.assistant.provider; import com.kingsrook.qbits.assistant.model.AssistantModel; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.EmbeddingRequest; +import com.kingsrook.qbits.assistant.spi.EmbeddingResponse; +import com.kingsrook.qbits.assistant.spi.ModelCapabilities; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.StreamHandle; +import com.kingsrook.qbits.assistant.spi.TokenCount; /******************************************************************************* diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/provider/fake/ScriptedModelProvider.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/provider/fake/ScriptedModelProvider.java index 4dcc5e0..d4464ed 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/provider/fake/ScriptedModelProvider.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/provider/fake/ScriptedModelProvider.java @@ -24,16 +24,16 @@ import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.CompletableStreamHandle; -import com.kingsrook.qbits.assistant.provider.ModelCapabilities; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; -import com.kingsrook.qbits.assistant.provider.ModelUsage; -import com.kingsrook.qbits.assistant.provider.StreamHandle; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.CompletableStreamHandle; +import com.kingsrook.qbits.assistant.spi.ModelCapabilities; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelUsage; +import com.kingsrook.qbits.assistant.spi.StreamHandle; import com.kingsrook.qqq.backend.core.utils.JsonUtils; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/rag/EmbeddingService.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/rag/EmbeddingService.java index f9fb197..1d3eb68 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/rag/EmbeddingService.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/rag/EmbeddingService.java @@ -30,11 +30,11 @@ import com.kingsrook.qbits.assistant.engine.PolicyService; import com.kingsrook.qbits.assistant.engine.ProviderService; import com.kingsrook.qbits.assistant.engine.UsageRecorder; import com.kingsrook.qbits.assistant.model.AssistantDataAudit; -import com.kingsrook.qbits.assistant.provider.EmbeddingRequest; -import com.kingsrook.qbits.assistant.provider.EmbeddingResponse; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelResponse; import com.kingsrook.qbits.assistant.scheduled.ScheduledTurn; +import com.kingsrook.qbits.assistant.spi.EmbeddingRequest; +import com.kingsrook.qbits.assistant.spi.EmbeddingResponse; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelResponse; import com.kingsrook.qqq.backend.core.actions.ai.DataClassification; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.exceptions.QException; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/KnowledgeTool.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/KnowledgeTool.java index 0989c86..ed117d9 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/KnowledgeTool.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/KnowledgeTool.java @@ -28,11 +28,11 @@ import com.kingsrook.qbits.assistant.AssistantRuntime; import com.kingsrook.qbits.assistant.engine.PolicyService; import com.kingsrook.qbits.assistant.engine.TurnEngine; import com.kingsrook.qbits.assistant.model.AssistantRagSource; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; import com.kingsrook.qbits.assistant.rag.EmbeddingService; import com.kingsrook.qbits.assistant.rag.RagService; import com.kingsrook.qbits.assistant.rag.TextChunks; import com.kingsrook.qbits.assistant.rag.VectorStore; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; import com.kingsrook.qqq.backend.core.actions.ai.AiRecordRef; import com.kingsrook.qqq.backend.core.actions.ai.AiToolOutcome; import com.kingsrook.qqq.backend.core.actions.ai.AiToolResult; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/PresentResultsTool.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/PresentResultsTool.java index 59beff6..87c3da6 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/PresentResultsTool.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/PresentResultsTool.java @@ -28,7 +28,7 @@ import java.util.Locale; import java.util.Map; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; import com.kingsrook.qbits.assistant.uiapi.UiApiCall; import com.kingsrook.qbits.assistant.uiapi.UiApiResult; import com.kingsrook.qqq.backend.core.actions.ai.AiToolOutcome; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/UiApiToolbox.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/UiApiToolbox.java index d2894a1..e9a5787 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/UiApiToolbox.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/UiApiToolbox.java @@ -30,7 +30,7 @@ import java.util.TreeMap; import com.kingsrook.qbits.assistant.access.DataAccessMode; import com.kingsrook.qbits.assistant.access.DataAccessService; import com.kingsrook.qbits.assistant.engine.PolicyService; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; import com.kingsrook.qbits.assistant.uiapi.UiApiCall; import com.kingsrook.qbits.assistant.uiapi.UiApiGateway; import com.kingsrook.qbits.assistant.uiapi.UiApiResult; diff --git a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/bulkload/BulkLoadTools.java b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/bulkload/BulkLoadTools.java index e7a855f..d97dcb6 100644 --- a/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/bulkload/BulkLoadTools.java +++ b/qbit-assistant/src/main/java/com/kingsrook/qbits/assistant/tools/bulkload/BulkLoadTools.java @@ -25,7 +25,7 @@ import java.util.Map; import java.util.Set; import com.kingsrook.qbits.assistant.access.DataAccessService; import com.kingsrook.qbits.assistant.engine.PolicyService; -import com.kingsrook.qbits.assistant.provider.ModelToolDefinition; +import com.kingsrook.qbits.assistant.spi.ModelToolDefinition; import com.kingsrook.qbits.assistant.tools.UiApiToolbox; import com.kingsrook.qbits.assistant.uiapi.UiApiCall; import com.kingsrook.qbits.assistant.uiapi.UiApiResult; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/ArchitectureTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/ArchitectureTest.java index bba0177..295f788 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/ArchitectureTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/ArchitectureTest.java @@ -23,9 +23,9 @@ import com.kingsrook.qbits.assistant.model.AssistantProfile; import com.kingsrook.qbits.assistant.model.AssistantProfileSkill; import com.kingsrook.qbits.assistant.model.AssistantSkill; import com.kingsrook.qbits.assistant.persistence.AssistantStore; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; import com.kingsrook.qbits.assistant.tools.UiApiToolbox; import com.kingsrook.qbits.assistant.uiapi.CoreUiApiGateway; -import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.actions.ai.AiToolKernel; import com.kingsrook.qqq.backend.core.actions.dashboard.RenderWidgetAction; import com.kingsrook.qqq.backend.core.actions.processes.RunProcessAction; @@ -39,8 +39,10 @@ import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; import com.kingsrook.qqq.backend.core.actions.tables.RecordSearchAction; import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction; import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.session.QSession; import com.kingsrook.qqq.backend.core.model.session.QSystemUserSession; +import com.tngtech.archunit.core.domain.JavaClass; import com.tngtech.archunit.core.domain.JavaClasses; import com.tngtech.archunit.core.importer.ClassFileImporter; import com.tngtech.archunit.core.importer.ImportOption; @@ -82,6 +84,23 @@ class ArchitectureTest + /******************************************************************************* + ** The runtime must not contribute classes to any package owned by the SPI jar. + *******************************************************************************/ + @Test + void noSplitPackagesWithProviderApi() + { + JavaClasses apiClasses = new ClassFileImporter().importUrl(AssistantModelProvider.class.getProtectionDomain().getCodeSource().getLocation()); + JavaClasses runtimeClasses = new ClassFileImporter().importUrl(AssistantQBitProducer.class.getProtectionDomain().getCodeSource().getLocation()); + String[] apiPackages = apiClasses.stream().map(JavaClass::getPackageName).distinct().toArray(String[]::new); + assertThat(apiPackages).containsExactly("com.kingsrook.qbits.assistant.spi"); + noClasses().should().resideInAnyPackage(apiPackages) + .because("provider API packages belong exclusively to qbit-assistant-provider-api") + .check(runtimeClasses); + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/access/ProfilesSkillsAndAccessTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/access/ProfilesSkillsAndAccessTest.java index 13ea666..8a9bb5a 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/access/ProfilesSkillsAndAccessTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/access/ProfilesSkillsAndAccessTest.java @@ -29,7 +29,7 @@ import com.kingsrook.qbits.assistant.model.AssistantDataAccess; import com.kingsrook.qbits.assistant.model.AssistantProfile; import com.kingsrook.qbits.assistant.model.AssistantProfileSkill; import com.kingsrook.qbits.assistant.model.AssistantSkill; -import com.kingsrook.qbits.assistant.provider.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelRequest; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qbits.assistant.testing.UiApiTestServer; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/classification/ClassificationTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/classification/ClassificationTest.java index d00a1c8..3036432 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/classification/ClassificationTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/classification/ClassificationTest.java @@ -28,7 +28,7 @@ import com.kingsrook.qbits.assistant.engine.PhiRoutingGuard; import com.kingsrook.qbits.assistant.engine.TurnClassification; import com.kingsrook.qbits.assistant.model.AssistantConversation; import com.kingsrook.qbits.assistant.model.AssistantProvider; -import com.kingsrook.qbits.assistant.provider.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelPart; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qqq.backend.core.actions.ai.AiToolResult; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/BudgetServiceTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/BudgetServiceTest.java index beb7757..e3f0f2c 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/BudgetServiceTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/BudgetServiceTest.java @@ -17,6 +17,13 @@ package com.kingsrook.qbits.assistant.engine; +import java.math.BigDecimal; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneOffset; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import com.kingsrook.qbits.assistant.AssistantQBitConfig; import com.kingsrook.qbits.assistant.api.AssistantApiException; import com.kingsrook.qbits.assistant.home.AssistantHomeData; @@ -30,28 +37,21 @@ import com.kingsrook.qbits.assistant.model.AssistantModel; import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.model.AssistantUsage; import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.ModelUsage; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.ModelUsage; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; -import com.kingsrook.qqq.backend.core.alerts.AlertSignal; import com.kingsrook.qqq.backend.core.alerts.AlertSeverity; +import com.kingsrook.qqq.backend.core.alerts.AlertSignal; import com.kingsrook.qqq.backend.core.alerts.AlertsInstanceMetaData; import com.kingsrook.qqq.backend.core.alerts.LoggingAlertSink; -import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; -import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReferenceWithProperties; -import com.kingsrook.qqq.backend.core.model.metadata.code.InitializableViaCodeReference; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; import com.kingsrook.qqq.backend.core.model.data.QRecord; -import java.math.BigDecimal; -import java.time.Clock; -import java.time.Instant; -import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import com.kingsrook.qqq.backend.core.model.metadata.code.InitializableViaCodeReference; +import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; +import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReferenceWithProperties; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/EngineComponentsTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/EngineComponentsTest.java index 854fd90..45a3028 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/EngineComponentsTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/EngineComponentsTest.java @@ -26,7 +26,7 @@ import java.util.concurrent.atomic.AtomicReference; import com.kingsrook.qbits.assistant.AssistantModelRouting; import com.kingsrook.qbits.assistant.model.AssistantPolicy; import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qbits.assistant.provider.ModelUsage; +import com.kingsrook.qbits.assistant.spi.ModelUsage; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qqq.backend.core.context.QContext; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/PhiRoutingTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/PhiRoutingTest.java index 0726156..719f6e9 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/PhiRoutingTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/PhiRoutingTest.java @@ -31,8 +31,8 @@ import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.model.AssistantTurn; import com.kingsrook.qbits.assistant.persistence.AssistantStore; import com.kingsrook.qbits.assistant.processes.AssistantRetentionStep; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qbits.assistant.testing.TurnRunner; @@ -248,9 +248,9 @@ class PhiRoutingTest extends BaseAssistantTest { QContext.clear(); } - return (new com.kingsrook.qbits.assistant.provider.ModelResponse().withParts(List.of( - com.kingsrook.qbits.assistant.provider.ModelPart.toolUse("read", "query_records", Map.of("table", "patient")))) - .withStopReason(com.kingsrook.qbits.assistant.provider.ModelResponse.STOP_TOOL_USE)); + return (new com.kingsrook.qbits.assistant.spi.ModelResponse().withParts(List.of( + com.kingsrook.qbits.assistant.spi.ModelPart.toolUse("read", "query_records", Map.of("table", "patient")))) + .withStopReason(com.kingsrook.qbits.assistant.spi.ModelResponse.STOP_TOOL_USE)); }); assertThat(runner.run(AssistantTestFixture.EDITOR, "read patients").errorCode()).isEqualTo("PHI_BLOCKED"); assertThat(provider.getRequests()).hasSize(1); diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/RobustnessTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/RobustnessTest.java index bd245eb..b6dc9e7 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/RobustnessTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/RobustnessTest.java @@ -41,8 +41,8 @@ import com.kingsrook.qbits.assistant.model.AssistantTurn; import com.kingsrook.qbits.assistant.model.AssistantTurnEvent; import com.kingsrook.qbits.assistant.model.AssistantUsageDaily; import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelUsage; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelUsage; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qbits.assistant.testing.TurnRunner; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/RoutingFallbackTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/RoutingFallbackTest.java index 4221a3c..2244982 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/RoutingFallbackTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/RoutingFallbackTest.java @@ -39,18 +39,18 @@ import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.model.AssistantTurn; import com.kingsrook.qbits.assistant.model.AssistantUsage; import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.CompletableStreamHandle; -import com.kingsrook.qbits.assistant.provider.HealthResult; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; -import com.kingsrook.qbits.assistant.provider.StreamHandle; import com.kingsrook.qbits.assistant.provider.fake.ScriptedModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.CompletableStreamHandle; +import com.kingsrook.qbits.assistant.spi.HealthResult; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.StreamHandle; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qbits.assistant.testing.TurnRunner; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/TurnEngineTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/TurnEngineTest.java index 244c157..8bab8ea 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/TurnEngineTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/engine/TurnEngineTest.java @@ -26,12 +26,12 @@ import com.kingsrook.qbits.assistant.model.AssistantMessage; import com.kingsrook.qbits.assistant.model.AssistantTurn; import com.kingsrook.qbits.assistant.model.AssistantUsageDaily; import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qbits.assistant.provider.CacheHint; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; +import com.kingsrook.qbits.assistant.spi.CacheHint; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qbits.assistant.testing.TurnRunner; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/evals/RedTeamTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/evals/RedTeamTest.java index 4d89d2d..a79bf98 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/evals/RedTeamTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/evals/RedTeamTest.java @@ -28,10 +28,10 @@ import com.kingsrook.qbits.assistant.engine.TurnEvent; import com.kingsrook.qbits.assistant.model.AssistantMessage; import com.kingsrook.qbits.assistant.model.AssistantPolicy; import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qbits.assistant.testing.TurnRunner; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/persistence/HipaaStorageTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/persistence/HipaaStorageTest.java index b932449..88407f7 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/persistence/HipaaStorageTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/persistence/HipaaStorageTest.java @@ -35,14 +35,14 @@ import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.model.AssistantToolCall; import com.kingsrook.qbits.assistant.model.AssistantTurnEvent; import com.kingsrook.qbits.assistant.model.AssistantUsage; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.CompletableStreamHandle; -import com.kingsrook.qbits.assistant.provider.ModelEventListener; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.StreamHandle; import com.kingsrook.qbits.assistant.provider.fake.ScriptedModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.CompletableStreamHandle; +import com.kingsrook.qbits.assistant.spi.ModelEventListener; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.StreamHandle; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qqq.backend.core.actions.ai.DataClassification; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/rag/RagTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/rag/RagTest.java index 9a5f7cd..26cc920 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/rag/RagTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/rag/RagTest.java @@ -32,19 +32,18 @@ import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.model.AssistantRagSource; import com.kingsrook.qbits.assistant.model.AssistantUsage; import com.kingsrook.qbits.assistant.processes.KnowledgeIndexProcess; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.EmbeddingRequest; -import com.kingsrook.qbits.assistant.provider.EmbeddingResponse; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelUsage; import com.kingsrook.qbits.assistant.provider.fake.ScriptedModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.EmbeddingRequest; +import com.kingsrook.qbits.assistant.spi.EmbeddingResponse; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelUsage; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qbits.assistant.testing.UiApiTestServer; import com.kingsrook.qbits.assistant.tools.KnowledgeTool; import com.kingsrook.qbits.assistant.tools.UiApiToolbox; -import com.kingsrook.qbits.assistant.tools.UiApiToolbox; import com.kingsrook.qbits.assistant.uiapi.UiApiCall; import com.kingsrook.qqq.backend.core.actions.ai.AiExposure; import com.kingsrook.qqq.backend.core.actions.ai.AiFieldMetaData; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/scheduled/ScheduledTasksTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/scheduled/ScheduledTasksTest.java index 6c12ae8..1ca6d48 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/scheduled/ScheduledTasksTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/scheduled/ScheduledTasksTest.java @@ -48,9 +48,9 @@ import com.kingsrook.qbits.assistant.model.AssistantScheduledRun; import com.kingsrook.qbits.assistant.model.AssistantScheduledTask; import com.kingsrook.qbits.assistant.model.AssistantToolCall; import com.kingsrook.qbits.assistant.processes.ScheduledTaskProcess; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qbits.assistant.testing.UiApiTestServer; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/settings/AssistantSettingsTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/settings/AssistantSettingsTest.java index 9d14b52..7acfdbc 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/settings/AssistantSettingsTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/settings/AssistantSettingsTest.java @@ -17,29 +17,37 @@ package com.kingsrook.qbits.assistant.settings; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import com.kingsrook.qbits.assistant.AssistantQBitConfig; import com.kingsrook.qbits.assistant.api.AssistantApiException; import com.kingsrook.qbits.assistant.engine.ConnectionTest; -import com.kingsrook.qbits.assistant.engine.ModelPricing; import com.kingsrook.qbits.assistant.engine.ProviderService; import com.kingsrook.qbits.assistant.engine.UsageRecorder; import com.kingsrook.qbits.assistant.home.AssistantHome; import com.kingsrook.qbits.assistant.home.AssistantHomeData; import com.kingsrook.qbits.assistant.home.AssistantHomeView; import com.kingsrook.qbits.assistant.metadata.AssistantRecordScreens; +import com.kingsrook.qbits.assistant.model.AssistantModel; import com.kingsrook.qbits.assistant.model.AssistantModelPrice; import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.model.AssistantUsage; +import com.kingsrook.qbits.assistant.persistence.AssistantStore; import com.kingsrook.qbits.assistant.processes.TestConnectionProcess; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelUsage; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.ModelPricing; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelUsage; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qbits.assistant.testing.TurnRunner; import com.kingsrook.qqq.backend.core.actions.ai.AiExposure; import com.kingsrook.qqq.backend.core.actions.ai.AiTableMetaData; +import com.kingsrook.qqq.backend.core.actions.customizers.QCodeLoader; import com.kingsrook.qqq.backend.core.actions.dashboard.RenderWidgetAction; import com.kingsrook.qqq.backend.core.actions.processes.QProcessCallbackFactory; import com.kingsrook.qqq.backend.core.actions.processes.RunProcessAction; @@ -47,6 +55,8 @@ import com.kingsrook.qqq.backend.core.actions.tables.GetAction; import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction; +import com.kingsrook.qqq.backend.core.actions.values.QCustomPossibleValueProvider; +import com.kingsrook.qqq.backend.core.actions.values.SearchPossibleValueSourceAction; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLineInterface; import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessInput; @@ -59,25 +69,15 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperat import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryInput; import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput; +import com.kingsrook.qqq.backend.core.model.actions.values.SearchPossibleValueSourceInput; import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetInput; import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetOutput; import com.kingsrook.qqq.backend.core.model.dashboard.widgets.RawHTML; import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.metadata.possiblevalues.QPossibleValue; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.processes.implementations.etl.streamedwithfrontend.StreamedETLWithFrontendProcess; import com.kingsrook.qqq.backend.core.utils.JsonUtils; -import com.kingsrook.qbits.assistant.model.AssistantModel; -import com.kingsrook.qbits.assistant.persistence.AssistantStore; -import com.kingsrook.qqq.backend.core.actions.values.SearchPossibleValueSourceAction; -import com.kingsrook.qqq.backend.core.actions.values.QCustomPossibleValueProvider; -import com.kingsrook.qqq.backend.core.model.actions.values.SearchPossibleValueSourceInput; -import com.kingsrook.qqq.backend.core.actions.customizers.QCodeLoader; -import com.kingsrook.qqq.backend.core.model.metadata.possiblevalues.QPossibleValue; -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/settings/ProviderRegistryTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/settings/ProviderRegistryTest.java index cc968f7..9673ed6 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/settings/ProviderRegistryTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/settings/ProviderRegistryTest.java @@ -26,7 +26,6 @@ import java.util.Set; import com.kingsrook.qbits.assistant.AssistantQBitConfig; import com.kingsrook.qbits.assistant.engine.ConnectionTest; import com.kingsrook.qbits.assistant.engine.ModelDiscovery; -import com.kingsrook.qbits.assistant.engine.ModelPricing; import com.kingsrook.qbits.assistant.engine.ProviderService; import com.kingsrook.qbits.assistant.home.AssistantHomeData; import com.kingsrook.qbits.assistant.metadata.AssistantMetaDataBuilder; @@ -36,13 +35,14 @@ import com.kingsrook.qbits.assistant.model.AssistantProvider; import com.kingsrook.qbits.assistant.model.AssistantUsage; import com.kingsrook.qbits.assistant.processes.DiscoverModelsProcess; import com.kingsrook.qbits.assistant.processes.TestModelConnectionProcess; -import com.kingsrook.qbits.assistant.provider.AssistantModelProvider; -import com.kingsrook.qbits.assistant.provider.AssistantProviderType; -import com.kingsrook.qbits.assistant.provider.DiscoveredModel; -import com.kingsrook.qbits.assistant.provider.HealthResult; -import com.kingsrook.qbits.assistant.provider.ModelProviderException; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ProviderSettings; +import com.kingsrook.qbits.assistant.spi.AssistantModelProvider; +import com.kingsrook.qbits.assistant.spi.AssistantProviderType; +import com.kingsrook.qbits.assistant.spi.DiscoveredModel; +import com.kingsrook.qbits.assistant.spi.HealthResult; +import com.kingsrook.qbits.assistant.spi.ModelPricing; +import com.kingsrook.qbits.assistant.spi.ModelProviderException; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ProviderSettings; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qqq.backend.core.actions.processes.QProcessCallbackFactory; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/testing/EvalSupport.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/testing/EvalSupport.java index e76ce8d..706de21 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/testing/EvalSupport.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/testing/EvalSupport.java @@ -22,10 +22,10 @@ import java.util.List; import java.util.Map; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; -import com.kingsrook.qbits.assistant.provider.ModelMessage; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelRequest; -import com.kingsrook.qbits.assistant.provider.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelMessage; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelRequest; +import com.kingsrook.qbits.assistant.spi.ModelResponse; import com.kingsrook.qqq.backend.core.utils.JsonUtils; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/testing/PresentationGoldenTask.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/testing/PresentationGoldenTask.java index e89b06d..ebccc79 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/testing/PresentationGoldenTask.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/testing/PresentationGoldenTask.java @@ -24,8 +24,8 @@ import java.util.List; import java.util.Map; import com.fasterxml.jackson.core.type.TypeReference; import com.kingsrook.qbits.assistant.engine.TurnEvent; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelResponse; import com.kingsrook.qqq.backend.core.utils.JsonUtils; import static com.kingsrook.qbits.assistant.testing.GoldenTasks.map; import static org.assertj.core.api.Assertions.assertThat; diff --git a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/tools/bulkload/BulkLoadToolsTest.java b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/tools/bulkload/BulkLoadToolsTest.java index d0a99ce..824735f 100644 --- a/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/tools/bulkload/BulkLoadToolsTest.java +++ b/qbit-assistant/src/test/java/com/kingsrook/qbits/assistant/tools/bulkload/BulkLoadToolsTest.java @@ -29,8 +29,8 @@ import com.kingsrook.qbits.assistant.engine.PolicyService; import com.kingsrook.qbits.assistant.model.AssistantDataAccess; import com.kingsrook.qbits.assistant.model.AssistantPendingAction; import com.kingsrook.qbits.assistant.model.AssistantToolCall; -import com.kingsrook.qbits.assistant.provider.ModelPart; -import com.kingsrook.qbits.assistant.provider.ModelResponse; +import com.kingsrook.qbits.assistant.spi.ModelPart; +import com.kingsrook.qbits.assistant.spi.ModelResponse; import com.kingsrook.qbits.assistant.testing.AssistantTestFixture; import com.kingsrook.qbits.assistant.testing.BaseAssistantTest; import com.kingsrook.qbits.assistant.testing.TurnRunner; -- 2.54.0