Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Org mode response formatting #296

Closed
wlauppe opened this issue Apr 26, 2024 · 8 comments
Closed

Org mode response formatting #296

wlauppe opened this issue Apr 26, 2024 · 8 comments

Comments

@wlauppe
Copy link

wlauppe commented Apr 26, 2024

Hi Karthik, thanks for GPTel, it's really a great tool!
When I use gptel-send in an Org mode file, the response is only partially in Org mode format. There are still some Markdown elements left.

First, I thought this must have something to do with my Emacs config, but with vanilla Emacs in a fresh Ubuntu VM and just GPTel set up according to your readme, I experience the same problems. For clarity i added an example output. If i mark the sentence What are the advantages of org-mode? Give a detailed overview and send it to gptel OpenRouter:google/gemini-pro I get the output below.

Can you reproduce this? Do you know why this happens and how to fix it?

* What are the advantages of org-mode? Give a detailed overview

## Advantages of Org-Mode

Org-mode is an invaluable tool for anyone who wants to improve their productivity and organization. It offers a wide range of features and advantages over traditional text editors and n$

**Organization and Planning:**

- *Structured Content:** Organize your notes, tasks, and ideas in a hierarchical way, using headlines and sub-bullets. This allows for easier navigation and information retrieval.
- *Multiple File Formats:** Export your content to various formats, including plain text, HTML, LaTeX, and PDF, for sharing and publishing.
- *Tagging and Linking:** Categorize and link notes and tasks to each other for cross-referencing and improved information flow.
- *Agenda Views:** Organize your tasks and events into daily, weekly, and monthly agendas for enhanced time management and planning.

**Task Management:**

- *Deadline Tracking:** Assign deadlines to tasks, with reminders and automatic scheduling to keep you on track.
- *Project Management:** Break down complex projects into smaller tasks, track their progress, and visualize the overall structure with Gantt charts.
- *Effort Estimation:** Assign estimated effort to tasks to better manage your workload and prevent overcommitment.
- *Habit Tracking:** Create habit trackers to monitor your progress towards achieving personal goals and building positive habits.

**Text Editing and Formatting:**

- *Syntax Highlighting:** Enjoy syntax highlighting for various programming languages and markup languages, making your code clearer and easier to read.
- *Table Support:** Create and edit tables for data organization and presentation.
- *Math Support:** Use LaTeX markup to write and display mathematical expressions and equations directly within your notes.
- *Customizable Appearance:** Adjust themes and fonts to personalize your workspace and optimize for readability.

**Integration and Automation:**

- *Emacs Integration:** Leverages the extensive capabilities of Emacs, allowing for scripting, automation, and extensions.
- *External Program Execution:** Execute external programs and capture their output directly within your Org-mode files.
- *Web and Calendar Integration:** Connect to online services and calendars for seamless task and event management.

**Advanced Features:**

- *Capture Mode:** Quickly capture thoughts and ideas using keyboard shortcuts, without interrupting your current workflow.
- *Agenda Views:** View your tasks and events in various formats, including daily, weekly, and monthly agendas.
- *Org Babel:** Weave code snippets and scripts into your notes for calculations, simulations, and interactive documents.
@karthink
Copy link
Owner

karthink commented Apr 26, 2024

@wlauppe gptel converts markdown to Org on the fly, I've been slowly plugging away at improving this. Headings are explicitly not handled yet, so this error is expected:

## Advantages of Org-Mode

I thought I had the strong/bold text handled correctly though, so you shouldn't be seeing **Task Management:**.

