feat: add ERROR finish reason and handle it in completion clients

This commit is contained in:
extio-de
2026-05-10 09:39:26 +02:00
parent 1561b17f9e
commit 640b075fe6
4 changed files with 11 additions and 1 deletions

View File

@@ -20,6 +20,11 @@ public enum CompletionFinishReason {
/** /**
* Completion stopped because the model emitted one or more tool calls. * Completion stopped because the model emitted one or more tool calls.
*/ */
TOOL_CALLS TOOL_CALLS,
/**
* Completion stopped because of an error. You may continue the conversation.
*/
ERROR
} }

View File

@@ -203,6 +203,7 @@ public abstract class AbstractCompletionClient implements Client, DisposableBean
return List.of(); return List.of();
} }
catch (final RuntimeException e) { catch (final RuntimeException e) {
LOGGER.warn("Failed to load model names", e);
return List.of(); return List.of();
} }
} }
@@ -212,6 +213,7 @@ public abstract class AbstractCompletionClient implements Client, DisposableBean
case FinishReasons.FINISH_REASON_CONTENT_FILTER -> CompletionFinishReason.CONTENT_FILTERED; case FinishReasons.FINISH_REASON_CONTENT_FILTER -> CompletionFinishReason.CONTENT_FILTERED;
case FinishReasons.FINISH_REASON_LENGTH -> CompletionFinishReason.TOKEN_LIMIT_REACHED; case FinishReasons.FINISH_REASON_LENGTH -> CompletionFinishReason.TOKEN_LIMIT_REACHED;
case FinishReasons.FINISH_REASON_TOOL_CALLS -> CompletionFinishReason.TOOL_CALLS; case FinishReasons.FINISH_REASON_TOOL_CALLS -> CompletionFinishReason.TOOL_CALLS;
case FinishReasons.FINISH_REASON_ERROR -> CompletionFinishReason.ERROR;
default -> CompletionFinishReason.DONE; default -> CompletionFinishReason.DONE;
}; };
} }

View File

@@ -10,4 +10,6 @@ public final class FinishReasons {
public static final String FINISH_REASON_TOOL_CALLS = "tool_calls"; public static final String FINISH_REASON_TOOL_CALLS = "tool_calls";
public static final String FINISH_REASON_ERROR = "error";
} }

View File

@@ -379,6 +379,7 @@ public class OllamaClient implements Client {
case FinishReasons.FINISH_REASON_LENGTH -> CompletionFinishReason.TOKEN_LIMIT_REACHED; case FinishReasons.FINISH_REASON_LENGTH -> CompletionFinishReason.TOKEN_LIMIT_REACHED;
case FinishReasons.FINISH_REASON_CONTENT_FILTER -> CompletionFinishReason.CONTENT_FILTERED; case FinishReasons.FINISH_REASON_CONTENT_FILTER -> CompletionFinishReason.CONTENT_FILTERED;
case FinishReasons.FINISH_REASON_TOOL_CALLS -> CompletionFinishReason.TOOL_CALLS; case FinishReasons.FINISH_REASON_TOOL_CALLS -> CompletionFinishReason.TOOL_CALLS;
case FinishReasons.FINISH_REASON_ERROR -> CompletionFinishReason.ERROR;
default -> CompletionFinishReason.DONE; default -> CompletionFinishReason.DONE;
}; };
} }