Compare commits
5
Commits
repo_work
...
446978704d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
446978704d | ||
|
|
f24bd5b361 | ||
|
|
4d5c27cfaa | ||
|
|
d45f0be314 | ||
|
|
e1a24aff20 |
@@ -2,3 +2,4 @@
|
||||
__pycache__
|
||||
.venv
|
||||
.aider*
|
||||
.vscode
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -1,83 +0,0 @@
|
||||
<think>
|
||||
Alright, I've got this query from someone who wants to create an Ollama Blog Writer using Python. Let me break down what they're asking for.
|
||||
|
||||
First off, they mention needing a Python file that can communicate with a local Ollama instance. So, I should look into existing libraries or tools that enable communication with Ollama. The user is also interested in integrating Trilium for structured notes as prompts. They've provided a link to the trilium-py GitHub repository, which seems like a good starting point.
|
||||
|
||||
Next, their goal is to create a blog entry through their GitLab repo by making a branch and submitting a pull request. They want the PR content approved before proceeding further. That suggests they need guidance on structuring this part of their project, possibly including how to implement the API calls for both Ollama and Trilium.
|
||||
|
||||
The user also wants to send a notification to their matrix account about the new PR and provide a 20-word summary. This means I'll need to help them craft a concise message that includes these elements.
|
||||
|
||||
Additionally, they specified using almost no code examples in their blog post and adopting a light, comedic tone. They mentioned being Australian, so incorporating some local humor could make the content more relatable.
|
||||
|
||||
I should ensure that the markdown is properly formatted without any code blocks or markdown language. The title isn't to be included in the output, so I'll focus solely on the content of the blog post.
|
||||
|
||||
Putting it all together, the structure will start with an introduction explaining the project's purpose and then delve into each component: Ollama communication, Trilium setup, blog entry creation via GitLab, and finally, notifications. Each section should be concise to keep within the 1000-word limit and maintain a friendly tone.
|
||||
|
||||
I need to make sure that the instructions are clear but not too technical, avoiding jargon where possible or explaining it when necessary. The humor will come from the relatable examples of writing blog posts and handling PRs with enthusiasm.
|
||||
</think>
|
||||
|
||||
# Creating an Ollama Blog Writer
|
||||
|
||||
Alright, fellow tech enthusiasts! Today, I’m super excited to share how I built a custom Python tool to create my very own Ollama blog writer. It’s basically my personal scribe for tech blogs—except it uses AI to generate content instead of me typing it out. Let me break down the process step by step, because honestly, it’s as much of a rollercoaster as writing a blog post!
|
||||
|
||||
## Step 1: Communicating with Ollama
|
||||
|
||||
First things first, I needed to connect my Python script to a running Ollama instance. Lucky for me, there are some great libraries out there that make this happen. One of my favorites is `ollama-sql` for SQL-like queries and `ollama-py` for general communication. With these tools, I could send requests to Ollama and get back the responses in a structured format.
|
||||
|
||||
For example, if I wanted to ask Ollama about the latest tech trends, I might send something like:
|
||||
```python
|
||||
import ollama as Ollama
|
||||
ollama_instance = Ollama.init()
|
||||
response = ollama_instance.query("What are the top AI developments this year?")
|
||||
print(response)
|
||||
```
|
||||
|
||||
This would give me a JSON response that I could parse and use for my blog. Easy peasy!
|
||||
|
||||
## Step 2: Integrating Trilium for Structured Notes
|
||||
|
||||
Speaking of which, I also wanted to make sure my blog posts were well-organized. That’s where Trilium comes in—its structured note system is perfect for keeping track of ideas before writing them up. By using prompts based on Trilium entries, my Python script can generate more focused and coherent blog posts.
|
||||
|
||||
For instance, if I had a Trilium entry like:
|
||||
```json
|
||||
{
|
||||
"id": "123",
|
||||
"content": "AI in customer service is booming.",
|
||||
"type": "thought"
|
||||
}
|
||||
```
|
||||
I could use that as a prompt to generate something like:
|
||||
*"In the rapidly evolving landscape of AI applications, customer service has taken a quantum leap with AI-powered platforms...."*
|
||||
|
||||
Trilium makes it easy to manage these notes and pull them into prompts for my blog writer script.
|
||||
|
||||
## Step 3: Creating Blog Entries in My GitLab Repo
|
||||
|
||||
Now, here’s where things get interesting (and slightly nerve-wracking). I wanted to create a proper blog entry that posts directly to my GitLab repo. So, I forked the [aridgwayweb/blog](https://git.aridgwayweb.com/blog) repository and started working on a branch dedicated to this project.
|
||||
|
||||
In my `create_blog_entry.py` script, I used GitLab’s API to create a new entry. It involved authenticating with my account and constructing the appropriate JSON payload that includes all the necessary metadata—like title, summary, content, etc. The hardest part was making sure everything fit within GitLab’s API constraints and formatting correctly.
|
||||
|
||||
Here’s an excerpt of what I sent:
|
||||
```python
|
||||
import gitlab
|
||||
gl = gitlab.Gitlab('gitlab.com', 'your_api_key')
|
||||
entry = gl.entries.create(
|
||||
title="The Future of AI in Software Development",
|
||||
summary="Exploring how artificial intelligence is transforming software development processes.",
|
||||
content=[
|
||||
"AI has always been a disruptive force in technology, and its role in software development is no different.",
|
||||
"From automating repetitive tasks to enhancing decision-making, AI is reshaping the industry landscape."
|
||||
]
|
||||
)
|
||||
```
|
||||
|
||||
And then I notified myself that it was done!
|
||||
|
||||
## Step 4: Sending Notifications via Matrix
|
||||
|
||||
Finally, after everything was up and running, I sent a quick notification to my matrix account about the new pull request. It went something like this:
|
||||
*"Hey everyone, I’m super excited to announce a new PR for my Ollama blog writer project! This is pretty much the closest thing to an AI-powered scribe that doesn’t involve me actually writing anything."*
|
||||
|
||||
Of course, it’s still pending approval since I need to make sure all the pieces fit together before releasing it to the public. But hey, at least I’ve got a solid foundation to build on!
|
||||
|
||||
In conclusion, creating my Ollama Blog Writer has been an absolute blast. It combines my love for tech with Python and AI in ways I never imagined. Now, if only I could find a way to automate writing blog *reviews*…
|
||||
@@ -1,46 +0,0 @@
|
||||
<think>
|
||||
Okay, so I'm trying to wrap my head around this PowerBI experience for a data product. Let me start by thinking about why someone might switch to PowerBI as their main tool.
|
||||
|
||||
First, the blog title says it's about API performance. So maybe they're looking at how well PowerBI can handle getting data from different sources efficiently. The user mentioned that PowerBI requires everyone to be on the same tier, which probably means they have to use the same subscription level or tiered access. That could be a problem if you're in a company where not everyone is on the same plan because it might limit flexibility or cause costs to spike.
|
||||
|
||||
Next, pulling data with PowerBI seems limited. They say it's only useful for small tables. I guess that means if your dataset is big or complex, PowerBI can't handle it well. Maybe it's not optimized for large-scale data or intricate queries, which could be a deal-breaker for more robust applications.
|
||||
|
||||
Then there's the issue of being part of the Microsoft ecosystem. If you're using other Microsoft tools like SQL Server or Azure, that might actually help with structuring queries in PowerBI. But if you're outside this ecosystem, it fails. Hmm, so maybe the user is frustrated because their team isn't all Microsoft users, making integration tricky.
|
||||
|
||||
Lastly, while PowerBI is great for visualization, it seems to come at a cost of real-time performance and versioning. So even though it's good visually, when it comes to handling data performance or ensuring proper versioning across different environments, maybe it falls short.
|
||||
|
||||
Putting this together, the user's takeaway is that unless there's no choice, especially if you're not within Microsoft's ecosystem, PowerBI might not be the best fit. It could lead to failures and hurt their product's performance. They probably need to consider alternatives or find ways to integrate PowerBI more effectively even outside the Microsoft ecosystem.
|
||||
</think>
|
||||
|
||||
# The Curious Case of PowerBI in Data Product Development
|
||||
|
||||
Alright, let me spill the beans on my latest adventure with PowerBI—spoiler alert: it wasn’t all smooth sailing. So here’s what I learned along the way, and why (gulp) it might not be the silver bullet you think it is.
|
||||
|
||||
## The Shared Data Tier Problem
|
||||
Okay, so one of the first hurdles was this whole shared data tier thing. Let me tell ya, it felt like a non-starter for most companies out there. Imagine walking into an office with this in your lap: “Everyone has to be on the same tier to use PowerBI.” Yeah, sounds like a lot of bureaucracy just to get some data flowing. But then I started thinking—what if they’re not? What if your team isn’t all on the same wavelength when it comes to subscriptions or access levels?
|
||||
|
||||
This meant that not only did you have to manage multiple tiers, but you also had to ensure everyone was up to speed before anyone could even start pulling data. It was like being in a room with people speaking different dialects—nobody could communicate effectively without translating. And trust me, once PowerBI started acting like that, it wasn’t just a little slow; it felt like a whole lot of red tape.
|
||||
|
||||
## Pulling Data: The Small Table Limitation
|
||||
Another thing I quickly realized is the limitation when pulling data from various sources into PowerBI. They say one size fits all, but in reality, it’s more like one size fits most—or at least small tables. When you start dealing with larger datasets or more complex queries, PowerBI just doesn’t cut it. It’s like trying to serve a hot dog in a rice bowl—it’s doable, but it’s just not the same.
|
||||
|
||||
I mean, sure, PowerBI is great for visualizing data once it’s in its native format. But if you need to pull from multiple databases or APIs, it starts to feel like it was built by someone who couldn’t handle more than five columns without getting overwhelmed. And then there are those pesky API calls—each one feels like a separate language that PowerBI doesn’t understand well.
|
||||
|
||||
## The Microsoft Ecosystem Dependency
|
||||
Speaking of which, being part of the Microsoft ecosystem is apparently a double-edged sword. On one hand, it does make integrating and structuring queries within PowerBI much smoother. It’s like having a native tool for your data needs instead of forcing your data into an Excel spreadsheet or some other proprietary format.
|
||||
|
||||
But on the flip side, if you’re not in this ecosystem—whether because of company policy, budget constraints, or just plain convenience—it starts to feel like a failsafe. Imagine trying to drive with one wheel—well, maybe that’s not exactly analogous, but it gets the point across. Without the right tools and environments, PowerBI isn’t as versatile or user-friendly.
|
||||
|
||||
And here’s the kicker: even if you do have access within this ecosystem, real-time performance and versioning become issues. It feels like everything comes with its own set of rules that don’t always align with your data product’s needs.
|
||||
|
||||
## The Visualization vs. Performance Trade-Off
|
||||
Now, I know what some of you are thinking—PowerBI is all about making data beautiful, right? And it does a fantastic job at that. But let me be honest: when it comes to performance outside the box or real-time updates, PowerBI just doesn’t hold up as well as other tools out there.
|
||||
|
||||
It’s like having a beautiful but slow car for racing purposes—sure you can get around, but not if you want to win. Sure, it’s great for meetings and presentations, but when you need your data to move quickly and efficiently across different environments or applications, PowerBI falls short.
|
||||
|
||||
## The Takeaway
|
||||
So after all that, here’s my bottom line: unless you’re in the Microsoft ecosystem—top to tail—you might be better off looking elsewhere. And even within this ecosystem, it seems like you have to make some trade-offs between ease of use and real-world performance needs.
|
||||
|
||||
At the end of the day, it comes down to whether PowerBI can keep up with your data product’s demands or not. If it can’t, then maybe it’s time to explore other avenues—whether that’s a different tool altogether or finding ways to bridge those shared data tiers.
|
||||
|
||||
But hey, at least now I have some direction if something goes south and I need to figure out how to troubleshoot it… like maybe checking my Microsoft ecosystem status!
|
||||
@@ -1,6 +1,6 @@
|
||||
import os
|
||||
from ollama import Client
|
||||
|
||||
import re
|
||||
|
||||
class OllamaGenerator:
|
||||
|
||||
@@ -34,11 +34,16 @@ class OllamaGenerator:
|
||||
'content': f'{prompt}',
|
||||
},
|
||||
])
|
||||
|
||||
# the deepseek model returns <think> this removes those tabs from the output
|
||||
# return re.sub(r"<think|.\n\r+?|([^;]*)\/think>",'',self.response['message']['content'])
|
||||
return self.response['message']['content']
|
||||
|
||||
|
||||
except Exception as e:
|
||||
raise Exception(f"Failed to generate markdown: {e}")
|
||||
|
||||
def save_to_file(self, filename: str) -> None:
|
||||
with open(filename, "w") as f:
|
||||
f.write(self.generate_markdown())
|
||||
|
||||
|
||||
+1
-1
@@ -19,4 +19,4 @@ for note in tril_notes:
|
||||
tril_notes[note]['content'],
|
||||
"deepseek-r1:7b")
|
||||
os_friendly_title = convert_to_lowercase_with_underscores(tril_notes[note]['title'])
|
||||
ai_gen.save_to_file(f"/blog_creator/generated_files/{os_friendly_title}.md")
|
||||
ai_gen.save_to_file(f"./generated_files/{os_friendly_title}.md")
|
||||
|
||||
Reference in New Issue
Block a user