@@ -1647,147 +1647,160 @@ private void validateConversationRequest(ConversationRequest conversationRequest
1647
1647
*/
1648
1648
@ Override
1649
1649
public Mono <ConversationResponseAlpha2 > converseAlpha2 (ConversationRequestAlpha2 conversationRequestAlpha2 ) {
1650
-
1651
1650
try {
1652
1651
validateConversationRequestAlpha2 (conversationRequestAlpha2 );
1652
+ DaprProtos .ConversationRequestAlpha2 protoRequest = buildConversationRequestProto (conversationRequestAlpha2 );
1653
+
1654
+ Mono <DaprProtos .ConversationResponseAlpha2 > conversationResponseMono = Mono .deferContextual (
1655
+ context -> this .createMono (
1656
+ it -> intercept (context , asyncStub ).converseAlpha2 (protoRequest , it )
1657
+ )
1658
+ );
1659
+
1660
+ DaprProtos .ConversationResponseAlpha2 conversationResponse = conversationResponseMono .block ();
1653
1661
1654
- DaprProtos .ConversationRequestAlpha2 .Builder protosConversationRequestBuilder =
1655
- DaprProtos .ConversationRequestAlpha2
1656
- .newBuilder ()
1657
- .setTemperature (conversationRequestAlpha2 .getTemperature ())
1658
- .setScrubPii (conversationRequestAlpha2 .isScrubPii ())
1659
- .setName (conversationRequestAlpha2 .getName ());
1660
-
1661
- if (conversationRequestAlpha2 .getContextId () != null ) {
1662
- protosConversationRequestBuilder .setContextId (conversationRequestAlpha2 .getContextId ());
1663
- }
1662
+ List <ConversationResultAlpha2 > results = buildConversationResults (conversationResponse .getOutputsList ());
1663
+ return Mono .just (new ConversationResponseAlpha2 (conversationResponse .getContextId (), results ));
1664
+ } catch (Exception ex ) {
1665
+ return DaprException .wrapMono (ex );
1666
+ }
1667
+ }
1664
1668
1665
- if (conversationRequestAlpha2 .getToolChoice () != null ) {
1666
- protosConversationRequestBuilder .setToolChoice (conversationRequestAlpha2 .getToolChoice ());
1667
- }
1669
+ private DaprProtos .ConversationRequestAlpha2 buildConversationRequestProto (ConversationRequestAlpha2 request ) {
1670
+ DaprProtos .ConversationRequestAlpha2 .Builder builder = DaprProtos .ConversationRequestAlpha2
1671
+ .newBuilder ()
1672
+ .setTemperature (request .getTemperature ())
1673
+ .setScrubPii (request .isScrubPii ())
1674
+ .setName (request .getName ());
1668
1675
1669
- if (conversationRequestAlpha2 .getTools () != null ) {
1670
- for (ConversationTools tool : conversationRequestAlpha2 .getTools ()) {
1676
+ if (request .getContextId () != null ) {
1677
+ builder .setContextId (request .getContextId ());
1678
+ }
1671
1679
1672
- ConversationFunction conversationFunction = tool .getFunction ();
1680
+ if (request .getToolChoice () != null ) {
1681
+ builder .setToolChoice (request .getToolChoice ());
1682
+ }
1673
1683
1674
- Map <String , Any > protosConversationToolFunctionParameters = conversationFunction .getParameters ()
1675
- .entrySet ().stream ()
1676
- .collect (Collectors .toMap (
1677
- Map .Entry ::getKey ,
1678
- e -> Any .pack ((Message ) e .getValue ())
1679
- ));
1680
- DaprProtos .ConversationToolsFunction protosConversationToolsFunction =
1681
- DaprProtos .ConversationToolsFunction .newBuilder ()
1682
- .setName (conversationFunction .getName ())
1683
- .setDescription (conversationFunction .getDescription ())
1684
- .putAllParameters (protosConversationToolFunctionParameters )
1685
- .build ();
1684
+ if (request .getTools () != null ) {
1685
+ buildConversationTools (request .getTools (), builder );
1686
+ }
1686
1687
1687
- DaprProtos .ConversationTools conversationTool = DaprProtos .ConversationTools .newBuilder ()
1688
- .setFunction (protosConversationToolsFunction ).build ();
1688
+ for (ConversationInputAlpha2 input : request .getInputs ()) {
1689
+ DaprProtos .ConversationInputAlpha2 .Builder inputBuilder = DaprProtos .ConversationInputAlpha2
1690
+ .newBuilder ()
1691
+ .setScrubPii (input .isScrubPii ());
1689
1692
1690
- protosConversationRequestBuilder .addTools (conversationTool );
1693
+ if (input .getMessages () != null ) {
1694
+ for (ConversationMessage message : input .getMessages ()) {
1695
+ DaprProtos .ConversationMessage protoMessage = buildConversationMessage (message );
1696
+ inputBuilder .addMessages (protoMessage );
1691
1697
}
1692
1698
}
1693
1699
1694
- for (ConversationInputAlpha2 input : conversationRequestAlpha2 .getInputs ()) {
1695
- DaprProtos .ConversationInputAlpha2 .Builder conversationInputBuilder = DaprProtos .ConversationInputAlpha2
1696
- .newBuilder ()
1697
- .setScrubPii (input .isScrubPii ());
1698
-
1699
- if (input .getMessages () != null ) {
1700
-
1701
- for (ConversationMessage conversationMessage : input .getMessages ()) {
1702
- DaprProtos .ConversationMessage .Builder messageBuilder =
1703
- DaprProtos .ConversationMessage .newBuilder ();
1704
-
1705
- ConversationMessage .Role role = conversationMessage .getRole ();
1706
- switch (role ) {
1707
- case TOOL :
1708
- messageBuilder .setOfTool (DaprProtos .ConversationMessageOfTool .newBuilder ()
1709
- .setToolId (conversationMessage .getToolId ())
1710
- .setName (conversationMessage .getName ())
1711
- .addAllContent (getConversationMessageContent (conversationMessage )).build ());
1712
- break ;
1713
- case USER :
1714
- messageBuilder .setOfUser (DaprProtos .ConversationMessageOfUser .newBuilder ()
1715
- .setName (conversationMessage .getName ())
1716
- .addAllContent (getConversationMessageContent (conversationMessage )).build ());
1717
- break ;
1718
- case ASSISTANT :
1719
- messageBuilder .setOfAssistant (DaprProtos .ConversationMessageOfAssistant .newBuilder ()
1720
- .setName (conversationMessage .getName ())
1721
- .addAllToolCalls (getConversationToolCalls (conversationMessage ))
1722
- .addAllContent (getConversationMessageContent (conversationMessage )).build ());
1723
- break ;
1724
- case DEVELOPER :
1725
- messageBuilder .setOfDeveloper (DaprProtos .ConversationMessageOfDeveloper .newBuilder ()
1726
- .setName (conversationMessage .getName ())
1727
- .addAllContent (getConversationMessageContent (conversationMessage )).build ());
1728
- break ;
1729
- case SYSTEM :
1730
- messageBuilder .setOfSystem (DaprProtos .ConversationMessageOfSystem .newBuilder ()
1731
- .setName (conversationMessage .getName ())
1732
- .addAllContent (getConversationMessageContent (conversationMessage )).build ());
1733
- break ;
1734
- default : throw new IllegalArgumentException ("No role of type " + role + " found" );
1735
- }
1736
-
1737
- conversationInputBuilder .addMessages (messageBuilder .build ());
1738
- }
1739
- }
1700
+ builder .addInputs (inputBuilder .build ());
1701
+ }
1702
+
1703
+ return builder .build ();
1704
+ }
1705
+
1706
+ private void buildConversationTools (List <ConversationTools > tools ,
1707
+ DaprProtos .ConversationRequestAlpha2 .Builder builder ) {
1708
+ for (ConversationTools tool : tools ) {
1709
+ ConversationFunction function = tool .getFunction ();
1710
+
1711
+ Map <String , Any > protoParameters = function .getParameters ()
1712
+ .entrySet ().stream ()
1713
+ .collect (Collectors .toMap (
1714
+ Map .Entry ::getKey ,
1715
+ e -> Any .pack ((Message ) e .getValue ())
1716
+ ));
1717
+
1718
+ DaprProtos .ConversationToolsFunction protoFunction = DaprProtos .ConversationToolsFunction .newBuilder ()
1719
+ .setName (function .getName ())
1720
+ .setDescription (function .getDescription ())
1721
+ .putAllParameters (protoParameters )
1722
+ .build ();
1723
+
1724
+ builder .addTools (DaprProtos .ConversationTools .newBuilder ()
1725
+ .setFunction (protoFunction )
1726
+ .build ());
1727
+ }
1728
+ }
1740
1729
1741
- protosConversationRequestBuilder .addInputs (conversationInputBuilder .build ());
1742
- }
1730
+ private DaprProtos .ConversationMessage buildConversationMessage (ConversationMessage message ) {
1731
+ DaprProtos .ConversationMessage .Builder messageBuilder = DaprProtos .ConversationMessage .newBuilder ();
1732
+
1733
+ switch (message .getRole ()) {
1734
+ case TOOL :
1735
+ messageBuilder .setOfTool (DaprProtos .ConversationMessageOfTool .newBuilder ()
1736
+ .setToolId (message .getToolId ()).setName (message .getName ())
1737
+ .addAllContent (getConversationMessageContent (message )).build ());
1738
+ break ;
1739
+ case USER :
1740
+ messageBuilder .setOfUser (DaprProtos .ConversationMessageOfUser .newBuilder ()
1741
+ .setName (message .getName ()).addAllContent (getConversationMessageContent (message )).build ());
1742
+ break ;
1743
+ case ASSISTANT :
1744
+ messageBuilder .setOfAssistant (DaprProtos .ConversationMessageOfAssistant .newBuilder ()
1745
+ .setName (message .getName ()).addAllToolCalls (getConversationToolCalls (message ))
1746
+ .addAllContent (getConversationMessageContent (message )).build ());
1747
+ break ;
1748
+ case DEVELOPER :
1749
+ messageBuilder .setOfDeveloper (DaprProtos .ConversationMessageOfDeveloper .newBuilder ()
1750
+ .setName (message .getName ()).addAllContent (getConversationMessageContent (message )).build ());
1751
+ break ;
1752
+ case SYSTEM :
1753
+ messageBuilder .setOfSystem (DaprProtos .ConversationMessageOfSystem .newBuilder ()
1754
+ .setName (message .getName ()).addAllContent (getConversationMessageContent (message )).build ());
1755
+ break ;
1756
+ default :
1757
+ throw new IllegalArgumentException ("No role of type " + message .getRole () + " found" );
1758
+ }
1743
1759
1744
- Mono <DaprProtos .ConversationResponseAlpha2 > conversationResponseMono = Mono .deferContextual (
1745
- context -> this .createMono (
1746
- it -> intercept (context , asyncStub )
1747
- .converseAlpha2 (protosConversationRequestBuilder .build (), it )
1748
- )
1749
- );
1760
+ return messageBuilder .build ();
1761
+ }
1750
1762
1751
- return conversationResponseMono .map (conversationResponse -> {
1752
- List <ConversationResultAlpha2 > results = new ArrayList <>();
1763
+ private List <ConversationResultAlpha2 > buildConversationResults (
1764
+ List <DaprProtos .ConversationResultAlpha2 > protoResults ) {
1765
+ List <ConversationResultAlpha2 > results = new ArrayList <>();
1766
+
1767
+ for (DaprProtos .ConversationResultAlpha2 protoResult : protoResults ) {
1768
+ List <ConversationResultChoices > choices = new ArrayList <>();
1753
1769
1754
- for (DaprProtos .ConversationResultAlpha2 result : conversationResponse .getOutputsList ()) {
1755
- List <ConversationResultChoices > choices = new ArrayList <>();
1756
-
1757
- for (DaprProtos .ConversationResultChoices choice : result .getChoicesList ()) {
1758
- ConversationResultMessage message = null ;
1759
- if (choice .hasMessage ()) {
1760
- List <ConversationToolCalls > toolCalls = new ArrayList <>();
1761
-
1762
- for (DaprProtos .ConversationToolCalls toolCall : choice .getMessage ().getToolCallsList ()) {
1763
- ConversationToolCallsFunction function = null ;
1764
- if (toolCall .hasFunction ()) {
1765
- function = new ConversationToolCallsFunction (
1766
- toolCall .getFunction ().getName (),
1767
- toolCall .getFunction ().getArguments ()
1768
- );
1769
- }
1770
-
1771
- toolCalls .add (new ConversationToolCalls (toolCall .getId (), function ));
1772
- }
1773
-
1774
- message = new ConversationResultMessage (
1775
- choice .getMessage ().getContent (),
1776
- toolCalls
1777
- );
1778
- }
1770
+ for (DaprProtos .ConversationResultChoices protoChoice : protoResult .getChoicesList ()) {
1771
+ ConversationResultMessage message = buildConversationResultMessage (protoChoice );
1772
+ choices .add (new ConversationResultChoices (protoChoice .getFinishReason (), protoChoice .getIndex (), message ));
1773
+ }
1779
1774
1780
- choices .add (new ConversationResultChoices ( choice . getFinishReason (), choice . getIndex (), message ));
1781
- }
1782
-
1783
- results . add ( new ConversationResultAlpha2 ( choices )) ;
1784
- }
1775
+ results .add (new ConversationResultAlpha2 ( choices ));
1776
+ }
1777
+
1778
+ return results ;
1779
+ }
1785
1780
1786
- return new ConversationResponseAlpha2 (conversationResponse .getContextId (), results );
1787
- });
1788
- } catch (Exception ex ) {
1789
- return DaprException .wrapMono (ex );
1781
+ private ConversationResultMessage buildConversationResultMessage (DaprProtos .ConversationResultChoices protoChoice ) {
1782
+ if (!protoChoice .hasMessage ()) {
1783
+ return null ;
1784
+ }
1785
+
1786
+ List <ConversationToolCalls > toolCalls = new ArrayList <>();
1787
+
1788
+ for (DaprProtos .ConversationToolCalls protoToolCall : protoChoice .getMessage ().getToolCallsList ()) {
1789
+ ConversationToolCallsFunction function = null ;
1790
+ if (protoToolCall .hasFunction ()) {
1791
+ function = new ConversationToolCallsFunction (
1792
+ protoToolCall .getFunction ().getName (),
1793
+ protoToolCall .getFunction ().getArguments ()
1794
+ );
1795
+ }
1796
+
1797
+ toolCalls .add (new ConversationToolCalls (protoToolCall .getId (), function ));
1790
1798
}
1799
+
1800
+ return new ConversationResultMessage (
1801
+ protoChoice .getMessage ().getContent (),
1802
+ toolCalls
1803
+ );
1791
1804
}
1792
1805
1793
1806
private List <DaprProtos .ConversationMessageContent > getConversationMessageContent (
0 commit comments