You can search the issues page for markdown to org conversion, there have been a few threads about it in the past (such as #81). Some people are using pandoc to convert the response instead, but this requires streaming to be turned off.

You can also help me fix it by generating test data I can use. Here's how to go about it:

  1. Turn on logging with (setq gptel-log-level 'info)
  2. Make a request like the one above, that generates an incorrect Org response
  3. Paste the contents of the *gptel-log* buffer here, as well as the incorrect response in your chat buffer.

@wlauppe
Copy link
Author

wlauppe commented Apr 27, 2024

Hello Karthik, thanks for your quick reply. Here is the gptel-log and the response with gptel-log-level set to info. I have installed your latest GPTel version (commit: a2b16c4). Let me know if I can help in any other way.

gptel-log

{
  "gptel": "request body",
  "timestamp": "2024-04-27 21:59:02"
}
{
  "model": "google/gemini-pro",
  "messages": [
    {
      "role": "system",
      "content": ""
    },
    {
      "role": "user",
      "content": "What are the advantages of org-mode? Give a detailed overview."
    }
  ],
  "stream": true,
  "temperature": 1.0
}
{
  "gptel": "response body",
  "timestamp": "2024-04-27 21:59:11"
}
: OPENROUTER PROCESSING

: OPENROUTER PROCESSING

: OPENROUTER PROCESSING

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247944,"choices":[{"index":0,"delta":{"role":"assistant","content":"## Advantages of"},"finish_reason":null}]}

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247944,"choices":[{"index":0,"delta":{"role":"assistant","content":" Org-Mode: A Detailed Overview\n\nOrg-mode is a powerful and versatile Emacs extension that offers a wide range of features"},"finish_reason":null}]}

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247945,"choices":[{"index":0,"delta":{"role":"assistant","content":" for organizing information, planning projects, and writing documents. Here's a detailed overview of its advantages:\n\n**Note Taking and Idea Management:**\n\n"},"finish_reason":null}]}

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247945,"choices":[{"index":0,"delta":{"role":"assistant","content":"* **Unified platform:** Org-mode provides a single platform for capturing notes, ideas, and tasks, eliminating the need for multiple tools and ensuring everything is in one place.\n* **Flexibility:** Notes can be structured hierarchically"},"finish_reason":null}]}

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247946,"choices":[{"index":0,"delta":{"role":"assistant","content":" using headlines and subheadings, allowing for easy organization and navigation.\n* **Linking and tags:** Link notes together for easy reference and connect them with tags for categorized browsing.\n* **Metadata:** Capture additional information like author, deadline, and"},"finish_reason":null}]}

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247947,"choices":[{"index":0,"delta":{"role":"assistant","content":" priority for better organization and search.\n\n**Project Management and Planning:**\n\n* **Task management:** Create to-do lists with deadlines, priority levels, and tags for efficient task management.\n* **Gantt charts and time estimates:** Visualize project timelines and estimate time commitments for better planning and organization.\n* **Calendar integration:** Link tasks to your calendar for better integration and time management.\n* **"},"finish_reason":null}]}

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247948,"choices":[{"index":0,"delta":{"role":"assistant","content":"Progress tracking:** Track the progress of tasks and projects with checkboxes and progress bars.\n\n**Writing and Document Creation:**\n\n* **Rich text formatting:** Org-mode supports a variety of text formatting options, including bold, italics, headings, and lists, for creating professional-looking documents.\n* **Exporting to various formats:** Easily export your notes and documents to various formats like PDF, HTML, LaTeX, and"},"finish_reason":null}]}

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247949,"choices":[{"index":0,"delta":{"role":"assistant","content":" plain text.\n* **Beamer presentations:** Create Beamer presentations directly within Org-mode for academic or professional presentations.\n* **Source code blocks:** Include and highlight code blocks for easy reference and documentation.\n\n**Additional Features:**\n\n* **Org-Capture:** Quickly capture ideas, notes, and tasks from anywhere using keyboard shortcuts.\n* **Org-Agenda:** View and manage your tasks and appointments in a calendar-like format.\n* **Emacs Lisp scripting:** Add custom"},"finish_reason":null}]}

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247950,"choices":[{"index":0,"delta":{"role":"assistant","content":" functionality and automate tasks with Emacs Lisp scripting.\n* **Active development and community support:** Benefit from the active development and supportive community of Org-mode users.\n\n**Overall Advantages:**\n\n* **Increased productivity:** Organize your thoughts, tasks, and projects efficiently, leading to increased productivity.\n* **Improved focus:** Eliminate distractions and stay focused on the task at hand.\n* **Enhanced creativity:** Capture ideas quickly and easily, fostering creativity and innovation.\n* **Knowledge management:** Build a comprehensive knowledge base"},"finish_reason":null}]}

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247951,"choices":[{"index":0,"delta":{"role":"assistant","content":" of notes, ideas, and projects for future reference.\n* **Personalized workflow:** Tailor Org-mode to your specific needs and preferences for a truly personalized workflow.\n\n**Limitations:**\n\n* **Learning curve:** While powerful, Org-mode has a steeper learning curve compared to simpler note-taking apps.\n* **Emacs dependency:** Org-mode requires Emacs, which may not be suitable for all users.\n* **Limited mobile support:** Mobile support for Org-mode is available but not as feature-rich as"},"finish_reason":null}]}

