Replies (26)

its known. any body can use it. there is 1000000 of libraries and developers using them. we can use them on nostr as well. we already have a lot or more experience with them. they rely on proper well-defined and battle tested protocols.
how would it work natively with Nostr? How would they advertise themselves? Could they communicate over Nostr events sent via relays, or is it a lower level protocol like https, websockets, etc? If the communication is not happening over Nostr (and instead relies on https, websockets, etc) why even user Nostr to begin with? I think that as soon as you start to try building any of those protocols on Nostr, you'll realize you either need to offload communication from Nostr events or it will be more complicated than some of the existing DVM flows. The DVM spec is flexible though, so if it is possible to do any of those, asynchronously, then maybe you could get it to work, but I bet it would be complicated than some of the ones we have now (like 5300 for example).
"Each DVM kind can have its own flow, NIP-90 flow is a suggestion, not a requirement." This is basically why. There is no point in having a spec that is just a suggestion. All I want is clarity, the current model is producing way too much confusion. Deleting everything was meant as a first step only.
@Dustin Dannenhauer would you say @ots_nbot qualifies as a DVM or not? Shouldn't that kind of thing also be considered a DVM? What about a thing like I think the way Bluesky did this "labeler" stuff is interesting in a way: the DVM is just a "bot". The bot should have a kind:0 profile and it can even post notes sometimes, perhaps advertising their services. Some bots respond to kind:1 commands, others respond to kind:5001 commands, some send DMs, others publish content when prompted, others do it without being prompted. If multiple people are running bots that behave similarly -- or if we expect that to happen -- it's time to standardize their behavior, otherwise there is no point. There are tons of bots out there, I'd say some will never qualify as a DVM because they're just shitposting (which is good), but some are posting weather data, others are posting bitcoin data. It would be nice if bots publishing weather data could be standardized as DVMs, for example. I don't know bitcoin data, but what do I know? I don't have a very concrete plan.
I forgot to say that @Keyhan Alizadeh is right in the sense that HTTP services could also be considered DVMs. It's hard for me to imagine that the feed-generator DVMs wouldn't be better as HTTP services rather than Nostr event publishers, or the Vertex DVM (which, by the way, is not listed in the official DVM specs, do not follow them strictly and is being used as an HTTP service even by their own website ). In that sense every zap provider is a DVM: you call it via HTTP and it emits a kind:9735 event. But today apparently people feel they're not being nostric enough if they do not turn what could have been an HTTP service into a service that listens on a bunch of relays for events and responds with events. I think a new NIP with clearer recommendations would address that, by which I mean we should tell people that sometimes it's better to do an HTTP service, and we can even standardize those HTTP services if they call for it (again, like NIP-57 did).
A lot of great questions here - I'll do my best to respond to as many as I can now and share my perspective about how I think about the DVM ecosystem: The primary benefit of DVMs is to be a better, more permission-less alternative to APIs that we use today. Once you, as a user, have an npub and some sats, you can start to interact with ANY DVM - this already is way better than API services which require custom login, setup, personal details, fiat banking, etc. per each service. Additionally, because of the way DVM kinds are setup, you can post a job to a kind and then pick from any DVMs that respond - this provides free market dynamics and competition, along with redundancy, etc. The competition aspect hasn't really been realized in practice quite yet (except for a period of time when AI Image Generators experienced this, kind 5100). > "There is no point in having a spec that is just a suggestion. " Aren't all specs suggestions? Kidding. Really though, myself and many others have been feeling this way and have been discussing improvements. It's pretty clear to me that kinds 5xxx are for job requests/ inputs by consumers of a service, kinds 6xxx are for job results / outputs, and kind 7000 is for intermediate communication. I think this kind numbering works really well. We should remove the requirement for a DVM to respond to 5xxx like in the case of a weather data DVM that only would publish kind 6xxx events. We could also remove the requirements for a 6xxx event, which I can imagine might happen when a DVM responds to a user in an alternative fashion, like a DM, email, text, a special websocket connection, etc. BTW we are going to run out of kinds as 5000-6999 fill up, so we should go ahead and reserve kinds 50000-69999 and 500000-699999. > "Deleting everything was meant as a first step only." thanks for explaining, I didn't know this. > "would you say [@ots_nbot]( qualifies as a DVM or not? Shouldn't that kind of thing also be considered a DVM?" I'd say it can qualify as a DVM if there's a need for structured input (json) requests to the bot. More generally, we shouldn't be concerned with whether something is a bot or not (as time goes on, this becomes more pointless to try to solve). We should be more concerned with the nature of the interaction. If you're going to be communicating with something via natural language all the time (and maybe images) you could run the service as a regular npub, using kind:1 events. If instead the communication is structured json with parameters, it makes sense to use a different kind so as to not pollute the kind:1 space. > "If multiple people are running bots that behave similarly -- or if we expect that to happen -- it's time to standardize their behavior, otherwise there is no point. " I disagree that the emphasis should be on whether something is a bot. It should be more based on the kind of interaction (structured data vs natural language). > "It would be nice if bots publishing weather data could be standardized as DVMs," I completely agree. I'd say this is fine to do now, someone just needs to pick an unused kind in the 6xxx range and start broadcasting those events. > "It's hard for me to imagine that the feed-generator DVMs wouldn't be better as HTTP services rather than Nostr event publishers, or the Vertex DVM (which, by the way, is not listed in the official DVM specs, do not follow them strictly and is being used as an HTTP service even by their own website" Maybe. The interaction could always start via DVMs and then move to HTTP, websockets, etc. But then you have to use a different auth, and maybe other tradeoffs. You expose your IP, etc. For something like a streaming use case it's probably worth it. The more services that can run as DVMs could lead to more inter-operatibility and DVM chaining, in a more seamless fashion than trying to use multiple APIs, so I'd like to see more DVM services running and operating at the Nostr level. DVMs, as they are today, can be BOTH posting profile:0 data about itself, posting kind:1 events to Nostr, and also doing specialized work via kinds 5000-5999. Fun idea - humans could decide to earn some sats by announcing they want to do some work on a particular type of job type in the same way (hasn't happened quite yet, I believe).
This is not true, you're not forced to implement them, but once you decide to implement them you must follow the rules. Unless you're just saying "you can't force anyone to do anything", which is also true but then it also applies to the required ones.
nevent1qvzqqqqqqypzpkscaxrqqs8nhaynsahuz6c6jy4wtfhkl2x4zkwrmc4cyvaqmxz3qy08wumn8ghj7mn0wd68yttsw43zuam9d3kx7unyv4ezumn9wshsz9nhwden5te0vfjhvmewdehhxarjxyhxxmmd9uq3xamnwvaz7tmsw4e8qmr9wpskwtn9wvhsqg878vwyhhwjgfpqpygnuemvz3hvpvj6c3xgc0f5wh5k3a9udzyl9qt6k8fw
I agree about calling things bots, it was poorly worded. I guess we could say that a bot can be a person and a person can be a bot, just like Bluesky labelers can also be either bots or humans. I think I was just trying to convey a different concept of bot, which is that of a profile that can be interact with in a programmatic way, so it "looks like a bot", doesn't matter if there is a human inside the box. I think you can understand and agree with this because DVMDash uses a robot icon for its list of DVMs tab, too.
It looks like you mostly agree with me, except you want to reserve the kinds. Reserving the kinds, at least to me, was a good idea when I thought there could be a generic interface for interacting with DVMs --and that's why I tried to make a `nak dvm` command but failed, and that may also be why DVMDash doesn't show details about each request and response, only statistics: because they're not really generic, you would have to write dedicated code for each. Doing as you suggest wouldn't improve things. Now besides knowing what parameters each DVM takes as input and as named parameters, the format and shape of the response we will also have to know if a DVM accepts a prompt or not, or if it returns a response or not -- and, worse, if it uses the feedback in any particular way that has to be handled or not. This is all excluding the fact that a DVM may just not respond you and you wouldn't know if that was because you did something wrong or if the relay is broken or the DVM is broken. What I'm trying to say is: hardcoded specs, one for each DVM, is already how it has to work, and will work better. Reserving a kind range doesn't make sense in that context, and getting rid of the reserved range and of the strictly request-response format allows us to grandfather in other forms of automated interaction into the DVM umbrella. I've said before that "DVMs as a concept make no sense", but I think they're a great marketing term, we just need to stop pretending they describe a "standard".
So you don't like You think each DVM should publish their own documentation? I am not against that at, in fact that's kind of what I'm proposing: to let people do their stuff freely instead of trying to force them into a useless spec. I don't understand how these who NIP-89 shenanigans work at all, I would welcome an explanation, preferably with examples. What is the OPV (original Pablo vision) for DVMs? I think it was me who got him into the reserved kind range because in the beginning he wanted all DVMs to just one kind -- or something like that? I regret my decision, I thought having more structure would bring sanity to the thing, but it didn't. Now we have the worst of both worlds: a spec that no one follows, but people follow a little bit here and there and for no benefit to anyone, and then people are attached to that spec and get mad when I suggest deleting it. I think we should go back to the unstructured world, that will be better.
Haha - I think it might just be that a lot of people behind the scenes are really getting into DVMs and this PR caught everyone by surprise. Most of us would rather upgrade the existing NIP-90, than start over. Yes, each DVM should publish their own documentation. If a DVM operator doesn’t keep theirs up to date, it's their loss. They are already responsible for keeping their DVM online and available. Nip-89 is pretty neat. DVMs are mostly using Kind 31990 which says which job request kinds they accept. I recently added this to DVMDash, so that you can see which DVMs operate on which kinds. Most only operate on a single kind, but some DVMs like https://stats.dvmdash.live/dvm-stats/5fc48ac4765ff81e9c51014b9d2f2c91621370f4c6b5452a9c06456e4cccaeb4 support multiple kinds. In the NIP-89 announcement, the 'content' field is stringified json, and then within that is a ‘nip90Params’ field that contains all the inputs that the DVM wants to receive in the 5xxx job request kinds. So for translation DVMs, you should give a ‘language’ param. Here’s a big analysis I just published covering which params are being used per 5xxx DVM kind: https://wikistr.com/dvm-announcement-analysis*da18e9860040f3bf493876fc16b1a912ae5a6f6fa8d5159c3de2b8233a0d9851 > re: nostr-data-vending-machines.org I'm personally not the biggest fan. It requires manual effort to keep up to date. I'd rather have clients that pull wiki events or kind 31990 events (nip-89) and show the actual documentation that the DVM owners published themselves. This is how I approached adding documentation per DVM kinds on DVMDash - I collected all the events on each DVM kind, generate a wiki doc with a brief description of the input and output, and then I link to these notes (really, dvmdash frontend pulls the wiki notes and displays them). Right now, if a new DVM came online under a new kind, and that DVM owner published a wiki event with a 'd' tag for 'kind:5xxx' where 5xxx is the kind they used, it should show up on DVMDash automatically. For each DVM on DVMDash, it pulls data from their NIP-89 kind 31990 announcements for their description, etc. While DVM owners have been decently good about publishing NIP-89 announcements, they haven't been so good about other types of documentation (except Vertex). I want to encourage DVM owners to also publish a kind wiki if one doesn't exist, for how they expect it to operate if they are introducing it for the first time. We might also want to add a 3rd documentation page that's just about the DVM itself. So really, every DVM operator should do the following: 1. publish a NIP-89 kind 31990 announcement about the params they expect and kinds they support 2. publish a wiki page about their DVM, including example inputs and outputs, a description, how much it costs, etc. AFAIK this hasn't really been done yet. data-vending-machines.org was a first attempt at a such a thing, but too centralized imo. 3. (optional; for people making DVMs under new kinds) - write a kind wiki spec like what I've done here: https://njump.me/naddr1qvzqqqrcvgpzpkscaxrqqs8nhaynsahuz6c6jy4wtfhkl2x4zkwrmc4cyvaqmxz3qqykk6twvsar2vesxq02d424 - this is what is shown on https://stats.dvmdash.live/kind-stats