[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-pepperoni21--ollama-rs":3,"tool-pepperoni21--ollama-rs":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",140436,2,"2026-04-05T23:32:43",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":78,"owner_location":79,"owner_email":80,"owner_twitter":78,"owner_website":78,"owner_url":81,"languages":82,"stars":91,"forks":92,"last_commit_at":93,"license":94,"difficulty_score":23,"env_os":95,"env_gpu":96,"env_ram":96,"env_deps":97,"category_tags":104,"github_topics":78,"view_count":23,"oss_zip_url":78,"oss_zip_packed_at":78,"status":16,"created_at":105,"updated_at":106,"faqs":107,"releases":133},3139,"pepperoni21\u002Follama-rs","ollama-rs","A simple and easy-to-use library for interacting with the Ollama API.","ollama-rs 是一款专为 Rust 开发者设计的轻量级库，旨在简化与 Ollama API 的交互过程。它让开发者能够轻松地在本地应用中集成大语言模型能力，无需深入处理复杂的底层网络请求或协议细节。\n\n通过封装 Ollama 官方文档定义的标准接口，ollama-rs 解决了在 Rust 生态中调用本地 AI 模型时代码繁琐、配置困难的问题。无论是生成文本补全、构建流式对话机器人，还是管理本地模型（如创建、复制、删除）及生成向量嵌入，该库都提供了直观且类型安全的 API 支持。其独特的亮点在于对“流式输出”的原生支持，能让用户实时看到模型生成的内容，显著提升交互体验；同时它还支持自定义工具调用和思维链（Thinking）模式，为构建高级智能应用提供了灵活空间。\n\n这款工具非常适合熟悉 Rust 语言的软件工程师、AI 应用开发者以及希望在本机快速原型验证的研究人员使用。如果你正在寻找一种高效、稳定且易于上手的方式，将强大的本地大模型能力融入你的 Rust 项目中，ollama-rs 是一个理想的选择。","# Ollama-rs\n\n### A simple and easy-to-use library for interacting with the Ollama API.\n\nThis library was created following the [Ollama API](https:\u002F\u002Fgithub.com\u002Fjmorganca\u002Follama\u002Fblob\u002Fmain\u002Fdocs\u002Fapi.md) documentation.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Initialization](#initialization)\n- [Usage](#usage)\n  - [Completion Generation](#completion-generation)\n  - [Completion Generation (Streaming)](#completion-generation-streaming)\n  - [Completion Generation (With Options)](#completion-generation-with-options)\n  - [Chat Mode](#chat-mode)\n  - [List Local Models](#list-local-models)\n  - [Show Model Information](#show-model-information)\n  - [Create a Model](#create-a-model)\n  - [Create a Model (Streaming)](#create-a-model-streaming)\n  - [Copy a Model](#copy-a-model)\n  - [Delete a Model](#delete-a-model)\n  - [Generate Embeddings](#generate-embeddings)\n  - [Generate Embeddings (Batch)](#generate-embeddings-batch)\n  - [Make a Function Call](#make-a-function-call)\n  - [Create a custom tool](#create-a-custom-tool)\n  - [Completion Generation (With Thinking)](#completion-generation-with-thinking)\n\n## Installation\n\n### Add ollama-rs to your Cargo.toml\n\n```toml\n[dependencies]\nollama-rs = \"0.3.4\"\n```\n\nIf you absolutely want the latest version, you can use the `master` branch by adding the following to your `Cargo.toml` file:\n\n```toml\n[dependencies]\nollama-rs = { git = \"https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs.git\", branch = \"master\" }\n```\n\n*Note that the `master` branch may not be stable and may contain breaking changes.*\n\n## Initialization\n\n### Initialize Ollama\n\n```rust\nuse ollama_rs::Ollama;\n\n\u002F\u002F By default, it will connect to localhost:11434\nlet ollama = Ollama::default();\n\n\u002F\u002F For custom values:\nlet ollama = Ollama::new(\"http:\u002F\u002Flocalhost\".to_string(), 11434);\n```\n\n## Usage\n\nFeel free to check the [Chatbot example](https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fblob\u002F0.3.4\u002Follama-rs\u002Fexamples\u002Fbasic_chatbot.rs) that shows how to use the library to create a simple chatbot in less than 50 lines of code. You can also check some [other examples](https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Ftree\u002F0.3.4\u002Follama-rs\u002Fexamples).\n\n_These examples use poor error handling for simplicity, but you should handle errors properly in your code._\n\n### Completion Generation\n\n```rust\nuse ollama_rs::generation::completion::GenerationRequest;\n\nlet model = \"llama2:latest\".to_string();\nlet prompt = \"Why is the sky blue?\".to_string();\n\nlet res = ollama.generate(GenerationRequest::new(model, prompt)).await;\n\nif let Ok(res) = res {\n    println!(\"{}\", res.response);\n}\n```\n\n**OUTPUTS:** _The sky appears blue because of a phenomenon called Rayleigh scattering..._\n\n### Completion Generation (Streaming)\n\n_Requires the `stream` feature._\n\n```rust\nuse ollama_rs::generation::completion::GenerationRequest;\nuse tokio::io::{self, AsyncWriteExt};\nuse tokio_stream::StreamExt;\n\nlet model = \"llama2:latest\".to_string();\nlet prompt = \"Why is the sky blue?\".to_string();\n\nlet mut stream = ollama.generate_stream(GenerationRequest::new(model, prompt)).await.unwrap();\n\nlet mut stdout = io::stdout();\nwhile let Some(res) = stream.next().await {\n    let responses = res.unwrap();\n    for resp in responses {\n        stdout.write_all(resp.response.as_bytes()).await.unwrap();\n        stdout.flush().await.unwrap();\n    }\n}\n```\n\nSame output as above but streamed.\n\n### Completion Generation (With Options)\n\n```rust\nuse ollama_rs::generation::completion::GenerationRequest;\nuse ollama_rs::models::ModelOptions;\n\nlet model = \"llama2:latest\".to_string();\nlet prompt = \"Why is the sky blue?\".to_string();\n\nlet options = ModelOptions::default()\n    .temperature(0.2)\n    .repeat_penalty(1.5)\n    .top_k(25)\n    .top_p(0.25);\n\nlet res = ollama.generate(GenerationRequest::new(model, prompt).options(options)).await;\n\nif let Ok(res) = res {\n    println!(\"{}\", res.response);\n}\n```\n\n**OUTPUTS:** _1. Sun emits white sunlight: The sun consists primarily ..._\n\n### Chat Mode\n\n_Every message sent and received will be stored in the library's history._\n\nExample with history:\n\n```rust\nuse ollama_rs::generation::chat::{request::ChatMessageRequest, ChatMessage};\nuse ollama_rs::history::ChatHistory;\n\nlet model = \"llama2:latest\".to_string();\nlet prompt = \"Why is the sky blue?\".to_string();\n\u002F\u002F `Vec\u003CChatMessage>` implements `ChatHistory`,\n\u002F\u002F but you could also implement it yourself on a custom type\nlet mut history = vec![];\n\nlet res = ollama\n    .send_chat_messages_with_history(\n        &mut history, \u002F\u002F \u003C- messages will be saved here\n        ChatMessageRequest::new(\n            model,\n            vec![ChatMessage::user(prompt)], \u002F\u002F \u003C- You should provide only one message\n        ),\n    )\n    .await;\n\nif let Ok(res) = res {\n    println!(\"{}\", res.message.content);\n}\n```\n\n_Check chat with history examples for [default](https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fblob\u002F0.3.4\u002Follama-rs\u002Fexamples\u002Fchat_with_history.rs) and [stream](https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fblob\u002F0.3.4\u002Follama-rs\u002Fexamples\u002Fchat_with_history_stream.rs)_\n\n### List Local Models\n\n```rust\nlet res = ollama.list_local_models().await.unwrap();\n```\n\n_Returns a vector of `LocalModel` structs._\n\n### Show Model Information\n\n```rust\nlet res = ollama.show_model_info(\"llama2:latest\".to_string()).await.unwrap();\n```\n\n_Returns a `ModelInfo` struct._\n\n### Create a Model\n\n```rust\nuse ollama_rs::models::create::CreateModelRequest;\n\nlet res = ollama.create_model(CreateModelRequest::new(\"my_model\".into())\n    .system(\"You're a chat bot.\".into())\n    .from_model(\"llama2:latest\".into())).await.unwrap();\n```\n\n_Returns a `CreateModelStatus` struct representing the final status of the model creation._\n\n### Create a Model (Streaming)\n\n_Requires the `stream` feature._\n\n```rust\nuse ollama_rs::models::create::CreateModelRequest;\nuse tokio_stream::StreamExt;\n\nlet res = ollama.create_model_stream(CreateModelRequest::new(\"my_model\".into())\n    .system(\"You're a chat bot.\".into())\n    .from_model(\"llama2:latest\".into())).await.unwrap();\n\nwhile let Some(res) = res.next().await {\n    let res = res.unwrap();\n    \u002F\u002F Handle the status\n}\n```\n\n_Returns a `CreateModelStatusStream` that will stream every status update of the model creation._\n\n### Copy a Model\n\n```rust\nlet _ = ollama.copy_model(\"mario\".into(), \"mario_copy\".into()).await.unwrap();\n```\n\n### Delete a Model\n\n```rust\nlet _ = ollama.delete_model(\"mario_copy\".into()).await.unwrap();\n```\n\n### Generate Embeddings\n\n```rust\nuse ollama_rs::generation::embeddings::request::GenerateEmbeddingsRequest;\n\nlet request = GenerateEmbeddingsRequest::new(\"llama2:latest\".to_string(), \"Why is the sky blue?\".into());\nlet res = ollama.generate_embeddings(request).await.unwrap();\n```\n\n### Generate Embeddings (Batch)\n\n```rust\nuse ollama_rs::generation::embeddings::request::GenerateEmbeddingsRequest;\n\nlet request = GenerateEmbeddingsRequest::new(\"llama2:latest\".to_string(), vec![\"Why is the sky blue?\", \"Why is the sky red?\"].into());\nlet res = ollama.generate_embeddings(request).await.unwrap();\n```\n\n_Returns a `GenerateEmbeddingsResponse` struct containing the embeddings (a vector of floats)._\n\n### Make a Function Call\n\n```rust\nuse ollama_rs::coordinator::Coordinator;\nuse ollama_rs::generation::chat::{ChatMessage, ChatMessageRequest};\nuse ollama_rs::generation::tools::implementations::{DDGSearcher, Scraper, Calculator};\nuse ollama_rs::models::ModelOptions;\n\nlet mut history = vec![];\n\nlet mut coordinator = Coordinator::new(ollama, \"qwen2.5:32b\".to_string(), history)\n    .options(ModelOptions::default().num_ctx(16384))\n    .add_tool(DDGSearcher::new())\n    .add_tool(Scraper {})\n    .add_tool(Calculator {});\n\nlet resp = coordinator\n    .chat(vec![ChatMessage::user(\"What is the current oil price?\")])\n    .await.unwrap();\n\nprintln!(\"{}\", resp.message.content);\n```\n\n_Uses the given tools (such as searching the web) to find an answer, feeds that answer back into the LLM, and returns a `ChatMessageResponse` with the answer to the question._\n\n### Create a custom tool\n\nThe `function` macro simplifies the creation of custom tools. Below is an example of a tool that retrieves the current weather for a specified city:\n\n```rust\n\u002F\u002F\u002F Retrieve the weather for a specified city.\n\u002F\u002F\u002F\n\u002F\u002F\u002F * city - The city for which to get the weather.\n#[ollama_rs::function]\nasync fn get_weather(city: String) -> Result\u003CString, Box\u003Cdyn std::error::Error + Sync + Send>> {\n    let url = format!(\"https:\u002F\u002Fwttr.in\u002F{city}?format=%C+%t\");\n    let response = reqwest::get(&url).await?.text().await?;\n    Ok(response)\n}\n```\n\nTo create a custom tool, define a function that returns a `Result\u003CString, Box\u003Cdyn std::error::Error + Sync + Send>>` and annotate it with the `function` macro. This function will be automatically converted into a tool that can be used with the `Coordinator`, just like any other tool.\n\nEnsure that the doc comment above the function clearly describes the tool's purpose and its parameters. This information will be provided to the LLM to help it understand how to use the tool.\n\nFor a more detailed example, see the [function call example](https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fblob\u002F0.3.4\u002Follama-rs\u002Fexamples\u002Ffunction_call.rs).\n\n### Completion Generation (With Thinking)\n\n```rust\nlet model = \"qwen3:latest\".to_string();\nlet prompt = \"Why is the sky blue?\".to_string();\n\nlet res = ollama.generate(GenerationRequest::new(model, prompt).think(true)).await;\n\nif let Ok(res) = res {\n    println!(\"{}\", res.response);\n}\n```\n","# Ollama-rs\n\n### 一个简单易用的库，用于与 Ollama API 进行交互。\n\n该库是根据 [Ollama API](https:\u002F\u002Fgithub.com\u002Fjmorganca\u002Follama\u002Fblob\u002Fmain\u002Fdocs\u002Fapi.md) 文档编写的。\n\n## 目录\n\n- [安装](#installation)\n- [初始化](#initialization)\n- [使用](#usage)\n  - [生成补全](#completion-generation)\n  - [生成补全（流式）](#completion-generation-streaming)\n  - [生成补全（带选项）](#completion-generation-with-options)\n  - [聊天模式](#chat-mode)\n  - [列出本地模型](#list-local-models)\n  - [显示模型信息](#show-model-information)\n  - [创建模型](#create-a-model)\n  - [创建模型（流式）](#create-a-model-streaming)\n  - [复制模型](#copy-a-model)\n  - [删除模型](#delete-a-model)\n  - [生成嵌入](#generate-embeddings)\n  - [生成嵌入（批量）](#generate-embeddings-batch)\n  - [调用函数](#make-a-function-call)\n  - [创建自定义工具](#create-a-custom-tool)\n  - [生成补全（带思考）](#completion-generation-with-thinking)\n\n## 安装\n\n### 将 ollama-rs 添加到你的 Cargo.toml 文件中\n\n```toml\n[dependencies]\nollama-rs = \"0.3.4\"\n```\n\n如果你确实想要最新版本，可以通过在 `Cargo.toml` 文件中添加以下内容来使用 `master` 分支：\n\n```toml\n[dependencies]\nollama-rs = { git = \"https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs.git\", branch = \"master\" }\n```\n\n*请注意，`master` 分支可能不稳定，并且可能包含破坏性更改。*\n\n## 初始化\n\n### 初始化 Ollama\n\n```rust\nuse ollama_rs::Ollama;\n\n\u002F\u002F 默认会连接到 localhost:11434\nlet ollama = Ollama::default();\n\n\u002F\u002F 自定义值：\nlet ollama = Ollama::new(\"http:\u002F\u002Flocalhost\".to_string(), 11434);\n```\n\n## 使用\n\n欢迎查看 [聊天机器人示例](https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fblob\u002F0.3.4\u002Follama-rs\u002Fexamples\u002Fbasic_chatbot.rs)，它展示了如何使用该库在不到 50 行代码内创建一个简单的聊天机器人。你也可以查看一些 [其他示例](https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Ftree\u002F0.3.4\u002Follama-rs\u002Fexamples)。\n\n_这些示例为了简单起见使用了较差的错误处理，但在你的代码中应该妥善处理错误。_\n\n### 生成补全\n\n```rust\nuse ollama_rs::generation::completion::GenerationRequest;\n\nlet model = \"llama2:latest\".to_string();\nlet prompt = \"为什么天空是蓝色的？\".to_string();\n\nlet res = ollama.generate(GenerationRequest::new(model, prompt)).await;\n\nif let Ok(res) = res {\n    println!(\"{}\", res.response);\n}\n```\n\n**输出：** _天空呈现蓝色是因为一种称为瑞利散射的现象……_\n\n### 生成补全（流式）\n\n_需要启用 `stream` 功能。_\n\n```rust\nuse ollama_rs::generation::completion::GenerationRequest;\nuse tokio::io::{self, AsyncWriteExt};\nuse tokio_stream::StreamExt;\n\nlet model = \"llama2:latest\".to_string();\nlet prompt = \"为什么天空是蓝色的？\".to_string();\n\nlet mut stream = ollama.generate_stream(GenerationRequest::new(model, prompt)).await.unwrap();\n\nlet mut stdout = io::stdout();\nwhile let Some(res) = stream.next().await {\n    let responses = res.unwrap();\n    for resp in responses {\n        stdout.write_all(resp.response.as_bytes()).await.unwrap();\n        stdout.flush().await.unwrap();\n    }\n}\n```\n\n与上述相同，但以流式方式输出。\n\n### 生成补全（带选项）\n\n```rust\nuse ollama_rs::generation::completion::GenerationRequest;\nuse ollama_rs::models::ModelOptions;\n\nlet model = \"llama2:latest\".to_string();\nlet prompt = \"为什么天空是蓝色的？\".to_string();\n\nlet options = ModelOptions::default()\n    .temperature(0.2)\n    .repeat_penalty(1.5)\n    .top_k(25)\n    .top_p(0.25);\n\nlet res = ollama.generate(GenerationRequest::new(model, prompt).options(options)).await;\n\nif let Ok(res) = res {\n    println!(\"{}\", res.response);\n}\n```\n\n**输出：** _1. 太阳发出白光：太阳主要由……_\n\n### 聊天模式\n\n_每次发送和接收的消息都会被存储在库的历史记录中。_\n\n带有历史记录的示例：\n\n```rust\nuse ollama_rs::generation::chat::{request::ChatMessageRequest, ChatMessage};\nuse ollama_rs::history::ChatHistory;\n\nlet model = \"llama2:latest\".to_string();\nlet prompt = \"为什么天空是蓝色的？\".to_string();\n\u002F\u002F `Vec\u003CChatMessage>` 实现了 `ChatHistory`，\n\u002F\u002F 但你也可以在自定义类型上自行实现\nlet mut history = vec![];\n\nlet res = ollama\n    .send_chat_messages_with_history(\n        &mut history, \u002F\u002F \u003C- 消息将保存在这里\n        ChatMessageRequest::new(\n            model,\n            vec![ChatMessage::user(prompt)], \u002F\u002F \u003C- 应该只提供一条消息\n        ),\n    )\n    .await;\n\nif let Ok(res) = res {\n    println!(\"{}\", res.message.content);\n}\n```\n\n_请查看带有历史记录的聊天示例，包括 [默认模式](https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fblob\u002F0.3.4\u002Follama-rs\u002Fexamples\u002Fchat_with_history.rs) 和 [流式模式](https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fblob\u002F0.3.4\u002Follama-rs\u002Fexamples\u002Fchat_with_history_stream.rs)。_\n\n### 列出本地模型\n\n```rust\nlet res = ollama.list_local_models().await.unwrap();\n```\n\n_返回一个 `LocalModel` 结构体的向量。_\n\n### 显示模型信息\n\n```rust\nlet res = ollama.show_model_info(\"llama2:latest\".to_string()).await.unwrap();\n```\n\n_返回一个 `ModelInfo` 结构体。_\n\n### 创建模型\n\n```rust\nuse ollama_rs::models::create::CreateModelRequest;\n\nlet res = ollama.create_model(CreateModelRequest::new(\"my_model\".into())\n    .system(\"你是一个聊天机器人。\".into())\n    .from_model(\"llama2:latest\".into())).await.unwrap();\n```\n\n_返回一个 `CreateModelStatus` 结构体，表示模型创建的最终状态。_\n\n### 创建模型（流式）\n\n_需要启用 `stream` 功能。_\n\n```rust\nuse ollama_rs::models::create::CreateModelRequest;\nuse tokio_stream::StreamExt;\n\nlet res = ollama.create_model_stream(CreateModelRequest::new(\"my_model\".into())\n    .system(\"你是一个聊天机器人。\".into())\n    .from_model(\"llama2:latest\".into())).await.unwrap();\n\nwhile let Some(res) = res.next().await {\n    let res = res.unwrap();\n    \u002F\u002F 处理状态\n}\n```\n\n_返回一个 `CreateModelStatusStream`，它会流式传输模型创建过程中的每一个状态更新。_\n\n### 复制模型\n\n```rust\nlet _ = ollama.copy_model(\"mario\".into(), \"mario_copy\".into()).await.unwrap();\n```\n\n### 删除模型\n\n```rust\nlet _ = ollama.delete_model(\"mario_copy\".into()).await.unwrap();\n```\n\n### 生成嵌入\n\n```rust\nuse ollama_rs::generation::embeddings::request::GenerateEmbeddingsRequest;\n\nlet request = GenerateEmbeddingsRequest::new(\"llama2:latest\".to_string(), \"为什么天空是蓝色的？\".to_string());\nlet res = ollama.generate_embeddings(request).await.unwrap();\n```\n\n### 生成嵌入（批量）\n\n```rust\nuse ollama_rs::generation::embeddings::request::GenerateEmbeddingsRequest;\n\nlet request = GenerateEmbeddingsRequest::new(\"llama2:latest\".to_string(), vec![\"为什么天空是蓝色的？\", \"为什么天空是红色的？\"].into());\nlet res = ollama.generate_embeddings(request).await.unwrap();\n```\n\n_返回一个包含嵌入（浮点数向量）的 `GenerateEmbeddingsResponse` 结构体。_\n\n### 调用函数\n\n```rust\nuse ollama_rs::coordinator::Coordinator;\nuse ollama_rs::generation::chat::{ChatMessage, ChatMessageRequest};\nuse ollama_rs::generation::tools::implementations::{DDGSearcher, Scraper, Calculator};\nuse ollama_rs::models::ModelOptions;\n\nlet mut history = vec![];\n\nlet mut coordinator = Coordinator::new(ollama, \"qwen2.5:32b\".to_string(), history)\n    .options(ModelOptions::default().num_ctx(16384))\n    .add_tool(DDGSearcher::new())\n    .add_tool(Scraper {})\n    .add_tool(Calculator {});\n\nlet resp = coordinator\n    .chat(vec![ChatMessage::user(\"当前油价是多少？\")])\n    .await.unwrap();\n\nprintln!(\"{}\", resp.message.content);\n```\n\n_使用提供的工具（例如网络搜索）查找答案，将该答案反馈给大模型，并返回包含问题答案的 `ChatMessageResponse`。_\n\n### 创建自定义工具\n\n`function` 宏简化了自定义工具的创建过程。下面是一个用于获取指定城市当前天气的工具示例：\n\n```rust\n\u002F\u002F\u002F 获取指定城市的天气。\n\u002F\u002F\u002F\n\u002F\u002F\u002F * city - 需要查询天气的城市。\n#[ollama_rs::function]\nasync fn get_weather(city: String) -> Result\u003CString, Box\u003Cdyn std::error::Error + Sync + Send>> {\n    let url = format!(\"https:\u002F\u002Fwttr.in\u002F{city}?format=%C+%t\");\n    let response = reqwest::get(&url).await?.text().await?;\n    Ok(response)\n}\n```\n\n要创建自定义工具，只需定义一个返回 `Result\u003CString, Box\u003Cdyn std::error::Error + Sync + Send>>` 的函数，并使用 `function` 宏对其进行标注。该函数将自动转换为可与 `Coordinator` 一起使用的工具，与其他工具无异。\n\n请确保函数上方的文档注释清晰地描述了工具的作用及其参数。这些信息将提供给大模型，帮助其理解如何使用该工具。\n\n如需更详细的示例，请参阅 [函数调用示例](https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fblob\u002F0.3.4\u002Follama-rs\u002Fexamples\u002Ffunction_call.rs)。\n\n### 完成生成（带思考）\n\n```rust\nlet model = \"qwen3:latest\".to_string();\nlet prompt = \"为什么天空是蓝色的？\".to_string();\n\nlet res = ollama.generate(GenerationRequest::new(model, prompt).think(true)).await;\n\nif let Ok(res) = res {\n    println!(\"{}\", res.response);\n}\n```","# Ollama-rs 快速上手指南\n\n## 环境准备\n\n在开始之前，请确保你的开发环境满足以下要求：\n\n*   **操作系统**: Linux, macOS 或 Windows。\n*   **Rust 工具链**: 已安装 Rust 和 Cargo (推荐通过 [rustup](https:\u002F\u002Frustup.rs\u002F) 安装)。\n*   **Ollama 服务**: 本地已安装并运行 Ollama 服务。\n    *   默认监听地址：`http:\u002F\u002Flocalhost:11434`\n    *   确保已拉取至少一个模型（例如：`ollama pull llama2:latest`）。\n*   **异步运行时**: 由于库基于 `tokio`，你的项目需要配置异步运行时（通常在 `main` 函数添加 `#[tokio::main]`）。\n\n## 安装步骤\n\n在你的 Rust 项目根目录下的 `Cargo.toml` 文件中，添加 `ollama-rs` 依赖：\n\n```toml\n[dependencies]\nollama-rs = \"0.3.4\"\ntokio = { version = \"1\", features = [\"full\"] }\n```\n\n> **提示**：如果你需要使用流式输出（Streaming）功能，需启用 `stream` 特性：\n> ```toml\n> ollama-rs = { version = \"0.3.4\", features = [\"stream\"] }\n> ```\n\n若需使用最新的开发版功能（可能包含不稳定变更），可使用 Git 源：\n\n```toml\n[dependencies]\nollama-rs = { git = \"https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs.git\", branch = \"master\" }\n```\n\n## 基本使用\n\n以下是最简单的文本生成示例，展示如何初始化客户端并调用模型回答问题。\n\n### 1. 初始化与简单生成\n\n```rust\nuse ollama_rs::Ollama;\nuse ollama_rs::generation::completion::GenerationRequest;\n\n#[tokio::main]\nasync fn main() {\n    \u002F\u002F 初始化 Ollama 客户端 (默认连接 localhost:11434)\n    let ollama = Ollama::default();\n\n    \u002F\u002F 设置模型和提示词\n    let model = \"llama2:latest\".to_string();\n    let prompt = \"Why is the sky blue?\".to_string();\n\n    \u002F\u002F 发送生成请求\n    let res = ollama.generate(GenerationRequest::new(model, prompt)).await;\n\n    \u002F\u002F 处理结果\n    if let Ok(res) = res {\n        println!(\"{}\", res.response);\n    } else {\n        eprintln!(\"Error: {:?}\", res.err());\n    }\n}\n```\n\n### 2. 带参数的生成（可选）\n\n你可以通过 `ModelOptions` 调整温度、重复惩罚等参数：\n\n```rust\nuse ollama_rs::models::ModelOptions;\n\nlet options = ModelOptions::default()\n    .temperature(0.2)\n    .repeat_penalty(1.5);\n\nlet res = ollama.generate(\n    GenerationRequest::new(\"llama2:latest\".to_string(), \"Hello\".to_string())\n    .options(options)\n).await;\n```\n\n### 3. 对话模式（保留历史）\n\n`ollama-rs` 支持自动管理对话历史：\n\n```rust\nuse ollama_rs::generation::chat::{ChatMessage, ChatMessageRequest};\nuse ollama_rs::history::ChatHistory;\n\nlet mut history = vec![]; \u002F\u002F 用于存储对话历史\n\nlet res = ollama\n    .send_chat_messages_with_history(\n        &mut history,\n        ChatMessageRequest::new(\n            \"llama2:latest\".to_string(),\n            vec![ChatMessage::user(\"Who are you?\")],\n        ),\n    )\n    .await;\n\nif let Ok(res) = res {\n    println!(\"{}\", res.message.content);\n}\n```\n\n> **注意**：以上示例为了简洁省略了部分错误处理细节，在生产环境中请务必完善 `Result` 的处理逻辑。更多高级用法（如流式输出、工具调用、自定义 Function Call）请参考官方 examples 目录。","某 Rust 后端团队正在开发一款需要集成本地大模型能力的智能客服系统，旨在保护用户数据隐私并降低推理成本。\n\n### 没有 ollama-rs 时\n- 开发者必须手动查阅 Ollama API 文档，逐行编写复杂的 HTTP 请求代码来拼接 JSON 载荷，开发效率极低。\n- 处理流式响应（Streaming）时需要自行管理异步 IO 和缓冲区解析，代码冗长且极易出现字符截断或乱码错误。\n- 调整模型参数（如温度、重复惩罚）缺乏类型安全支持，硬编码的魔法数字导致配置难以维护和复用。\n- 实现多轮对话上下文记忆功能时，需手动构建消息历史列表，容易因格式错误导致模型回复失效。\n\n### 使用 ollama-rs 后\n- 通过简洁的 `GenerationRequest` 结构体即可发起请求，库自动处理底层通信，将核心业务逻辑代码缩减至 50 行以内。\n- 原生支持基于 Tokio 的流式输出接口，只需几行代码即可实现打字机效果的实时回复，无需关心底层数据分片。\n- 提供链式调用的 `ModelOptions` API，开发者可以直观地设置温度和拓扑采样等参数，享受编译期的类型检查保障。\n- 内置专门的聊天模式（Chat Mode）和历史消息管理结构，轻松维护多轮对话状态，让上下文理解更加精准稳定。\n\nollama-rs 将繁琐的 API 交互封装为符合 Rust 习惯的类型安全接口，让开发者能专注于业务逻辑而非网络协议细节。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpepperoni21_ollama-rs_158a7fb3.png","pepperoni21","Elias Paris","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fpepperoni21_952fd8a3.jpg",null,"Taïwan","contact@pepperoni21.tech","https:\u002F\u002Fgithub.com\u002Fpepperoni21",[83,87],{"name":84,"color":85,"percentage":86},"Rust","#dea584",100,{"name":88,"color":89,"percentage":90},"Makefile","#427819",0,1011,153,"2026-04-04T02:33:52","MIT","","未说明",{"notes":98,"python":99,"dependencies":100},"这是一个 Rust 库，不是独立的 AI 模型运行工具。它本身没有特定的操作系统、GPU 或内存需求，其运行环境取决于宿主 Rust 项目以及它所连接的 Ollama 后端服务。使用前需确保本地已安装并运行了 Ollama 服务（默认端口 11434）。部分功能（如流式输出）需要启用特定的 Cargo 特性（features）。","不适用",[101,102,103],"tokio","tokio-stream","reqwest",[26,13],"2026-03-27T02:49:30.150509","2026-04-06T08:45:18.352385",[108,113,118,123,128],{"id":109,"question_zh":110,"answer_zh":111,"source_url":112},14560,"为什么带历史记录的聊天（chat with history）不支持流式传输（streaming）？","这并非底层 Ollama API 的限制。社区已通过使用 `Arc` 和 `Mutex` 创建新的 `MessagesHistoryAsync` 结构体解决了此问题，并结合 `async-stream` crate 中的 `stream` 宏来实现自动保存响应，无需用户手动存储结果。您可以参考相关提交或示例代码 `cargo run --example chat_with_history_stream` 来查看具体实现。","https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fissues\u002F41",{"id":114,"question_zh":115,"answer_zh":116,"source_url":117},14561,"如何在 Rust 中实现类型安全的工具调用（Tool Support），避免使用字符串处理 JSON Schema？","库的最新版本（通过 PR #109 合并）已经实现了类似功能。它支持将实现了 `schemars` 的 `JsonSchema` trait 的非字符串参数直接传递给 LLM。虽然底层仍然向 LLM 发送字符串，但在 Rust 代码层面您可以使用强类型的结构体定义工具参数，无需手动编写 `json!()` 或字符串模板，从而获得更好的类型安全和开发体验。","https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fissues\u002F62",{"id":119,"question_zh":120,"answer_zh":121,"source_url":122},14562,"在使用流式模式时遇到 'Failed to deserialize response: trailing characters' 或 'EOF while parsing' 错误怎么办？","这是一个已修复的问题。该错误通常发生在完整响应发送完毕后，解析器试图处理额外的上下文数据或遇到意外的整数类型时。维护者已更新了反序列化逻辑以正确处理这些边界情况。如果您仍在使用旧版本遇到此问题，请升级到最新版本，该问题已在后续提交中解决。","https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fissues\u002F12",{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},14563,"为什么在使用 `generate` 函数时，即使 `done` 为 true，`GenerationFinalResponseData` 有时仍然是 `None`？","这是由于 `serde` 的 `#[serde(flatten)]` 属性导致的。当被扁平化的嵌套对象中缺少任何一个字段时，整个嵌套对象的反序列化都会失败，导致最终数据为 `None`。解决方案是移除 `flatten` 属性，并将相关字段显式定义为 `Option\u003CT>` 类型，这样即使某些字段缺失，也能成功解析并保留存在的数据。","https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fissues\u002F46",{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},14564,"调用 `show_model_info` 时，返回的 `modelfile` 字段包含了所有信息（如 parameters, license 等），而不仅仅是模型文件内容，这是 Bug 吗？","这不是 Bug，而是 Ollama API 的预期行为。`modelfile` 字段确实定义了模型的参数、许可证和模板等所有内容，API 返回的是完整的模型文件定义字符串。其他字段（如 `parameters`, `license`）只是从该模型文件中提取并单独列出的便捷字段。如果您需要解析 `modelfile` 字符串中的具体指令，可以使用专门的 `modelfile` crate 进行处理。","https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fissues\u002F137",[134,139,144,149,154,159,164,169,174,179,184,189,194,199,204,209,214,219,224,229],{"id":135,"version":136,"summary_zh":137,"released_at":138},81473,"v0.3.4","## 变更内容\n* 0.3.3 更新，由 @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F276 中完成\n* 新特性：为所有类型实现序列化和反序列化，由 @if0ne 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F277 中完成\n* 新特性：为 API 结构体字段添加 pub 修饰符，由 @if0ne 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F278 中完成\n* 将 tokio 从 1.47.1 升级至 1.48.0，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F279 中完成\n* 将 quote 从 1.0.41 升级至 1.0.42，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F280 中完成\n* 将 proc-macro2 从 1.0.101 升级至 1.0.103，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F281 中完成\n* 将 schemars 从 1.0.4 升级至 1.1.0，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F282 中完成\n* 将 syn 从 2.0.106 升级至 2.0.111，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F283 中完成\n* 修复 NDJSON 错误 #275，由 @yamada-sexta 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F284 中完成\n* 将 http 从 1.3.1 升级至 1.4.0，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F285 中完成\n* 将 serde_with 从 3.16.0 升级至 3.16.1，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F286 中完成\n* 将 log 从 0.4.28 升级至 0.4.29，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F287 中完成\n* 将 reqwest 从 0.12.24 升级至 0.12.26，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F290 中完成\n* 将 reqwest 从 0.12.26 升级至 0.12.28，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F293 中完成\n* 将 serde_json 从 1.0.145 升级至 1.0.146，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F294 中完成\n* 将 schemars 从 1.1.0 升级至 1.2.0，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F299 中完成\n* 将 quote 从 1.0.42 升级至 1.0.43，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F301 中完成\n* 将 tokio-stream 从 0.1.17 升级至 0.1.18，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F302 中完成\n* 将 serde_json 从 1.0.146 升级至 1.0.149，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F303 中完成\n* 将 proc-macro2 从 1.0.103 升级至 1.0.105，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F304 中完成\n* 将 thiserror 从 2.0.17 升级至 2.0.18，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F305 中完成\n* 将 syn 从 2.0.111 升级至 2.0.114，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F306 中完成\n* 将 text-splitter 从 0.28.0 升级至 0.29.3，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F307 中完成\n* 将 url 从 2.5.7 升级至 2.5.8，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F308 中完成\n* 将 tokio 从 1.48.0 升级至 1.49.0，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F309 中完成\n* 向嵌入请求中添加 'dimensions' 字段，由 @m-dreiling 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F310 中完成\n* 改进了 think 参数，并添加了参数序列化测试，由 @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Folla 中完成","2026-02-12T08:51:32",{"id":140,"version":141,"summary_zh":142,"released_at":143},81474,"v0.3.3","## 变更内容\n* 修复了 @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F224 中提出的工具调用问题\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F220 中将 reqwest 从 0.12.20 升级到 0.12.22\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F221 中将 schemars 从 1.0.0 升级到 1.0.4\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F222 中将 tokio 从 1.45.1 升级到 1.46.1\n* 新特性（宏）：重新导出 schemars 和 serde，由 @hannahfluch 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F223 中实现\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F225 中将 serde_with 从 3.13.0 升级到 3.14.0\n* 新特性：为 Coordinator 添加 `think` 选项，由 @ChrisAntaki 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F231 中实现\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F228 中将 tokio 从 1.46.1 升级到 1.47.0\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F226 中将 modelfile 从 0.3.0 升级到 0.3.1\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F227 中将 serde_json 从 1.0.140 升级到 1.0.141\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F232 中将 macrotest 从 1.1.0 升级到 1.2.0\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F233 中将 proc-macro2 从 1.0.95 升级到 1.0.96\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F234 中将 tokio 从 1.47.0 升级到 1.47.1\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F235 中将 serde_json 从 1.0.141 升级到 1.0.142\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F237 中将 thiserror 从 2.0.12 升级到 2.0.15\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F238 中将 syn 从 2.0.104 升级到 2.0.106\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F239 中将 proc-macro2 从 1.0.96 升级到 1.0.101\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F240 中将 reqwest 从 0.12.22 升级到 0.12.23\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F241 中将 scraper 从 0.23.1 升级到 0.24.0\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F242 中将 regex 从 1.11.1 升级到 1.11.2\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F243 中将 serde_json 从 1.0.142 升级到 1.0.143\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F244 中将 url 从 2.5.4 升级到 2.5.7\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F245 中将 thiserror 从 2.0.15 升级到 2.0.16\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F248 中将 text-splitter 从 0.27.0 升级到 0.28.0\n* @denisstrizhkin 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F247 中修改 send_chat_messages_with_history 方法，使其接受 &self 参数\n* @mineichen 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F249 中实现：如果在 ddg 中未找到选择器，则返回 Error 而不是 panic\n* @pepperoni21 在 https:\u002F\u002Fgithub.com\u002F","2025-11-18T07:35:08",{"id":145,"version":146,"summary_zh":147,"released_at":148},81475,"v0.3.2","## 变更内容\n* @TeamDman 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F192 中为 modelinfo 添加了功能\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F191 中将 syn 从 2.0.100 升级到 2.0.101\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F196 中将 tokio 从 1.44.2 升级到 1.45.0\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F195 中将 text-splitter 从 0.25.1 升级到 0.26.0\n* @m13253 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F197 中为 GenerationRequest 添加了 raw 参数\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F202 中将 reqwest 从 0.12.15 升级到 0.12.19\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F199 中将 tokio 从 1.45.0 升级到 1.45.1\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F203 中将 text-splitter 从 0.26.0 升级到 0.27.0\n* @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F204 中将 JsonStructure 放入 FormatType 内部\n* @serendipty01 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F201 中添加了思考支持\n* @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F205 中将 schemars 迁移到 0.9 版本\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F207 中将 reqwest 从 0.12.19 升级到 0.12.20\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F208 中将 serde_with 从 3.12.0 升级到 3.13.0\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F209 中将 syn 从 2.0.101 升级到 2.0.103\n* @Rushmore75 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F211 中通过尝试多种格式进行反序列化来修复 #210\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F212 中将 quinn-proto 从 0.11.6 升级到 0.11.12\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F213 中将 syn 从 2.0.103 升级到 2.0.104\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F214 中将 schemars 从 0.9.0 升级到 1.0.0\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F216 中将 openssl 从 0.10.58 升级到 0.10.73\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F215 中将 ring 从 0.17.7 升级到 0.17.14\n\n## 新贡献者\n* @TeamDman 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F192 中做出了首次贡献\n* @m13253 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F197 中做出了首次贡献\n* @serendipty01 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F201 中做出了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.3.1...v0.3.2","2025-06-24T11:38:00",{"id":150,"version":151,"summary_zh":152,"released_at":153},81476,"v0.3.1","## 变更内容\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F180 中将 text-splitter 从 0.25.0 升级至 0.25.1\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F182 中将 tokio 从 1.44.1 升级至 1.44.2\n* 结构化输出：支持运行时生成的 schema，由 @matusfaro 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F181 中实现\n* 为 JSON 设置 Content-Type 头，由 @sebdotv 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F184 中完成\n* 功能性更新：使 ToolType 和 ToolFunctionInfo 公开，由 @starpit 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F185 中实现\n* 向 GenerationResponse 和 ChatMessageFinalResponseData 添加 load_duration 字段，由 @sebdotv 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F186 中完成\n* 使 tools 实现 Send + Sync 特性，由 @fgsch 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F187 中实现\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F188 中将 proc-macro2 从 1.0.94 升级至 1.0.95\n* 为协调器实现了 keep_alive 功能，由 @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F190 中完成\n\n## 新贡献者\n* @matusfaro 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F181 中完成了首次贡献\n* @sebdotv 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F184 中完成了首次贡献\n* @starpit 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F185 中完成了首次贡献\n* @fgsch 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F187 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.3.0...v0.3.1","2025-04-28T17:03:14",{"id":155,"version":156,"summary_zh":157,"released_at":158},81477,"v0.3.0","## 变更内容\n* @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F149 中更新了创建模型的封装器\n* @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F150 中将 GenerationOptions 重命名为 ModelOptions\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F156 中将 quote 从 1.0.38 升级到 1.0.39\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F155 中将 regex 从 1.10.4 升级到 1.11.1\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F154 中将 tokio 从 1.33.0 升级到 1.43.0\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F153 中将 log 从 0.4.25 升级到 0.4.26\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F152 中将 serde_json 从 1.0.139 升级到 1.0.140\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F157 中将 text-splitter 从 0.13.3 升级到 0.24.1\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F158 中将 tokio 从 1.43.0 升级到 1.44.0\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F159 中将 schemars 从 0.8.21 升级到 0.8.22\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F160 中将 serde 从 1.0.217 升级到 1.0.219\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F161 中将 thiserror 从 2.0.11 升级到 2.0.12\n* @na-g 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F162 中使响应令牌计数器与 Ollama 的整数宽度保持一致\n* @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F164 中在 ModelInfo 结构体上实现了 model_info 字段\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F165 中将 tokio 从 1.44.0 升级到 1.44.1\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F166 中将 syn 从 2.0.98 升级到 2.0.100\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F167 中将 proc-macro2 从 1.0.93 升级到 1.0.94\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F168 中将 quote 从 1.0.39 升级到 1.0.40\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F169 中将 http 从 1.2.0 升级到 1.3.1\n* @rozgo 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F170 中处理了多个或碎片化的 SSE JSON 事件\n* @wesc 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F172 中为聊天请求添加了 keep_alive 参数\n* @wesc 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F174 中修复了 Ollama 使用 'h' 来指定小时持续时间的问题\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F175 中将 scraper 从 0.19.0 升级到 0.23.1\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F176 中将 log 从 0.4.26 升级到 0.4.27\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F177 中将 reqwest 从 0.12.12 升级到 0.12.15\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F178 中将 text-splitter 从 0.24.1 升级到 0.25.0\n* @Arjentix 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F173 中实现了动态工具支持\n* @Arjentix 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F1 中修复了错误格式化问题","2025-03-30T08:43:24",{"id":160,"version":161,"summary_zh":162,"released_at":163},81478,"v0.2.6","## 变更内容\n* 由 @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F124 中将 num_ctx 选项类型提升为 u64\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F128 中将 base64 从 0.22.0 升级至 0.22.1\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F125 中将 serde 从 1.0.199 升级至 1.0.217\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F129 中将 reqwest 从 0.12.5 升级至 0.12.12\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F127 中将 thiserror 从 2.0.9 升级至 2.0.11\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F126 中将 http 从 1.1.0 升级至 1.2.0\n* 新特性：由 @iganev 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F135 中添加了使用预配置的 reqwest 客户端初始化 ollama 的功能\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F130 中将 syn 从 2.0.95 升级至 2.0.98\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F131 中将 log 从 0.4.20 升级至 0.4.25\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F132 中将 html2md 从 0.2.14 升级至 0.2.15\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F133 中将 text-splitter 从 0.13.1 升级至 0.13.3\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F134 中将 serde_json 从 1.0.116 升级至 1.0.138\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F138 中将 url 从 2.5.0 升级至 2.5.4\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F140 中将 tokio-stream 从 0.1.15 升级至 0.1.17\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F142 中将 serde_json 从 1.0.138 升级至 1.0.139\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F139 中将 macrotest 从 1.0.13 升级至 1.1.0\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F141 中将 proc-macro2 从 1.0.92 升级至 1.0.93\n* 由 @boondocklabs 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F144 中实现了协调器结构化输出功能\n* 带有 modelfile 功能：由 @picobyte 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F145 中提供了对 modelfile 包含信息的更好访问权限\n\n## 新贡献者\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F128 中做出了首次贡献\n* @iganev 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F135 中做出了首次贡献\n* @boondocklabs 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F144 中做出了首次贡献\n* @picobyte 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F145 中做出了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.2.5...v0.2.6","2025-02-26T12:31:30",{"id":165,"version":166,"summary_zh":167,"released_at":168},81479,"v0.2.5","## 变更内容\n* 支持在生成请求中使用借用字符串，由 @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F116 中实现\n* OllamaError 应当实现 Send + Sync 特性，由 @j7nw4r 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F117 中实现\n* 添加生成的 Rustdoc 注释，由 @j7nw4r 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F118 中实现\n* 改进依赖包版本管理，由 @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F119 中实现\n\n## 新贡献者\n* @j7nw4r 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F117 中完成了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.2.4...v0.2.5","2025-02-06T14:41:33",{"id":170,"version":171,"summary_zh":172,"released_at":173},81480,"v0.2.4","## 变更内容\n* @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F112 中添加了 `tool_group` 宏\n* @mattcan 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F114 中修复了多个结构体字段无法与 `function` 宏配合使用的问题\n* @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F115 中将宏测试集成到 GitHub Actions\n\n## 新贡献者\n* @mattcan 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F114 中完成了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.2.3...v0.2.4","2025-01-16T10:34:12",{"id":175,"version":176,"summary_zh":177,"released_at":178},81481,"v0.2.3","## 变更内容\n* @scd31 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F101 中改进了结构化 JSON API\n* @scd31 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F103 中进行了重大重构\n* @boswelja 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F104 中移除了 Coordinator 的生命周期标注\n* 重构：@ShenMian 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F105 中移除了不必要的 `mut`\n* @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F106 中优化了 README.md\n* @Arjentix 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F109 中添加了函数属性宏\n\n## 新贡献者\n* @scd31 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F101 中完成了首次贡献\n* @ShenMian 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F105 中完成了首次贡献\n* @Arjentix 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F109 中完成了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.2.2...v0.2.3","2025-01-12T11:55:04",{"id":180,"version":181,"summary_zh":182,"released_at":183},81482,"v0.2.2","## 变更内容\n* 由 @andthattoo 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F77 中更新了 wasm-bindgen 的 Reqwest 版本\n* 由 @SergioKingOne 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F76 中向 MessageRole 类型添加了 Tool 角色\n* 由 @pepperoni21 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F78 中修复了聊天历史丢失的问题，并添加了测试\n* 功能：由 @itsscb 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F79 中增加了对自定义 HTTP 头的支持\n* Llama 支持多次函数调用 + raw_mode，由 @andthattoo 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F80 中实现\n* 由 @boydjohnson 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F84 中为 docs.rs 生成添加了相关功能\n* 由 @boswelja 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F88 中移除了 Llama 函数输出中的“转义”引号\n* 由 @boswelja 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F91 中实现了 Image::to_base64 方法\n* 修复：函数调用会将无效的工具调用返回为有效的聊天回复，由 @mcmah309 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F93 中修复\n* 对 0.5 版本的支持，包括结构化输出和示例，由 @notashes 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F95 中实现\n* 修复聊天历史问题，由 @boydjohnson 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F100 中完成\n\n## 新贡献者\n* @SergioKingOne 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F76 中做出了首次贡献\n* @itsscb 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F79 中做出了首次贡献\n* @boydjohnson 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F84 中做出了首次贡献\n* @boswelja 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F88 中做出了首次贡献\n* @mcmah309 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F93 中做出了首次贡献\n* @notashes 在 https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F95 中做出了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.2.1...v0.2.2","2024-12-21T10:41:21",{"id":185,"version":186,"summary_zh":187,"released_at":188},81483,"v0.2.1","## What's Changed\r\n* Add streaming feature with chat history by @izyuumi in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F55\r\n* Store chat history with stream update by @ushinnary in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F56\r\n* Llama3.1 Function Calling + New Tools by @andthattoo in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F59\r\n* Create images_to_ollama.rs by @heydocode in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F63\r\n* Update embeddings generation to \u002Fapi\u002Fembed endpoint and allow for batch embedding by @pepperoni21 in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F61\r\n* Update readme to provide compilable embeddings examples by @ephraimkunz in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F69\r\n* feat: Added suffix in completion request by @SpeedCrash100 in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F68\r\n* Fixed GenerateEmbeddingsResponse float type by @pepperoni21 in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F71\r\n\r\n## New Contributors\r\n* @izyuumi made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F55\r\n* @heydocode made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F63\r\n* @ephraimkunz made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F69\r\n* @SpeedCrash100 made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F68\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.2.0...v0.2.1","2024-09-07T17:28:00",{"id":190,"version":191,"summary_zh":192,"released_at":193},81484,"v0.2.0","## What's Changed\r\n* Replace host string and port with `Url` by @zeozeozeo in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F45\r\n* Flatten final response data by @erhant in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F47\r\n* Examples folder should contain working versions of the current release by @yasinldev in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F48\r\n* Revert \"Examples folder should contain working versions of the current release\" by @pepperoni21 in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F49\r\n* Ollama Function Calling by @andthattoo in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F51\r\n* OllamaError for function-calling by @andthattoo in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F54\r\n\r\n## New Contributors\r\n* @erhant made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F47\r\n* @yasinldev made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F48\r\n* @andthattoo made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F51\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.1.9...v0.2.0","2024-06-13T13:20:32",{"id":195,"version":196,"summary_zh":197,"released_at":198},81485,"v0.1.9","## What's Changed\r\n* Add Serialize Support for Further Stucts by @bencevans in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F36\r\n* fix: Adds back custom `Result` type for generate function by @jpmcb in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F37\r\n* update: update README streaming example by @milosgajdos in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F39\r\n* make `ModelInfo` fields empty by default by @zeozeozeo in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F40\r\n* make GenerationContext with pub field by @Vebnik in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F43\r\n\r\n## New Contributors\r\n* @bencevans made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F36\r\n* @jpmcb made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F37\r\n* @milosgajdos made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F39\r\n* @zeozeozeo made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F40\r\n* @Vebnik made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F43\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.1.8...v0.1.9","2024-04-17T13:37:06",{"id":200,"version":201,"summary_zh":202,"released_at":203},81486,"v0.1.8","## What's Changed\r\n* feat: make GenerationOptions deserializable by @AlexisTM in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F28\r\n* feat: Add an example to show how to load GenerationOptions from a json string by @AlexisTM in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F30\r\n* Derive Eq, PartialEq on MessageRole by @Sir-Photch in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F33\r\n* Re-add Send for GenerationResponseStream by @functorism in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F34\r\n* feat: Store chat history by @ushinnary in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F32\r\n\r\n## New Contributors\r\n* @AlexisTM made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F28\r\n* @Sir-Photch made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F33\r\n* @ushinnary made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F32\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.1.7...v0.1.8","2024-03-30T19:20:35",{"id":205,"version":206,"summary_zh":207,"released_at":208},81487,"v0.1.7","## What's Changed\r\n* Adds example on how to use completion options to README and \u002Fexamples by @dezoito in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F23\r\n* Derives 'serialize' in GenerationResponse and GenerationFinalResponse by @dezoito in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F25\r\n* GenerationOptions 'stop' should be a string array, not string by @functorism in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F26\r\n\r\n## New Contributors\r\n* @dezoito made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F23\r\n* @functorism made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F26\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.1.6...v0.1.7","2024-02-24T11:06:44",{"id":210,"version":211,"summary_zh":212,"released_at":213},81488,"v0.1.6","## What's Changed\r\n* Added the `Send` trait bound to all stream types by @varonroy in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F14\r\n* Fix return type for generate function by @SimonCW in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F16\r\n* Fix chatbot example link by @Rushmore75 in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F18\r\n* Fixed deserialization when streaming by @pepperoni21 in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F13\r\n\r\n## New Contributors\r\n* @varonroy made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F14\r\n* @SimonCW made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F16\r\n* @Rushmore75 made their first contribution in https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fpull\u002F18\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fcompare\u002Fv0.1.5...v0.1.6","2024-01-18T19:33:00",{"id":215,"version":216,"summary_zh":217,"released_at":218},81489,"v0.1.5","Added image supports:\r\n- images are represented with the `Image` struct which is a wrapper for the base64 encoding of the image\r\n- using `images` and `add_image` methods of `GenerationRequest`\r\n- using `with_images` and `add_image` methods of `ChatMessage`","2023-12-19T09:14:23",{"id":220,"version":221,"summary_zh":222,"released_at":223},81490,"v0.1.4","- Added chat endpoint support with `send_chat_messages` and `send_chat_messages_stream` methods (see https:\u002F\u002Fgithub.com\u002Fpepperoni21\u002Follama-rs\u002Fblob\u002Fmaster\u002Fexamples\u002Fchat_api_chatbot.rs)\r\n- Fixed final data not being parsed in the `GenerationResponse` due to a change from Ollama","2023-12-11T18:46:26",{"id":225,"version":226,"summary_zh":227,"released_at":228},81491,"v0.1.3","- Added `rustls` support through the `rustls` feature\r\n\r\n- `create_model` and `create_model_stream` methods now take a `CreateModelRequest` as the parameter, allowing to create a model by passing the content of the Modelfile as parameter.\r\n\r\n  For example, this:\r\n  ```rust\r\n  ollama.create_model(\"model\".into(), \"\u002Ftmp\u002FModelfile.example\".into())\r\n  ```\r\n  becomes:\r\n  ```rust\r\n  ollama.create_model(CreateModelRequest::path(\"model\".into(), \"\u002Ftmp\u002FModelfile.example\".into()))\r\n  ```","2023-12-06T19:51:45",{"id":230,"version":231,"summary_zh":232,"released_at":233},81492,"v0.1.2","- Fixed `GenerateEmbeddingsResponse` struct by making the `embeddings` field accessible","2023-11-21T21:02:07"]