mirror of
https://github.com/voideditor/void
synced 2026-05-23 17:38:23 +00:00
fix gemini OR
This commit is contained in:
parent
170ccb9298
commit
ae179b8111
3 changed files with 20 additions and 24 deletions
|
|
@ -498,19 +498,15 @@ const prepareMessages = (params: {
|
|||
providerName: ProviderName
|
||||
}): { messages: LLMChatMessage[], separateSystemMessage: string | undefined } => {
|
||||
|
||||
const specialFormat = params.specialToolFormat // this is just for ts idiocy
|
||||
if (params.providerName === 'gemini') {
|
||||
// treat as anthropic style, then convert to gemini style
|
||||
const specialFormat = params.specialToolFormat // this is just for ts stupidness
|
||||
|
||||
// if need to convert to gemini style of messaes, do that (treat as anthropic style, then convert to gemini style)
|
||||
if (params.providerName === 'gemini' || specialFormat === 'gemini-style') {
|
||||
const res = prepareOpenAIOrAnthropicMessages({ ...params, specialToolFormat: specialFormat === 'gemini-style' ? 'anthropic-style' : undefined })
|
||||
const messages = res.messages as AnthropicLLMChatMessage[]
|
||||
const messages2 = prepareGeminiMessages(messages)
|
||||
return { messages: messages2, separateSystemMessage: res.separateSystemMessage }
|
||||
}
|
||||
else {
|
||||
if (specialFormat === 'gemini-style') {
|
||||
throw new Error(`Tried preparing messages with tool format ${params.specialToolFormat} but the provider was ${params.providerName}, not Gemini.`)
|
||||
}
|
||||
}
|
||||
|
||||
return prepareOpenAIOrAnthropicMessages({ ...params, specialToolFormat: specialFormat })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1552,8 +1552,8 @@ export const ToolChildrenWrapper = ({ children, className }: { children: React.R
|
|||
</div>
|
||||
</div>
|
||||
}
|
||||
export const CodeChildren = ({ children }: { children: React.ReactNode }) => {
|
||||
return <div className='bg-void-bg-3 p-1 rounded-sm overflow-auto text-sm'>
|
||||
export const CodeChildren = ({ children, className }: { children: React.ReactNode, className?: string }) => {
|
||||
return <div className={`${className ?? ''} p-1 rounded-sm overflow-auto text-sm`}>
|
||||
<div className='!select-text cursor-auto'>
|
||||
{children}
|
||||
</div>
|
||||
|
|
@ -1642,7 +1642,7 @@ const InvalidTool = ({ toolName, message }: { toolName: ToolName, message: strin
|
|||
const componentParams: ToolHeaderParams = { title, desc1, isError, icon }
|
||||
|
||||
componentParams.children = <ToolChildrenWrapper>
|
||||
<CodeChildren>
|
||||
<CodeChildren className='bg-void-bg-3'>
|
||||
{message}
|
||||
</CodeChildren>
|
||||
</ToolChildrenWrapper>
|
||||
|
|
@ -2042,7 +2042,7 @@ const toolNameToComponent: { [T in ToolName]: { resultWrapper: ResultWrapper<T>,
|
|||
componentParams.numResults = result.lines.length;
|
||||
componentParams.children = result.lines.length === 0 ? undefined :
|
||||
<ToolChildrenWrapper>
|
||||
<CodeChildren>
|
||||
<CodeChildren className='bg-void-bg-3'>
|
||||
<pre className='font-mono whitespace-pre'>
|
||||
{toolsService.stringOfResult['search_in_file'](params, result)}
|
||||
</pre>
|
||||
|
|
@ -2176,7 +2176,7 @@ const toolNameToComponent: { [T in ToolName]: { resultWrapper: ResultWrapper<T>,
|
|||
else if (toolMessage.type === 'tool_error') {
|
||||
const { result } = toolMessage
|
||||
if (params) { componentParams.onClick = () => { commandService.executeCommand('vscode.open', params.uri, { preview: true }) } }
|
||||
componentParams.children = componentParams.bottomChildren = <BottomChildren title='Error'>
|
||||
componentParams.bottomChildren = <BottomChildren title='Error'>
|
||||
<CodeChildren>
|
||||
{result}
|
||||
</CodeChildren>
|
||||
|
|
|
|||
|
|
@ -352,7 +352,7 @@ const openSourceModelOptions_assumingOAICompat = {
|
|||
|
||||
|
||||
// keep modelName, but use the fallback's defaults
|
||||
const extensiveOAICompatModelOptionsFallback: VoidStaticProviderInfo['modelOptionsFallback'] = (modelName, fallbackKnownValues) => {
|
||||
const extensiveModelOptionsFallback: VoidStaticProviderInfo['modelOptionsFallback'] = (modelName, fallbackKnownValues) => {
|
||||
|
||||
const lower = modelName.toLowerCase()
|
||||
|
||||
|
|
@ -1018,32 +1018,32 @@ export const ollamaRecommendedModels = ['qwen2.5-coder:1.5b', 'llama3.1', 'qwq',
|
|||
const vLLMSettings: VoidStaticProviderInfo = {
|
||||
// reasoning: OAICompat + response.choices[0].delta.reasoning_content // https://docs.vllm.ai/en/stable/features/reasoning_outputs.html#streaming-chat-completions
|
||||
providerReasoningIOSettings: { output: { nameOfFieldInDelta: 'reasoning_content' }, },
|
||||
modelOptionsFallback: (modelName) => extensiveOAICompatModelOptionsFallback(modelName, { downloadable: { sizeGb: 'not-known' } }),
|
||||
modelOptionsFallback: (modelName) => extensiveModelOptionsFallback(modelName, { downloadable: { sizeGb: 'not-known' } }),
|
||||
modelOptions: {}, // TODO
|
||||
}
|
||||
|
||||
const lmStudioSettings: VoidStaticProviderInfo = {
|
||||
providerReasoningIOSettings: { output: { needsManualParse: true }, },
|
||||
modelOptionsFallback: (modelName) => extensiveOAICompatModelOptionsFallback(modelName, { downloadable: { sizeGb: 'not-known' }, contextWindow: 4_096 }),
|
||||
modelOptionsFallback: (modelName) => extensiveModelOptionsFallback(modelName, { downloadable: { sizeGb: 'not-known' }, contextWindow: 4_096 }),
|
||||
modelOptions: {}, // TODO
|
||||
}
|
||||
|
||||
const ollamaSettings: VoidStaticProviderInfo = {
|
||||
// reasoning: we need to filter out reasoning <think> tags manually
|
||||
providerReasoningIOSettings: { output: { needsManualParse: true }, },
|
||||
modelOptionsFallback: (modelName) => extensiveOAICompatModelOptionsFallback(modelName, { downloadable: { sizeGb: 'not-known' } }),
|
||||
modelOptionsFallback: (modelName) => extensiveModelOptionsFallback(modelName, { downloadable: { sizeGb: 'not-known' } }),
|
||||
modelOptions: ollamaModelOptions,
|
||||
}
|
||||
|
||||
const openaiCompatible: VoidStaticProviderInfo = {
|
||||
// reasoning: we have no idea what endpoint they used, so we can't consistently parse out reasoning
|
||||
modelOptionsFallback: (modelName) => extensiveOAICompatModelOptionsFallback(modelName),
|
||||
modelOptionsFallback: (modelName) => extensiveModelOptionsFallback(modelName),
|
||||
modelOptions: {},
|
||||
}
|
||||
|
||||
const liteLLMSettings: VoidStaticProviderInfo = { // https://docs.litellm.ai/docs/reasoning_content
|
||||
providerReasoningIOSettings: { output: { nameOfFieldInDelta: 'reasoning_content' } },
|
||||
modelOptionsFallback: (modelName) => extensiveOAICompatModelOptionsFallback(modelName, { downloadable: { sizeGb: 'not-known' } }),
|
||||
modelOptionsFallback: (modelName) => extensiveModelOptionsFallback(modelName, { downloadable: { sizeGb: 'not-known' } }),
|
||||
modelOptions: {}, // TODO
|
||||
}
|
||||
|
||||
|
|
@ -1197,11 +1197,11 @@ const openRouterSettings: VoidStaticProviderInfo = {
|
|||
modelOptions: openRouterModelOptions_assumingOpenAICompat,
|
||||
// TODO!!! send a query to openrouter to get the price, etc.
|
||||
modelOptionsFallback: (modelName) => {
|
||||
const res = extensiveOAICompatModelOptionsFallback(modelName)
|
||||
// openRouter does not support gemini-style, use openai-style instead
|
||||
if (res?.specialToolFormat === 'gemini-style') {
|
||||
res.specialToolFormat = 'openai-style'
|
||||
}
|
||||
const res = extensiveModelOptionsFallback(modelName)
|
||||
// // openRouter does not support gemini-style, use openai-style instead
|
||||
// if (res?.specialToolFormat === 'gemini-style') {
|
||||
// res.specialToolFormat = 'openai-style'
|
||||
// }
|
||||
return res
|
||||
},
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue