📌 Introducción

Ollamazure es una herramienta que emula la API de Azure OpenAI de manera local, permitiendo probar modelos de Ollama sin necesidad de pagar por el servicio de Azure.

Sin embargo, Function Calling (uso de herramientas) no es compatible con Ollamazure, lo que impide que el modelo pueda invocar funciones automáticamente. Esto afecta la capacidad de hacer llamadas a APIs externas o ejecutar herramientas personalizadas desde la IA.


Características de Ollamazure

Función Soportado
🔥 Completions ✅ Sí
💬 Chat Completions ✅ Sí
📊 Embeddings ✅ Sí
📄 JSON Mode ✅ Sí
🔄 Reproducible Outputs ✅ Sí
📷 Vision ❌ No
🛠️ Function Calling ❌ No
🤖 Assistants ❌ No

Fuente: ollamazure en GitHub


¿Por qué no funciona Function Calling?

El propio repositorio oficial de Ollamazure confirma que Function Calling no está soportado (⛔ / ⛔ en la tabla de compatibilidad).
Esto significa que no es posible definir herramientas en ChatCompletionsOptions.Tools, ni que el modelo pueda llamarlas de manera autónoma.

🔍 Intentos Realizados

  1. Configurar ChatCompletionsFunctionToolDefinition en C#
    • Resultado: ❌ Error, el modelo ignora las herramientas.
  2. Ejecutar dotnet run con function calling en Program.cs
    • Resultado: ❌ El modelo responde como si no entendiera las herramientas.
  3. Comprobar en la documentación de Ollamazure
    • Resultado: ❌ La documentación confirma que esta función no está disponible.
  4. Probar con modelos como phi3, mistral, llama3
    • Resultado: ❌ El problema persiste en todos los modelos.
  5. Verificar si Azure OpenAI SDK en C# lo soporta
    • Resultado: ❌ Sí lo soporta, pero Ollamazure no.

🔄 Alternativas para Function Calling en Local

Si necesitas que el modelo pueda llamar funciones automáticamente, puedes considerar estas opciones:

🟢 1. Usar Ollama directamente sin Ollamazure

En lugar de usar Ollamazure, puedes interactuar con Ollama directamente mediante su API REST:

curl -X POST http://localhost:11434/api/generate -d '{"model": "phi3", "prompt": "¿Cuál es el clima en Madrid?"}'

📌 Ventaja: Permite el uso completo de Ollama sin restricciones.
Desventaja: Necesitas manejar las herramientas manualmente en C#.


🟢 2. Detectar manualmente en C# las consultas y ejecutar herramientas

Si el modelo no puede invocar herramientas, podemos detectar en C# si el usuario pregunta por algo que requiera una herramienta:

if (userInput.ToLower().Contains("clima") || userInput.ToLower().Contains("tiempo en"))
{
    string weatherResponse = await GetWeather("Madrid", "España");
    Console.WriteLine($"🌤️ Respuesta del clima: {weatherResponse}");
    return;
}

📌 Ventaja: Funciona sin depender de Function Calling.
Desventaja: No es automático, hay que manejarlo en C#.


🟢 3. Usar LangChain en C# con Ollama

Otra opción es utilizar LangChain en C#, que permite conectar herramientas a Ollama.

Ejemplo de integración en C# con LangChain:

var llm = new OllamaModel("phi3");
var agent = new Agent(llm);
agent.RegisterTool(new WeatherTool());

string result = await agent.RunAsync("¿Cuál es el clima en Madrid?");
Console.WriteLine(result);

📌 Ventaja: Permite definir herramientas y ejecutarlas.
Desventaja: Requiere configurar LangChain.CSharp.


🔗 Referencias


🎯 Conclusión

Aunque Ollamazure es útil para emular Azure OpenAI localmente, su mayor limitación es la falta de Function Calling.
Si necesitas esta funcionalidad, las mejores alternativas son:

  1. Usar Ollama directamente.
  2. Manejar las herramientas manualmente en C#.
  3. Usar LangChain en C# con Ollama.

🚀 Recomendación: Si lo que buscas es uso de herramientas, no uses Ollamazure. Mejor usa Ollama directo o LangChain.