data: {"id":"gen-S6rnDx3hTZUIbY6NLIQLg6uDsFN8","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714247951,"choices":[{"index":0,"delta":{"role":"assistant","content":" the desktop version.\n\n**Who should use Org-mode?**\n\n* Students\n* Researchers\n* Writers\n* Project managers\n* Anyone who wants to improve their personal organization and productivity\n\n**Conclusion:**\n\nOrg-mode is a powerful and versatile tool that can significantly increase your productivity and organization. Its flexibility, rich features, and active community make it an excellent choice for managing notes, projects, and documents. If you're looking for a way to streamline your workflow and unleash your creativity, Org-mode is definitely worth exploring."},"finish_reason":"STOP"}]}

data: [DONE]

response

## Advantages of Org-Mode: A Detailed Overview

Org-mode is a powerful and versatile Emacs extension that offers a wide range of features for organizing information, planning projects, and writing documents. Here's a detailed overview of its advantages:

**Note Taking and Idea Management:**

- *Unified platform:** Org-mode provides a single platform for capturing notes, ideas, and tasks, eliminating the need for multiple tools and ensuring everything is in one place.
- *Flexibility:** Notes can be structured hierarchically using headlines and subheadings, allowing for easy organization and navigation.
- *Linking and tags:** Link notes together for easy reference and connect them with tags for categorized browsing.
- *Metadata:** Capture additional information like author, deadline, and priority for better organization and search.

**Project Management and Planning:**

- *Task management:** Create to-do lists with deadlines, priority levels, and tags for efficient task management.
- *Gantt charts and time estimates:** Visualize project timelines and estimate time commitments for better planning and organization.
- *Calendar integration:** Link tasks to your calendar for better integration and time management.
- *Progress tracking:** Track the progress of tasks and projects with checkboxes and progress bars.

**Writing and Document Creation:**

- *Rich text formatting:** Org-mode supports a variety of text formatting options, including bold, italics, headings, and lists, for creating professional-looking documents.
- *Exporting to various formats:** Easily export your notes and documents to various formats like PDF, HTML, LaTeX, and plain text.
- *Beamer presentations:** Create Beamer presentations directly within Org-mode for academic or professional presentations.
- *Source code blocks:** Include and highlight code blocks for easy reference and documentation.

**Additional Features:**

- *Org-Capture:** Quickly capture ideas, notes, and tasks from anywhere using keyboard shortcuts.
- *Org-Agenda:** View and manage your tasks and appointments in a calendar-like format.
- *Emacs Lisp scripting:** Add custom functionality and automate tasks with Emacs Lisp scripting.
- *Active development and community support:** Benefit from the active development and supportive community of Org-mode users.

**Overall Advantages:**

- *Increased productivity:** Organize your thoughts, tasks, and projects efficiently, leading to increased productivity.
- *Improved focus:** Eliminate distractions and stay focused on the task at hand.
- *Enhanced creativity:** Capture ideas quickly and easily, fostering creativity and innovation.
- *Knowledge management:** Build a comprehensive knowledge base of notes, ideas, and projects for future reference.
- *Personalized workflow:** Tailor Org-mode to your specific needs and preferences for a truly personalized workflow.

**Limitations:**

- *Learning curve:** While powerful, Org-mode has a steeper learning curve compared to simpler note-taking apps.
- *Emacs dependency:** Org-mode requires Emacs, which may not be suitable for all users.
- *Limited mobile support:** Mobile support for Org-mode is available but not as feature-rich as the desktop version.

**Who should use Org-mode?**

- Students
- Researchers
- Writers
- Project managers
- Anyone who wants to improve their personal organization and productivity

**Conclusion:**

Org-mode is a powerful and versatile tool that can significantly increase your productivity and organization. Its flexibility, rich features, and active community make it an excellent choice for managing notes, projects, and documents. If you're looking for a way to streamline your workflow and unleash your creativity, Org-mode is definitely worth exploring.

karthink added a commit that referenced this issue Apr 29, 2024
* test/gptel-org-test.el (gptel-org--test-stream-conversion): Add
a test harness to make comparing markdown to org easy.

* gptel-org.el (gptel--stream-convert-markdown->org): Handle
headings and strong chars in the converter.  Addresses #296.
@karthink
Copy link
Owner

@wlauppe Thanks for the test data, I plugged away at the converter some more. Please update and test.

@karthink
Copy link
Owner

Forgot to mention: The improvements are on the Org formatting of streaming responses only. Non-streaming responses are still wonky, but that's very easy to fix, I'll get to it later.

@wlauppe
Copy link
Author

wlauppe commented Apr 29, 2024

Great! Output looks good now, here is the test data. Thanks a lot!

gptel-log

{
  "gptel": "request body",
  "timestamp": "2024-04-29 09:06:56"
}
{
  "model": "google/gemini-pro",
  "messages": [
    {
      "role": "system",
      "content": ""
    },
    {
      "role": "user",
      "content": "What are the advantages of org-mode? Give a detailed overview."
    }
  ],
  "stream": true,
  "temperature": 1.0
}
{
  "gptel": "response body",
  "timestamp": "2024-04-29 09:07:04"
}
: OPENROUTER PROCESSING

: OPENROUTER PROCESSING

: OPENROUTER PROCESSING

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374418,"choices":[{"index":0,"delta":{"role":"assistant","content":"## Advantages of"},"finish_reason":null}]}

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374418,"choices":[{"index":0,"delta":{"role":"assistant","content":" Org-mode: A Detailed Overview\n\nOrg-mode is a powerful and versatile organizational tool integrated into the Emacs text editor. It offers a plethora of"},"finish_reason":null}]}

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374419,"choices":[{"index":0,"delta":{"role":"assistant","content":" features for managing tasks, notes, projects, and much more. This comprehensive overview delves into the key advantages of using Org-mode:\n\n**1"},"finish_reason":null}]}

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374420,"choices":[{"index":0,"delta":{"role":"assistant","content":". Task and Project Management:**\n\n* **Creating and managing tasks:** Org-mode allows you to create tasks with deadlines, priorities, tags, and dependencies. You can also track task completion, set reminders, and generate reports.\n* **Project planning"},"finish_reason":null}]}

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374420,"choices":[{"index":0,"delta":{"role":"assistant","content":":** Org-mode excels at project planning by enabling you to break down projects into smaller, actionable steps. Gantt charts and other visualization tools help you monitor project progress.\n* **Time management:** Track time spent on tasks and projects using the built-in timers"},"finish_reason":null}]}

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374421,"choices":[{"index":0,"delta":{"role":"assistant","content":". Analyze your time usage and identify areas for improvement.\n\n**2. Note-taking and Outlining:**\n\n* **Flexible note-taking:** Capture ideas, thoughts, and meeting notes in a structured format. Org-mode supports various heading levels, bullet points, and embedded images.\n* **Outlining and structuring:** Organize your notes hierarchically with headings and subheadings. Easily navigate"},"finish_reason":null}]}

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374422,"choices":[{"index":0,"delta":{"role":"assistant","content":" and search through your notes.\n* **Knowledge management:** Build a personal knowledge base by linking related notes and creating a network of information.\n\n**3. Content Creation and Editing:**\n\n* **Document creation:** Create documents, articles, and presentations with Org-mode's text editor. Export your documents to various formats like LaTeX, HTML, and Markdown.\n*"},"finish_reason":null}]}

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374423,"choices":[{"index":0,"delta":{"role":"assistant","content":" **Writing and editing:** Focus on writing without distractions. Org-mode provides spelling and grammar checkers, code highlighting, and other writing aids.\n* **Collaboration:** Share your Org-mode files with others for collaborative editing and project management.\n\n**4. Scheduling and Reminders:**\n\n* **Calendar integration:** Seamlessly integrate your Org-mode tasks and events with your calendar. Sync reminders and deadlines across different platforms.\n* **Deadline management:** Set deadlines for tasks and receive timely reminders."},"finish_reason":null}]}

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374424,"choices":[{"index":0,"delta":{"role":"assistant","content":" Avoid missing important deadlines and stay on track.\n* **Agenda planning:** Create daily or weekly agendas by scheduling tasks and appointments in your calendar.\n\n**5. Customization and Integration:**\n\n* **Highly customizable:** Tailor Org-mode to your specific needs and preferences. Customize keybindings, themes, and functionality with a vast array of settings.\n* **Extensive integrations:** Integrate Org-mode with external tools and services. Utilize plugins for project management, time tracking, and more.\n*"},"finish_reason":null}]}

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374425,"choices":[{"index":0,"delta":{"role":"assistant","content":" **Open-source and free:** Org-mode is an open-source tool, freely available for anyone to use and contribute to.\n\n**6. Additional Advantages:**\n\n* **Versatility:** Org-mode can be used for a wide range of purposes, from personal task management to academic research and professional project management.\n* **Offline access:** Work on your tasks and notes even without an internet connection.\n* **Minimalist interface:** Focus on your content without distractions from a cluttered interface.\n\n**Overall,"},"finish_reason":null}]}

