|
38 | 38 | import org.apache.flink.agents.api.vectorstores.VectorStoreQuery; |
39 | 39 | import org.apache.flink.agents.api.vectorstores.VectorStoreQueryResult; |
40 | 40 | import org.apache.flink.agents.plan.actions.Action; |
| 41 | +import org.apache.flink.agents.plan.resourceprovider.JavaResourceProvider; |
41 | 42 | import org.apache.flink.agents.plan.resourceprovider.JavaSerializableResourceProvider; |
42 | 43 | import org.apache.flink.agents.plan.resourceprovider.PythonResourceProvider; |
43 | 44 | import org.apache.flink.agents.plan.resourceprovider.ResourceProvider; |
@@ -478,4 +479,72 @@ public void testGetResourceFromResourceProvider() throws Exception { |
478 | 479 | Resource myToolAgain = agentPlan.getResource("myTool", ResourceType.TOOL); |
479 | 480 | assertThat(myTool).isSameAs(myToolAgain); |
480 | 481 | } |
| 482 | + |
| 483 | + @Test |
| 484 | + public void testAddResourceRegistersEmbeddingModelProvider() throws Exception { |
| 485 | + Agent agent = new Agent(); |
| 486 | + ResourceDescriptor descriptor = |
| 487 | + ResourceDescriptor.Builder.newBuilder(TestPythonResource.class.getName()) |
| 488 | + .addInitialArgument("pythonClazz", "test.module.EmbeddingClazz") |
| 489 | + .build(); |
| 490 | + agent.addResource("myEmbedding", ResourceType.EMBEDDING_MODEL, descriptor); |
| 491 | + |
| 492 | + AgentPlan plan = new AgentPlan(agent); |
| 493 | + |
| 494 | + Map<String, ResourceProvider> providers = |
| 495 | + plan.getResourceProviders().get(ResourceType.EMBEDDING_MODEL); |
| 496 | + assertThat(providers).isNotNull(); |
| 497 | + assertThat(providers).containsKey("myEmbedding"); |
| 498 | + |
| 499 | + ResourceProvider provider = providers.get("myEmbedding"); |
| 500 | + // TestPythonResource implements PythonResourceWrapper, so a Python provider is expected. |
| 501 | + assertThat(provider).isInstanceOf(PythonResourceProvider.class); |
| 502 | + assertThat(provider.getName()).isEqualTo("myEmbedding"); |
| 503 | + assertThat(provider.getType()).isEqualTo(ResourceType.EMBEDDING_MODEL); |
| 504 | + } |
| 505 | + |
| 506 | + @Test |
| 507 | + public void testAddResourceRegistersVectorStoreJavaProvider() throws Exception { |
| 508 | + Agent agent = new Agent(); |
| 509 | + // A non-Python-wrapper class triggers JavaResourceProvider — String is fine for this |
| 510 | + // structural check; we never call provide() here. |
| 511 | + ResourceDescriptor descriptor = |
| 512 | + ResourceDescriptor.Builder.newBuilder(String.class.getName()).build(); |
| 513 | + agent.addResource("myVectorStore", ResourceType.VECTOR_STORE, descriptor); |
| 514 | + |
| 515 | + AgentPlan plan = new AgentPlan(agent); |
| 516 | + |
| 517 | + ResourceProvider provider = |
| 518 | + plan.getResourceProviders().get(ResourceType.VECTOR_STORE).get("myVectorStore"); |
| 519 | + assertThat(provider).isInstanceOf(JavaResourceProvider.class); |
| 520 | + assertThat(provider.getType()).isEqualTo(ResourceType.VECTOR_STORE); |
| 521 | + } |
| 522 | + |
| 523 | + @Test |
| 524 | + public void testAddResourceRejectsNonDescriptorForUnsupportedType() { |
| 525 | + Agent agent = new Agent(); |
| 526 | + // SerializableResource for EMBEDDING_MODEL is illegal — only PROMPT / TOOL accept |
| 527 | + // non-descriptors. The new code path must reject it with a clear message instead of CCE. |
| 528 | + agent.addResource( |
| 529 | + "badEmbedding", |
| 530 | + ResourceType.EMBEDDING_MODEL, |
| 531 | + new TestSerializableChatModel("badEmbedding")); |
| 532 | + |
| 533 | + Assertions.assertThrows(IllegalStateException.class, () -> new AgentPlan(agent)); |
| 534 | + } |
| 535 | + |
| 536 | + @Test |
| 537 | + public void testAddResourceMCPServerRejectedWithGuidance() { |
| 538 | + Agent agent = new Agent(); |
| 539 | + ResourceDescriptor descriptor = |
| 540 | + ResourceDescriptor.Builder.newBuilder("dummy.MCPServer") |
| 541 | + .addInitialArgument("endpoint", "http://127.0.0.1:0/mcp") |
| 542 | + .build(); |
| 543 | + agent.addResource("addedMcpServer", ResourceType.MCP_SERVER, descriptor); |
| 544 | + |
| 545 | + UnsupportedOperationException ex = |
| 546 | + Assertions.assertThrows( |
| 547 | + UnsupportedOperationException.class, () -> new AgentPlan(agent)); |
| 548 | + assertThat(ex.getMessage()).contains("@MCPServer"); |
| 549 | + } |
481 | 550 | } |
0 commit comments