data: {"id":"gen-WGtFmr5H25TvXGEE2UYmzh5FWs2K","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714374425,"choices":[{"index":0,"delta":{"role":"assistant","content":" Org-mode empowers you to manage your time, tasks, projects, and information effectively. Its versatility, customization options, and integration capabilities make it an indispensable tool for anyone seeking an efficient and organized workflow.**\n\n**Additional Resources:**\n\n* Org-mode website: https://orgmode.org/\n* Emacs Wiki: https://www.gnu.org/software/emacs/manual/html_node/Org-Mode.html\n* Org-mode tutorial: https://www.gnu.org/software/emacs/manual/html_node/Org-Tutorial.html"},"finish_reason":"STOP"}]}

data: [DONE]

response

** Advantages of Org-mode: A Detailed Overview

Org-mode is a powerful and versatile organizational tool integrated into the Emacs text editor. It offers a plethora of features for managing tasks, notes, projects, and much more. This comprehensive overview delves into the key advantages of using Org-mode:

*1. Task and Project Management:*

- *Creating and managing tasks:* Org-mode allows you to create tasks with deadlines, priorities, tags, and dependencies. You can also track task completion, set reminders, and generate reports.
- *Project planning:* Org-mode excels at project planning by enabling you to break down projects into smaller, actionable steps. Gantt charts and other visualization tools help you monitor project progress.
- *Time management:* Track time spent on tasks and projects using the built-in timers. Analyze your time usage and identify areas for improvement.

*2. Note-taking and Outlining:*

- *Flexible note-taking:* Capture ideas, thoughts, and meeting notes in a structured format. Org-mode supports various heading levels, bullet points, and embedded images.
- *Outlining and structuring:* Organize your notes hierarchically with headings and subheadings. Easily navigate and search through your notes.
- *Knowledge management:* Build a personal knowledge base by linking related notes and creating a network of information.

*3. Content Creation and Editing:*

- *Document creation:* Create documents, articles, and presentations with Org-mode's text editor. Export your documents to various formats like LaTeX, HTML, and Markdown.
/ *Writing and editing:* Focus on writing without distractions. Org-mode provides spelling and grammar checkers, code highlighting, and other writing aids.
- *Collaboration:* Share your Org-mode files with others for collaborative editing and project management.

*4. Scheduling and Reminders:*

- *Calendar integration:* Seamlessly integrate your Org-mode tasks and events with your calendar. Sync reminders and deadlines across different platforms.
- *Deadline management:* Set deadlines for tasks and receive timely reminders. Avoid missing important deadlines and stay on track.
- *Agenda planning:* Create daily or weekly agendas by scheduling tasks and appointments in your calendar.

*5. Customization and Integration:*

- *Highly customizable:* Tailor Org-mode to your specific needs and preferences. Customize keybindings, themes, and functionality with a vast array of settings.
- *Extensive integrations:* Integrate Org-mode with external tools and services. Utilize plugins for project management, time tracking, and more.
/ *Open-source and free:* Org-mode is an open-source tool, freely available for anyone to use and contribute to.

*6. Additional Advantages:*

- *Versatility:* Org-mode can be used for a wide range of purposes, from personal task management to academic research and professional project management.
- *Offline access:* Work on your tasks and notes even without an internet connection.
- *Minimalist interface:* Focus on your content without distractions from a cluttered interface.

*Overall, Org-mode empowers you to manage your time, tasks, projects, and information effectively. Its versatility, customization options, and integration capabilities make it an indispensable tool for anyone seeking an efficient and organized workflow.*

*Additional Resources:*

- Org-mode website: https://orgmode.org/
- Emacs Wiki: https://www.gnu.org/software/emacs/manual/html_node/Org-Mode.html
- Org-mode tutorial: https://www.gnu.org/software/emacs/manual/html_node/Org-Tutorial.html

karthink added a commit that referenced this issue Apr 29, 2024
* test/gptel-org-test.el (gptel-org--test-compare-org): Add a
helper function to view the markdown input and org output
interactively.

* gptel-org.el (gptel--stream-convert-markdown->org): Handle
single asterisks at the end of messages.  Addresses #296.
@karthink
Copy link
Owner

karthink commented Apr 29, 2024

/ *Writing and editing:* Focus on writing without distractions. Org-mode provides spelling and grammar checkers, code highlighting, and other writing aids.

Okay, I fixed this edge case too. Could you get the LLM to generate a source block with what looks like a markdown heading (#) inside? Something like

This is some text

```sh
echo foo

# this is a bash comment
echo bar
```

Some more text.

The # in the bash comment should not be replaced with an Org headline.

@wlauppe
Copy link
Author

wlauppe commented Apr 30, 2024

Hello Karthik, yes, it seems to be working: commit version 97ab6cb, produces the following:

Give me a bash script, that counts from 1 to 10:
gptel-log

{
  "gptel": "request body",
  "timestamp": "2024-04-30 10:47:18"
}
{
  "model": "google/gemini-pro",
  "messages": [
    {
      "role": "system",
      "content": ""
    },
    {
      "role": "user",
      "content": "Give me a bash script, that counts from 1 to 10:"
    }
  ],
  "stream": true,
  "temperature": 1.0
}
{
  "gptel": "response body",
  "timestamp": "2024-04-30 10:47:22"
}
: OPENROUTER PROCESSING

: OPENROUTER PROCESSING

: OPENROUTER PROCESSING

data: {"id":"gen-vP2OOvOQWsiSfeCebg9LqFTa1ZVS","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714466840,"choices":[{"index":0,"delta":{"role":"assistant","content":"```\n"},"finish_reason":null}]}

data: {"id":"gen-vP2OOvOQWsiSfeCebg9LqFTa1ZVS","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714466840,"choices":[{"index":0,"delta":{"role":"assistant","content":"#!/bin/bash\n\n# Loop from 1 to 10\nfor i in {1..10}; do\n  # Print the current"},"finish_reason":null}]}

data: {"id":"gen-vP2OOvOQWsiSfeCebg9LqFTa1ZVS","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714466841,"choices":[{"index":0,"delta":{"role":"assistant","content":" number\n  echo $i\ndone\n```\n\n### Explanation:\n\n* `#!/bin/bash`: This line tells the"},"finish_reason":null}]}

data: {"id":"gen-vP2OOvOQWsiSfeCebg9LqFTa1ZVS","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714466841,"choices":[{"index":0,"delta":{"role":"assistant","content":" system that the script should be executed using the Bash interpreter.\n* `# Loop from 1 to 10`: This is a comment explaining what the script does.\n* `for i in {1..10}; do`: This line"},"finish_reason":null}]}

data: {"id":"gen-vP2OOvOQWsiSfeCebg9LqFTa1ZVS","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714466842,"choices":[{"index":0,"delta":{"role":"assistant","content":" starts a loop that iterates from 1 to 10. The variable `i` will take on the values 1, 2, 3, ..., 10 in each iteration.\n* `echo $i`: This line prints the current value of"},"finish_reason":null}]}

data: {"id":"gen-vP2OOvOQWsiSfeCebg9LqFTa1ZVS","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714466842,"choices":[{"index":0,"delta":{"role":"assistant","content":" `i` to the console.\n* `done`: This line marks the end of the loop.\n\n### How to Run the Script:\n\n1. Save the script to a file, for example, `count.sh`.\n2. Make the script executable using `chmod +x count.sh`.\n3. Run the script using `./count.sh`.\n\nThis will print the numbers 1 to 1"},"finish_reason":null}]}

data: {"id":"gen-vP2OOvOQWsiSfeCebg9LqFTa1ZVS","model":"google/gemini-pro","object":"chat.completion.chunk","created":1714466842,"choices":[{"index":0,"delta":{"role":"assistant","content":"0 to the console, one per line. \n"},"finish_reason":"STOP"}]}

data: [DONE]

response

#+begin_src 
#!/bin/bash

# Loop from 1 to 10
for i in {1..10}; do
  # Print the current number
  echo $i
done
#+end_src

*** Explanation:

- =#!/bin/bash=: This line tells the system that the script should be executed using the Bash interpreter.
- =# Loop from 1 to 10=: This is a comment explaining what the script does.
- =for i in {1..10}; do=: This line starts a loop that iterates from 1 to 10. The variable =i= will take on the values 1, 2, 3, ..., 10 in each iteration.
- =echo $i=: This line prints the current value of =i= to the console.
- =done=: This line marks the end of the loop.

*** How to Run the Script:

1. Save the script to a file, for example, =count.sh=.
2. Make the script executable using =chmod +x count.sh=.
3. Run the script using =./count.sh=.

This will print the numbers 1 to 10 to the console, one per line. 

@wlauppe wlauppe closed this as completed Apr 30, 2024
@wlauppe
Copy link
Author

wlauppe commented Apr 30, 2024

I should point out that I couldn't reproduce a fault in handling bash comments with commit 4273f06. It worked correctly on my machine, but the newest commit 97ab6cb also works correctly, as i said.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants